Phi*_*hil 4 wolfram-mathematica definition operators
如何在Mathematica中定义一个特殊的运算符,例如一种特殊类型的加法或乘法运算符?我过去做过,但我不记得我把代码放在哪里了.我尝试在两个矩阵上定义这个填充的小圆运算符:
A_\[FilledSmallCircle] B_ :=
Which[(MatrixQ[A] || VectorQ[A]) && (MatrixQ[B] || VectorQ[B]),
A.B, ! (MatrixQ[A] || VectorQ[A]) && (MatrixQ[B] || VectorQ[B]),
A@B, (MatrixQ[A] || VectorQ[A]) && ! (MatrixQ[B] || VectorQ[B]),
Transpose[B@Transpose[A]]];
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我究竟做错了什么?
因此,您尝试使用中缀操作创建运算符.如果你把它比作内置缀操作符+
,*
,**
,\[CircleTimes]
,等...你""看到他们都解释到他们FullForm
:Plus
,Times
,NonCommutativeMultiply
,CircleTimes
分别.
您应该尝试创建类似的东西.所以从一开始
BigDot[A_, B_] := Which[
(MatrixQ[A] || VectorQ[A]) && (MatrixQ[B] || VectorQ[B]), A.B,
!(MatrixQ[A] || VectorQ[A]) && (MatrixQ[B] || VectorQ[B]), A@B,
(MatrixQ[A] || VectorQ[A]) && !(MatrixQ[B] || VectorQ[B]), Transpose[B@Transpose[A]],
True, HoldForm[BigDot[A, B]]];
Run Code Online (Sandbox Code Playgroud)
请注意,当A和B都不是矩阵或向量时,我将最后一行添加为全能.
然后创建中缀符号部分.艰难的方法是制定一些MakeExpression
和MakeBoxes
定义.简单的方法是使用NotationPackage
Needs["Notation`"]
InfixNotation[ParsedBoxWrapper["\[FilledSmallCircle]"], BigDot]
Run Code Online (Sandbox Code Playgroud)