在Mathematica中以明确可见的形式显示

时间:2011-03-09 22:24:25

标签: wolfram-mathematica

继续我的matrix multiplication question,我希望在mma中以显式可见形式显示以下表达式:

the form I want to show in mma

即使在我给出a11,...,b11,......明确数字的情况下,我仍然希望它以未评估的形式成为(0&& 1)||(1&& 1)。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

使用

Inner[And, Array[Subscript[a, ##] &, {2, 2}], 
  Array[Subscript[b, ##] &, {2, 2}], Or] // MatrixForm

enter image description here

修改即可。跟进了你之前的问题,我想你可能会考虑

Inner[HoldForm[And[##]] &, amat, 
  bmat, HoldForm[Or[##]] &] // MatrixForm

enter image description here

答案 1 :(得分:2)

(0&&1)||(1&&1)没有评估,所以我没有看到问题。对于TrueFalse您是否尝试过使用HoldForm?

答案 2 :(得分:2)

我不认为这是一个非常好的主意(重载内部功能和所有内容;而且&&&&而不是BitAnd,你想在之前的问题中使用它),但你问了它,你得到了它:

CircleTimes[a_?MatrixQ, b_?MatrixQ] := 
 Inner[HoldForm[BitAnd[##]] &, a, b, HoldForm[BitOr[##]] &]

Unprotect[BitAnd];
Unprotect[BitOr];
BitAnd /: Format[BitAnd[a_, b_]] := a && b;
BitOr /: Format[BitOr[a_, b_]] := a || b;
Protect[BitAnd];
Protect[BitOr]

mat1 = Array[Subscript[a, #1, #2] &, {2, 2}];
mat2 = Array[Subscript[b, #1, #2] &, {2, 2}];

output of newly defined CircleTimes

将操作定义为CircleTimes的优点是您可以免费获得CircleTimes符号和运算符。

答案 3 :(得分:2)

实现此目的的一种方法是定义自己的矩阵包装器。包装器方法的优点是可以在不影响任何其他功能的情况下重载任意数量的内置函数。

让我们首先定义一个名为myMatrix的包装器,它使用MatrixForm显示自己:

Format[myMatrix[m_]] ^:= MatrixForm[m]

接下来,我们会在Times作用于myMatrix时重载myMatrix[m1_] myMatrix[m2_] ^:= myMatrix[Inner[And, m1, m2, Or]] 运算符:

^:=

请注意,这两个定义都使用myMatrix将规则作为up-values附加到m1 = myMatrix[Array[Subscript[a, Row[{##}]]&, {2, 2}]] 。这对于确保常规内置定义不受影响至关重要。

有了这些定义,我们现在可以实现预期目标。为了演示,让我们定义两个矩阵:

m2 = myMatrix[Array[Subscript[b, Row[{##}]]&, {2, 2}]]

mathematica output

Row[{m1, m2}] == m1 m2

mathematica output

现在可以生成所请求的“明确可见的表单”:

Times

mathematica output

...或者,如果您希望在等式的左侧明确引用With[{m1 = m1, m2 = m2}, HoldForm[m1 m2] == m1 m2]

Evaluate[First /@ {m1, m2}] = RandomInteger[1, {2, 2, 2}];

mathematica output

接下来,我们将为每个矩阵元素分配随机布尔值:

With[{m1 = m1, m2 = m2}, HoldForm[m1 m2] == m1 m2]

...然后再次使用分配生成明确可见的表单:

{{1}}

mathematica output