向量替换
Vector substitution
我在 wxmaxima 中有一个巨大的动态系统,我需要做一些矢量替换,但它最终得到了一些疯狂的结果。这是我需要做的:
forces:[
F1=[x1,y1,z1],
F2=[x2,y2,z2]
];
equations:[F3=-F2];
subst(forces,subst(equations,F1+F3));
我正在寻找的结果只是一个简单的 [x1+x2,y1+y2,z1+z2]
,但我得到的却是:[[x1-x2,x1-y2,x1-z2],[y1-x2,y1-y2,y1-z2],[z1-x2,z1-y2,z1-z2]]
有什么建议吗?
好吧,这很令人费解,尽管我现在明白是怎么回事了。
subst
是串行(一个接一个)替换,所以subst([F1 = ..., F2 = ...], ...)
等价于subst(F2 = ..., subst(F1 = ..., ...))
。即先代入F1
,再将F2
代入其结果
然而 subst(F1 = [x1, y1, z1], F1 - F2)
的结果是 [x1 - F2, y1 - F2, z1 - F2]
。现在您可以看到如果将 F2
代入其中会发生什么——您将得到混乱的嵌套列表结果。
我认为如果您尝试 psubst
(并行替换),您会得到预期的结果。
(%i2) forces:[
F1=[x1,y1,z1],
F2=[x2,y2,z2]
];
(%o2) [F1 = [x1, y1, z1], F2 = [x2, y2, z2]]
(%i3) equations:[F3=-F2];
(%o3) [F3 = - F2]
(%i4) subst(equations, F1 + F3);
(%o4) F1 - F2
(%i5) psubst (forces, %o4);
(%o5) [x1 - x2, y1 - y2, z1 - z2]
(%i6) psubst(forces, subst(equations, F1 + F3));
(%o6) [x1 - x2, y1 - y2, z1 - z2]
我在 wxmaxima 中有一个巨大的动态系统,我需要做一些矢量替换,但它最终得到了一些疯狂的结果。这是我需要做的:
forces:[
F1=[x1,y1,z1],
F2=[x2,y2,z2]
];
equations:[F3=-F2];
subst(forces,subst(equations,F1+F3));
我正在寻找的结果只是一个简单的 [x1+x2,y1+y2,z1+z2]
,但我得到的却是:[[x1-x2,x1-y2,x1-z2],[y1-x2,y1-y2,y1-z2],[z1-x2,z1-y2,z1-z2]]
有什么建议吗?
好吧,这很令人费解,尽管我现在明白是怎么回事了。
subst
是串行(一个接一个)替换,所以subst([F1 = ..., F2 = ...], ...)
等价于subst(F2 = ..., subst(F1 = ..., ...))
。即先代入F1
,再将F2
代入其结果
然而 subst(F1 = [x1, y1, z1], F1 - F2)
的结果是 [x1 - F2, y1 - F2, z1 - F2]
。现在您可以看到如果将 F2
代入其中会发生什么——您将得到混乱的嵌套列表结果。
我认为如果您尝试 psubst
(并行替换),您会得到预期的结果。
(%i2) forces:[
F1=[x1,y1,z1],
F2=[x2,y2,z2]
];
(%o2) [F1 = [x1, y1, z1], F2 = [x2, y2, z2]]
(%i3) equations:[F3=-F2];
(%o3) [F3 = - F2]
(%i4) subst(equations, F1 + F3);
(%o4) F1 - F2
(%i5) psubst (forces, %o4);
(%o5) [x1 - x2, y1 - y2, z1 - z2]
(%i6) psubst(forces, subst(equations, F1 + F3));
(%o6) [x1 - x2, y1 - y2, z1 - z2]