2010-02-23 156 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) 
)