Vector wxmaxima 0.8.4:定义向量而不定义其分量
让我们看看下面的代码Vector wxmaxima 0.8.4:定义向量而不定义其分量,vector,maxima,dot-product,Vector,Maxima,Dot Product,让我们看看下面的代码 e1 : matrix([a1],[b1],[c1]); e2 : matrix([a2],[b2],[c2]); dotproduct(e1,e2); 第三行给出了输出 a1a2 + b1b2 +c1c2 我想换成这样(e是e的标准): 有没有一种方法可以为dotproduct函数提供一个简化的答案?这里有一个解决方案,尽管这并不完全令人满意 不要调用dotproduct,只需将dotproducts编写为a即可。b。(运算符在极大值中表示非对易乘法。)您可以定义简化
e1 : matrix([a1],[b1],[c1]);
e2 : matrix([a2],[b2],[c2]);
dotproduct(e1,e2);
第三行给出了输出
a1a2 + b1b2 +c1c2
我想换成这样(e
是e
的标准):
有没有一种方法可以为dotproduct函数提供一个简化的答案?这里有一个解决方案,尽管这并不完全令人满意 不要调用
dotproduct
,只需将dotproducts编写为a即可。b
。(
运算符在极大值中表示非对易乘法。)您可以定义简化规则,以便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
,还要定义角度(a,b)
。这是Maxima的一个弱点——它对这些东西的报道是命中或未命中的
或者你不需要定义norm
和angle
——我想这取决于你的目的。也许你可以说更多关于你试图解决的更大的问题是什么
另外,这个解决方案有点问题,因为只有两个术语的产品a。b
将匹配。有三个术语,a。Bc
,模式匹配者认为它不合适。围绕这一点有各种各样的方法,同样,没有一种方法是完全令人满意的
尽管如此,我希望这对您有所帮助。这里有一个解决方案,尽管这并不完全令人满意 不要调用
dotproduct
,只需将dotproducts编写为a即可。b
。(
运算符在极大值中表示非对易乘法。)您可以定义简化规则,以便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
,还要定义角度(a,b)
。这是Maxima的一个弱点——它对这些东西的报道是命中或未命中的
或者你不需要定义norm
和angle
——我想这取决于你的目的。也许你可以说更多关于你试图解决的更大的问题是什么
另外,这个解决方案有点问题,因为只有两个术语的产品a。b
将匹配。有三个术语,a。Bc
,模式匹配者认为它不合适。围绕这一点有各种各样的方法,同样,没有一种方法是完全令人满意的
尽管如此,我希望这对您有所帮助。我不需要同时定义范数和角度,而且我只有两项乘积,因此您的答案非常适合我的需要。只有一个问题:这个解决方案是否涵盖分布:如果我写(a+b).c,maxima会给出a.c+b.c吗?
(a+b)的简化。c
由全局标志dotdistrib
控制。默认值为false
。当dotdistrib
为true
时,(a+b).c
简化为a.c+b.c
。由于上述规则是由tellsimpafter
定义的,因此在任何内置简化后都会应用该规则。因此,您将把规则应用于a+b
和c
,或者a
和c
和b
和c
,这取决于dotdistrib
的值。我不需要同时定义范数和角度,而且我只有两个术语的乘积,所以您的答案非常适合我的需要。只有一个问题:这个解决方案是否涵盖分布:如果我写(a+b).c,maxima会给出a.c+b.c吗?(a+b)的简化。c
由全局标志dotdistrib
控制。默认值为false
。当dotdistrib
为true
时,(a+b).c
简化为a.c+b.c
。由于上述规则是由tellsimpafter
定义的,因此在任何内置简化后都会应用该规则。因此,您将把规则应用于a+b
和c
,或a
和c
和b
和c
,具体取决于dotdistrib
的值。