Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica mathematica中如何重载矩阵乘法的次数和加号_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica mathematica中如何重载矩阵乘法的次数和加号

Wolfram mathematica mathematica中如何重载矩阵乘法的次数和加号,wolfram-mathematica,Wolfram Mathematica,我想为mathematica中的矩阵乘法重载次和加,例如,让次为位和,加上是位或,然后进行矩阵乘法 有没有简单的方法,不用重写我自己的矩阵乘法 谢谢。问题是你想改变什么-时代的行为和加上,或点。通常,Block技巧通常是最简单的方法。在这种情况下,由于Dot不调用高级Plus或Times,因此可以执行以下操作: mat1 = {{1,2},{3,4}}; mat2= {{5,6},{7,8}}; Block[{Dot = Inner[BitAnd,#1,#2,BitOr]&}, ma

我想为mathematica中的矩阵乘法重载
,例如,让
位和
,加上是
位或
,然后进行矩阵乘法

有没有简单的方法,不用重写我自己的矩阵乘法


谢谢。

问题是你想改变什么-时代的行为和
加上
,或
。通常,
Block
技巧通常是最简单的方法。在这种情况下,由于
Dot
不调用高级
Plus
Times
,因此可以执行以下操作:

mat1 = {{1,2},{3,4}};
mat2= {{5,6},{7,8}};
Block[{Dot = Inner[BitAnd,#1,#2,BitOr]&},
  mat1.mat2]

{{3,0},{5,2}}

但请注意,这可以有效地重新实现矩阵乘法(使用
内部
)-没有其他方法,因为
是在内部实现的,并且不使用
时间

注意,重新定义内置的
时间
将破坏任何Mathematica函数,这些函数期望矩阵上的
时间
具有标准行为。一个更安全的选择是定义
MyTimes
,并使用Notation包提供自己的外观和缺点。重载的想法不是为其他数据类型提供操作符功能吗?在这种情况下,已经为矩阵定义了时间。所以,您想失去这个预定义的含义,并用BitAnd和BitOr行为覆盖它吗?为什么不直接使用后面的函数呢?或者你想使用他们的符号?有更好的解决办法。在任何情况下都不应该超载加号或加号。Leonid Shifrin的方法将是完成这项特殊任务的一个好方法。虽然更改块内的点对于一般用法来说并不是必需的,因为您可以定义myDot或类似的东西。@Daniel感谢您澄清这一点。我对过去做过几次(超载次数或更多)感到内疚(主要是在我学习mma的时候),但我总是有一种不好的感觉。