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)
)