Решение линейных систем в максимуме
-
22-09-2019 - |
Вопрос
Я пытаюсь написать общий решатель для линейной системы в максимуме, используя linsolve(eqlist, varlist)
, но без необходимости явно указать измерение проблемы.
Это работает, но исправляет измерение 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
. Анкет Хотя конечная сумма квадратов проста, общее решение на удивление сложное: здесь можно найти обсуждение: Конечное суммирование по отношениям рецидивов, часть 2.
Решение
Очевидно, в максимуме списки и массивы - это не один и тот же основной объект.
Массивы более сложны и немного беспорядочно работать (как предполагалось В этой публикации в список рассылки 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)
)
Не связан с StackOverflow