2010-02-23 158 views
0

我正在尝试使用linsolve(eqlist, varlist)来编写Maxima中的线性系统的一般求解器,但不必明确指定问题的维数。在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的总和该线性系统就产生了。虽然有限的平方和是直截了当的,但一般的解决方案却非常复杂:讨论可以在这里找到:Finite Summation by Recurrence Relations, Part 2

回答

1

显然,在Maxima中,列表和数组不是相同的基础对象。

数组更复杂,工作起来有点麻烦(建议in this posting到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) 
)