Pergunta

Estou tentando escrever um solucionador geral para um sistema linear no máximo usando linsolve(eqlist, varlist), mas sem ter que especificar explicitamente a dimensão do problema.

Isso funciona, mas corrige a dimensão para 3:

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

Isso não é:

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

Alguma visão de como fazer isso funcionar?


Antecedentes por trás do problema: Este sistema linear surge ao resolver o somatório finito de poderes inteiros, ou seja, a soma de muitos quadrados, cubos ou poderes gerais p. Embora a soma finita dos quadrados seja direta, a solução geral é surpreendentemente complicada: uma discussão pode ser encontrada aqui: Somatório finito por relações de recorrência, parte 2.

Foi útil?

Solução

Aparentemente, nos máximos, listas e matrizes não são o mesmo objeto subjacente.

Matrizes são mais complexas e um pouco de bagunça para trabalhar (conforme sugerido Nesta postagem para a lista de correspondência Maxima).

O problema desaparece se ficarmos longe das matrizes e trabalharmos com listas:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top