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
简化为涉及 a
和 b
以及它们之间的角度的表达式。
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 的一个弱点——它对这些东西的报道是成功的还是失败的。
或者您可能不需要定义 norm
和 angle
-- 我想这取决于您的目的。也许您可以详细说明您要解决的更大问题是什么。
此外,这个解决方案有点问题,因为只有两项产品 a . b
会匹配。对于三个术语 a . b . c
,模式匹配器认为它不适合。同样,有多种解决方法,none 其中完全令人满意。
总之,我希望这对您有所帮助。
让我们有以下代码
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
简化为涉及 a
和 b
以及它们之间的角度的表达式。
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 的一个弱点——它对这些东西的报道是成功的还是失败的。
或者您可能不需要定义 norm
和 angle
-- 我想这取决于您的目的。也许您可以详细说明您要解决的更大问题是什么。
此外,这个解决方案有点问题,因为只有两项产品 a . b
会匹配。对于三个术语 a . b . c
,模式匹配器认为它不适合。同样,有多种解决方法,none 其中完全令人满意。
总之,我希望这对您有所帮助。