使用下标时最大值 returns 错误结果
maxima returns wrong result when using subscripts
我正在使用 WxMaxima 进行一些计算,因此我可以将结果直接导出到我的 LaTeX 文件中。我有一些带有希腊下标的希腊变量,这让我很头疼。以前在Maxima里我习惯把下标放在括号[]
里面。但我注意到 _
的传统 LaTeX 语法也有效。除非它不适用于希腊字母:
所以当我想用希腊字母下标希腊字母时,我必须使用括号[]
。但它会导致一些计算错误。
例如考虑两个简单的函数:
%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
这显然是错误的,因为正确的结果可以通过以下方式计算:
fullratsimp((c[1]-c[2]/r^2)+%nu*(c[1]+c[2]/r^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自动创建的定义。
我正在使用 WxMaxima 进行一些计算,因此我可以将结果直接导出到我的 LaTeX 文件中。我有一些带有希腊下标的希腊变量,这让我很头疼。以前在Maxima里我习惯把下标放在括号[]
里面。但我注意到 _
的传统 LaTeX 语法也有效。除非它不适用于希腊字母:
所以当我想用希腊字母下标希腊字母时,我必须使用括号[]
。但它会导致一些计算错误。
例如考虑两个简单的函数:
%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
这显然是错误的,因为正确的结果可以通过以下方式计算:
fullratsimp((c[1]-c[2]/r^2)+%nu*(c[1]+c[2]/r^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自动创建的定义。