Math 用极大值法求解线性方程组
我试图使用Math 用极大值法求解线性方程组,math,matrix,linear-programming,discrete-mathematics,maxima,Math,Matrix,Linear Programming,Discrete Mathematics,Maxima,我试图使用linsolve(eqlist,varlist)为Maxima中的线性系统编写一个通用解算器,但不必明确指定问题的维度 这是可行的,但将尺寸标注固定为3: linsolve([eq[0],eq[1],eq[2]],[a[0],a[1],a[2]]) 这并不是: solution(p):=( array(eq,p+1), /* creating arrays of length p+1 */ array(a,p+1), for i:0 thru p do ( e
linsolve(eqlist,varlist)
为Maxima中的线性系统编写一个通用解算器,但不必明确指定问题的维度
这是可行的,但将尺寸标注固定为3:
linsolve([eq[0],eq[1],eq[2]],[a[0],a[1],a[2]])
这并不是:
solution(p):=(
array(eq,p+1), /* creating arrays of length p+1 */
array(a,p+1),
for i:0 thru p do (
eq[i]: sum(binom(j+1,i)*a[j],j,i,p) = binom(p,i)
),
linsolve(eq,a)
)
有没有关于如何让它发挥作用的见解
问题背后的背景:这个线性系统是在求解整数幂的有限和时产生的,即有限多个平方、立方体或一般幂的和
p
。尽管有限平方和很简单,但一般的解决方案却出人意料地复杂:这里可以找到一个讨论:。显然在Maxima中,列表和数组不是相同的底层对象
数组更复杂,工作起来有点混乱(正如Maxima邮件列表所建议的)
如果我们不使用数组而使用列表,问题就会消失:
solution(p):= block([a, eq], /* give subroutine variables local scope */
v : makelist(a[i], i, 0, p), /* create list of unknowns (0-indexed) */
eq : makelist(sum(binom(j+1,i)*a[j],j,i,p) = binom(p,i), i, 0, p),
/* create list of equations (0-indexed) */
linsolve(eq, v)
)