小编Can*_*ath的帖子

重新定义Mathematica中的非交换乘法

Mathematicas NonCommutativeMultiply(**)不简化术语

a**0=0**a=0  
a**1=1**a=a  
Run Code Online (Sandbox Code Playgroud)

要么

a**a=a^2.  
Run Code Online (Sandbox Code Playgroud)

我想重新定义**这样做.我正在使用NCAlgebra来做这个,但我需要ReplaceRepeated(//.)和NCAlgebra,正如他们的文档所说,在mathematica中特别打破了这个功能.

有些人可以告诉我如何清除属性**并重新定义这个乘法做正常做的事情加上处理1和0.我真的不需要乘法来处理a**a,但如果它足够简单会很好.我需要**处理的主要问题是1和0.

wolfram-mathematica

7
推荐指数
1
解决办法
2484
查看次数

Mathematica 表达式开头的非交换乘法和负系数

在这篇文章中一些非常友善的 stackoverflow 贡献者的帮助下,我NonCommutativeMultiply (**)在 Mathematica 中 得到了以下新定义:

Unprotect[NonCommutativeMultiply];
ClearAll[NonCommutativeMultiply]
NonCommutativeMultiply[] := 1
NonCommutativeMultiply[___, 0, ___] := 0
NonCommutativeMultiply[a___, 1, b___] := a ** b
NonCommutativeMultiply[a___, i_Integer, b___] := i*a ** b
NonCommutativeMultiply[a_] := a
c___ ** Subscript[a_, i_] ** Subscript[b_, j_] ** d___ /; i > j :=
c ** Subscript[b, j] ** Subscript[a, i] ** d
SetAttributes[NonCommutativeMultiply, {OneIdentity, Flat}]
Protect[NonCommutativeMultiply];

这种乘法很棒,但是,它不处理表达式开头的负值,即
a**b**c + (-q)**c**a
应该简化为
a**b**c - q**c**a
,但不会。

在我的乘法中,变量q(以及任何整数定标器)是可交换的;我仍在尝试编写一个SetCommutative函数,但没有成功。我并不迫切需要SetCommutative,这会很好。 …

wolfram-mathematica

4
推荐指数
1
解决办法
691
查看次数

标签 统计

wolfram-mathematica ×2