【问题标题】:Maxima - using square brackets in variable namesMaxima - 在变量名中使用方括号
【发布时间】:2012-10-26 19:09:49
【问题描述】:

在 Maxima 中,我想使用 rk 函数对任意数量的变量 x[1] ... x[n] 中的微分方程组进行数值求解。我在变量名中使用方括号,以便我可以在 for 循环中索引变量。这是当 n = 2 时对 rk 的示例调用:

rk([derivativeOfX[1],-2*x[1]+x[2],derivativeOfX[2],x[1]-2*x[2]], [X[1],derivativeOfX[1],X[2],derivativeOfX[2]], [1,1,2,0], [t,0,10,0.1])

不幸的是,我得到了错误:

define: in definition of f_rk_4, found bad argument X[1]

如果我手动将X[1] 替换为x1 并将X[2] 替换为x2,错误就会消失:

rk([derivativeOfX1,-2*x1+x2,derivativeOfX2,x1-2*x2], [x1,derivativeOfX1,x2,derivativeOfX2], [1,1,2,0], [t,0,10,0.1]); 

rk 似乎不喜欢变量名中的方括号,但我需要它们以便在 for 循环中索引变量。我该怎么办?

【问题讨论】:

    标签: maxima


    【解决方案1】:

    一个简单的解决方案是有两组变量。在循环中,您使用 x[1] 和 x[2]。在您的 rk(...) 表达式之前,设置 x1 等于 x[1] 和 x2 等于 x[2]。打电话给 rk。然后将 x1 存储在 x[1] 中,将 x2 存储在 x[2] 中。

    请注意,您可以使用 concat 生成变量名称。例如 concat('x, 1) 将产生符号 x1。

    【讨论】:

    • 我将如何在循环中设置 x1 = x[1] 和 x2 = x[2]?我仍然需要索引变量 x1 和 x2。
    • 您可以使用 concat 生成变量。表达式 concat('x, 1) 给出 x1 作为结果。
    • 好吧,这就是关键!谢谢! (只需将评论“连接”到您的答案,我会接受)。
    • 我已将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2014-02-21
    • 1970-01-01
    • 2018-04-06
    • 2014-05-31
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多