【问题标题】:Solving linear systems in Maxima在 Maxima 中求解线性系统
【发布时间】:2010-02-23 18:21:26
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: math matrix linear-programming discrete-mathematics maxima


    【解决方案1】:

    显然在 Maxima 中,列表和数组不是同一个底层对象。

    数组更复杂,工作起来有点混乱(正如 Maxima 邮件列表中建议的in this posting)。

    如果我们远离数组而使用列表,问题就会消失:

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

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2020-04-03
      • 2019-01-15
      • 2015-08-07
      相关资源
      最近更新 更多