Pregunta

Estoy tratando de escribir un solucionador general para un sistema lineal en Maxima usando linsolve(eqlist, varlist), pero sin tener que especificar explícitamente la dimensión del problema.

Esto funciona, pero fija la dimensión a 3:

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

Esto no:

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

¿Alguna idea sobre cómo hacer que esto funcione?


Antecedentes detrás del problema: Este sistema lineal surge al resolver la suma finita de los poderes enteros, es decir, la suma de finitamente cuadrados, cubos o poderes generales p. Aunque la suma finita de los cuadrados es directa, la solución general es sorprendentemente complicada: se puede encontrar una discusión aquí: Suma finita por relaciones de recurrencia, Parte 2.

¿Fue útil?

Solución

Aparentemente en Maxima, las listas y las matrices no son el mismo objeto subyacente.

Las matrices son más complejas y un poco desordenadas para trabajar (como se sugiere En esta publicación a la lista de correo de Maxima).

El problema desaparece si nos mantenemos alejados de las matrices y trabajamos con listas: en su lugar:

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)
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top