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 .

È stato utile?

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
scroll top