2010-02-23 8 views
0

Я пытаюсь написать общий решатель для линейной системы в Maxima с использованием linsolve(eqlist, varlist), но без явного указания размерности проблемы.Решение линейных систем в Maxima

Это работает, но фиксирует измерение 3:

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

Это не:

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

Любое представление о том, как получить эту работу?


фона за проблемой: возникает эта линейная система при решении конечного суммирования целых степеней, то есть сумма конечного числа квадратов, кубов или общих полномочий p. Хотя конечная сумма квадратов проста, общее решение удивительно сложно: обсуждение можно найти здесь: Finite Summation by Recurrence Relations, Part 2.

ответ

1

По-видимому, в Maxima списки и массивы НЕ являются одним и тем же базовым объектом.

Массивы более сложны и немного беспорядочны для работы (как предложено in this posting в список рассылки Maxima).

Проблема уходит, если держаться подальше от массивов и работать со списками вместо:

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

 Смежные вопросы

  • Нет связанных вопросов^_^