gpt4 book ai didi

wolfram-mathematica - Mathematica 中的特殊运算符定义

转载 作者:行者123 更新时间:2023-12-01 22:36:48 24 4
gpt4 key购买 nike

如何在 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]]];

但是它不起作用。我做错了什么?

最佳答案

因此,您正在尝试创建一个具有中缀操作的运算符。如果将其与内置中缀运算符 +***\[CircleTimes] 进行比较等等...您会发现它们都被解释为 FullForm:PlusTimesNonCommutativeMultiply >、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]]];

请注意,我添加了最后一行作为 A 和 B 都不是矩阵或向量时的包罗万象的内容。

然后创建中缀表示法部分。困难的方法是进行一些 MakeExpressionMakeBoxes 定义。最简单的方法是使用NotationPackage

Needs["Notation`"]
InfixNotation[ParsedBoxWrapper["\[FilledSmallCircle]"], BigDot]

关于wolfram-mathematica - Mathematica 中的特殊运算符定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com