求解Maxima中的线性系统
-
22-09-2019 - |
题
我正在尝试使用Maxima中的线性系统编写通用求解器 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中,列表和数组不是相同的基础对象。
阵列更复杂,有点混乱(如建议) 在这篇文章中 到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