2011-03-09 66 views
2

明确可见的形式与我matrix multiplication question继续,我想表明在MMA中明确可见形式,下面的表达式:显示在数学

the form I want to show in mma

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

回答

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符号和运营商的优势。

2

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

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

2

的一种方式实现这一目标是定义自己的矩阵包装。包装方法的优点是,您可以根据需要重载尽可能多的内置函数,而不会影响任何其他功能。

让我们定义使用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}]] 

mathematica output

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

mathematica output

的要求 “明确可见形式,” 现在可以由此产生:

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

mathematica output

...或者,如果你喜欢引用Times明确对等式的左边:

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

mathematica output

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

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

...然后在地方的分配再次产生明确可见形式:

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

mathematica output