wxmaxima 0.8.4:定义向量而不定义其组件

时间:2017-09-19 08:29:13

标签: vector maxima dot-product

我们有以下代码

e1 : matrix([a1],[b1],[c1]);
e2 : matrix([a2],[b2],[c2]);
dotproduct(e1,e2);

第3行给出输出

a1a2 + b1b2 +c1c2

我希望有类似的东西(|e|e的标准):

|e1||e2|

wxMaxima是否有办法为dotproduct函数提供简化的答案?

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,虽然这并不完全令人满意。

不要只调用dotproduct,而只需将点积写为a . b。 (.运算符表示Maxima中的非交换乘法。)您可以定义简化规则,以便a . b简化为涉及ab的表达式以及它们之间的角度。

matchdeclare ([aa, bb], nonscalarp);
tellsimpafter (aa . bb, norm(aa)*norm(bb)*cos(angle(aa, bb)));

有了这个,我得到:

(%i12) declare ([e1, e2], nonscalar);
(%o12) done
(%i13) e1.e2;
(%o13) norm(e1)*cos(angle(e1,e2))*norm(e2)

也许这很有帮助,你可以说它是否有用。它不是那么好,因为您必须自己定义normangle(a, b)。这是千里马的一个弱点 - 它对这些东西的报道很受欢迎。

或者您可能不需要定义normangle - 我想这取决于您的目的。也许你可以说更多关于你试图解决的更大问题。

此外,此解决方案有点问题,因为只有两个术语的产品a . b才匹配。使用三个术语a . b . c,模式匹配器认为它不合适。有各种各样的方法,再一次,没有一个完全令人满意。

同样,我希望这对你有用。