Resolvendo sistemas lineares em máximos
-
22-09-2019 - |
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.
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