0

我正在尝试使用 为 Maxima 中的线性系统编写通用求解器linsolve(eqlist, varlist),但不必明确指定问题的维度。

这有效,但将尺寸固定为 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。尽管有限平方和很简单,但一般解决方案却出奇地复杂:可以在此处找到讨论:递归关系的有限求和,第 2 部分

4

1 回答 1

1

显然在 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)
)
于 2010-02-23T23:11:27.573 回答