我花费大量时间查看较大的矩阵(10x10、20x20等),它们通常具有某些结构,但随着它们变得越来越大,很难快速确定它们的结构。理想情况下,我希望Mathematica自动生成一些表示矩阵的方式,以突出其结构。例如,
(A = {{1, 2 + 3 I}, {2 - 3 I, 4}}) // StructureForm
将会给予
{{a, b}, {Conjugate[b], c}}
或者甚至
{{a, b + c I}, {b - c I, d}}
是可以接受的。一个有些天真的实现
StructureForm[M_?MatrixQ] :=
MatrixForm @ Module[
{pos, chars},
pos = Reap[
Map[Sow[Position[M, #1], #1] &, M, {2}], _,
Union[Flatten[#2, 1]] &
][[2]]; (* establishes equality relationship *)
chars = CharacterRange["a", "z"][[;; Length @ pos ]];
SparseArray[Flatten[Thread /@ Thread[pos -> chars] ], Dimensions[M]]
]
仅适用于实数矩阵,例如。
StructureForm @ {{1, 2}, {2, 3}} == {{a, b}, {b, c}}
显然,我需要定义我认为可能存在的关系(等式、否定、共轭、负共轭等),但我不确定如何建立这些关系,至少不能太复杂。一旦我有了这些关系,下一个问题是如何确定哪个是最简单的?有什么想法吗?
其中一个可能性是针对每对元素生成一个三元组,关联它们的位置,例如对于上面的A,生成
{{1,2}, 共轭, {2,1}}
,然后可以使用图算法。编辑:顺便提一下,我的灵感来自Stewart的矩阵算法系列 (1, 2)。
HermitianMatrixQ
和SymmetricMatrixQ
都很好,可以用来显示只有这些类型对称性的矩阵。不幸的是,通常情况下,我处理的矩阵除了具有厄米对称性外,还具有更复杂的对称性,我希望有一个工具可以显示这样的结构。绝对不是一个简单的请求。 - rcollyerMatrixPlot
和ArrayPlot
有时很有用,但它们无法显示符号矩阵的结构,而且很难使用它们来确定厄米性。理想情况下,我希望执行一个测试来更清楚地显示结构,而当前的工具需要多次测试。 - rcollyer