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 に答える