Risoluzione di sistemi lineari a Maxima
-
22-09-2019 - |
Domanda
Sto cercando di scrivere un risolutore generale per un sistema lineare in Maxima utilizzando linsolve(eqlist, varlist)
, ma senza dover specificare esplicitamente la dimensione del problema.
Questo funziona, ma fissa la dimensione di 3:
linsolve( [ eq[0],eq[1],eq[2] ], [ a[0],a[1],a[2] ])
Questo non lo fa:
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)
)
Tutta la comprensione su come arrivare a questo lavoro?
Fondo dietro il problema : questo sistema lineare sorge quando risolvere la somma finita di potenze intere, cioè la somma di un numero finito di quadrati, cubi, o poteri generale
p
. Anche se la somma dei quadrati finita è semplice, la soluzione generale è sorprendentemente complicato: una discussione può essere trovato qui: sommatoria Finite da ricorrenza Relazioni, Parte 2 .
Soluzione
A quanto pare in Maxima, liste e array non sono lo stesso oggetto sottostante.
Gli array sono più complessi e un po 'di confusione per arrivare a lavorare (come suggerito in questo annuncio alla mailing list Maxima).
Il problema va via se noi stare lontano da matrici e lavorare con le liste, invece:
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)
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow