Frage

Ich versuche, einen allgemeinen Solver für ein lineares System in Maxima zu schreiben linsolve(eqlist, varlist), aber ohne die Dimension des Problems explizit festlegen zu müssen.

Dies funktioniert, fixiert aber die Dimension auf 3:

linsolve( [ eq[0],eq[1],eq[2] ], [ a[0],a[1],a[2] ])

Das nicht:

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

Irgendwelche Einblicke, wie ich das zum Laufen bringen kann?


Hintergrund hinter dem Problem: Dieses lineare System entsteht bei der Lösung der endgültigen Summierung von Ganzzahlmächten, dh der Summe der endlich viele Quadrate, Würfel oder allgemeinen Kräfte p. Obwohl die endliche Summe der Quadrate unkompliziert ist, ist die allgemeine Lösung überraschend kompliziert: Hier finden Sie eine Diskussion: Endliche Summierung durch Recurce Relations, Teil 2.

War es hilfreich?

Lösung

Anscheinend sind Listen und Arrays in Maxima nicht das gleiche zugrunde liegende Objekt.

Arrays sind komplexer und ein bisschen Chaos, um zu arbeiten (wie vorgeschlagen in diesem Beitrag in die Maxima -Mailingliste).

Das Problem verschwindet, wenn wir uns von Arrays fernhalten und stattdessen mit Listen arbeiten:

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)
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top