我正在尝试使用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。
答案 0 :(得分: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)
)