wxmaxima 0.8.4:定义向量而不定义其分量

wxmaxima 0.8.4: defining a vector without defining its component

让我们有以下代码

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

第三行给出了输出

a1a2 + b1b2 +c1c2

我想要这样的东西(|e|e 的标准):

|e1||e2|

有没有办法 wxMaxima 给出点积函数的简化答案?

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

不要调用 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)

也许这么多有帮助,你可以说是不是。它不是很好,因为您必须自己定义 norm 以及 angle(a, b)。这是 Maxima 的一个弱点——它对这些东西的报道是成功的还是失败的。

或者您可能不需要定义 normangle -- 我想这取决于您的目的。也许您可以详细说明您要解决的更大问题是什么。

此外,这个解决方案有点问题,因为只有两项产品 a . b 会匹配。对于三个术语 a . b . c,模式匹配器认为它不适合。同样,有多种解决方法,none 其中完全令人满意。

总之,我希望这对您有所帮助。