Вопрос

Я пытаюсь написать общий решатель для линейной системы в максимуме, используя 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)
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top