使用下标时,maxima返回错误的结果

时间:2018-04-25 11:04:10

标签: maxima

我正在使用WxMaxima进行一些计算,因此我可以将结果直接导出到我的LaTeX文件中。我有一些希腊语下载的希腊语变量令我头疼。过去在Maxima中,我曾经将下标放在括号[]中。但我注意到_的传统LaTeX语法也有效。除了它不适用于希腊字母:

enter image description here

所以当我想用希腊字母下标希腊字母时,我必须使用括号[]。但它导致了一些计算错误。

例如,考虑两个简单的函数:

%epsilon[r](r):=c[1]-c[2]/r^2;
%epsilon[%theta](r):=c[1]+c[2]/r^2;

现在如果我跑:

fullratsimp(%epsilon[r](r)+%nu*%epsilon[%theta](r));
它给了我:

((c[1]*%nu+c[1])*r^2+c[2]*%nu+c[2])/r^2

enter image description here

这显然是错误的,因为正确的结果可以通过以下方式计算:

fullratsimp((c[1]-c[2]/r^2)+%nu*(c[1]+c[2]/r^2));

enter image description here

如果你能帮助我知道问题是什么以及我如何解决它,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题是foo[x1](y) := ...foo[x2](y) := ...只定义了一个函数foo,第二个定义破坏了第一个函数,因此只定义了foo[x2](y) := ...

您可以通过创建lambda表达式(未命名的函数)并将它们分配给下标变量来获得所需的效果。

(%i1) %epsilon[r](r):=c[1]-c[2]/r^2 $
(%i2) %epsilon[%theta](r):=c[1]+c[2]/r^2 $
(%i3) %epsilon[r];
                                  c
                                   2
(%o3)                 lambda([r], -- + c )
                                   2    1
                                  r
(%i4) %epsilon[%theta];
                                  c
                                   2
(%o4)                 lambda([r], -- + c )
                                   2    1
                                  r
(%i5) kill(%epsilon) $
(%i6) %epsilon[r] : lambda([r], c[1]-c[2]/r^2) $
(%i7) %epsilon[%theta] : lambda([r], c[1]+c[2]/r^2) $
(%i8) %epsilon[r];
                                       c
                                        2
(%o8)                 lambda([r], c  - --)
                                   1    2
                                       r
(%i9) %epsilon[%theta];
                                       c
                                        2
(%o9)                 lambda([r], c  + --)
                                   1    2
                                       r
(%i10) fullratsimp(%epsilon[r](r)+%nu*%epsilon[%theta](r));
                                2
                 (c  %nu + c ) r  + c  %nu - c
                   1        1        2        2
(%o10)           ------------------------------
                                2
                               r

请注意,foo[x](y) := ...也会创建lambda表达式,但您需要确保自己的定义,而不是Maxima自动创建的定义。