明确可见的形式与我matrix multiplication question继续,我想表明在MMA中明确可见形式,下面的表达式:显示在数学
即使在情况下,我给A11,... ,b11,...明确的数字,我仍然希望它是(0 & & 1)||(1 & & 1)以未评估的形式。任何人都可以帮忙吗?
明确可见的形式与我matrix multiplication question继续,我想表明在MMA中明确可见形式,下面的表达式:显示在数学
即使在情况下,我给A11,... ,b11,...明确的数字,我仍然希望它是(0 & & 1)||(1 & & 1)以未评估的形式。任何人都可以帮忙吗?
我不认为这是一个好主意(超载内部函数和所有;而&是,而不是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}];
定义操作CircleTimes是,你可以免费获得该CircleTimes符号和运营商的优势。
(0&&1)||(1&&1)
不评价,所以我没有看到问题。对于True
和False
您是否尝试过使用HoldForm?
使用
Inner[And, Array[Subscript[a, ##] &, {2, 2}],
Array[Subscript[b, ##] &, {2, 2}], Or] // MatrixForm
编辑。有跟进您以前的问题,我想你可能会考虑
Inner[HoldForm[And[##]] &, amat,
bmat, HoldForm[Or[##]] &] // MatrixForm
的一种方式实现这一目标是定义自己的矩阵包装。包装方法的优点是,您可以根据需要重载尽可能多的内置函数,而不会影响任何其他功能。
让我们定义使用MatrixForm
称为myMatrix
显示本身的包装开始:
myMatrix[m1_] myMatrix[m2_] ^:= myMatrix[Inner[And, m1, m2, Or]]
注意两个:
Format[myMatrix[m_]] ^:= MatrixForm[m]
接下来,我们会当它作用于myMatrix
超载Times
操作定义使用^:=
将规则附加到myMatrix
作为上限值。这对于确保常规内置定义不受影响至关重要。
有了这些定义,我们现在可以达到预期的目标。为了演示,让我们定义两个矩阵:
m1 = myMatrix[Array[Subscript[a, Row[{##}]]&, {2, 2}]]
m2 = myMatrix[Array[Subscript[b, Row[{##}]]&, {2, 2}]]
的要求 “明确可见形式,” 现在可以由此产生:
Row[{m1, m2}] == m1 m2
...或者,如果你喜欢引用Times
明确对等式的左边:
With[{m1 = m1, m2 = m2}, HoldForm[m1 m2] == m1 m2]
接下来,我们将随机分配布尔值,以每矩阵元素:
Evaluate[First /@ {m1, m2}] = RandomInteger[1, {2, 2, 2}];
...然后在地方的分配再次产生明确可见形式:
With[{m1 = m1, m2 = m2}, HoldForm[m1 m2] == m1 m2]