特殊运算符在Mathematica中的定义

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)

但它不起作用.我究竟做错了什么?

Sim*_*mon 5

因此,您尝试使用中缀操作创建运算符.如果你把它比作内置缀操作符+,*,**,\[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都不是矩阵或向量时,我将最后一行添加为全能.

然后创建中缀符号部分.艰难的方法是制定一些MakeExpressionMakeBoxes定义.简单的方法是使用NotationPackage

Needs["Notation`"]
InfixNotation[ParsedBoxWrapper["\[FilledSmallCircle]"], BigDot]
Run Code Online (Sandbox Code Playgroud)