重要说明:因为此挑战仅适用于平方矩阵,所以每当我使用术语“矩阵”时,都假设我是指平方矩阵。为了简洁起见,我将省略“方形”描述。
背景
通过使用相似的对角矩阵(一个不在主对角线上的元素为0的元素),可以简化许多与矩阵相关的操作,例如计算行列式,求解线性系统或将标量值函数扩展到矩阵。到原始矩阵(意味着,对于输入矩阵A
和对角线矩阵D
,存在一些可逆矩阵P
,使得D = P^(-1) * A * P
;另外,D
和A
共享一些重要性质,如本征值,决定因素,而迹线)。对于具有不同特征值的矩阵(矩阵的特征多项式的根,通过求解det(A-λI) = 0
给出λ
,其中I
是与相同维的恒等式A
),对角化很简单:D
是一个矩阵,其特征值在主对角线上,并且P
是一个由对应于这些特征值的特征向量组成的矩阵(顺序相同)。这个过程称为本征分解。
但是,具有重复特征值的矩阵不能以这种方式对角线化。幸运的是,任何矩阵的约旦范式都可以很容易地计算出来,并且比常规的对角矩阵难得多。它还具有很好的特性,如果特征值是唯一的,则Jordan分解与特征分解相同。
约旦分解解释
对于A
特征值均具有1的几何多重性的方阵,约旦分解的过程可描述如下:
- 令
λ = {λ_1, λ_2, ... λ_n}
为A
具有多重性的特征值列表,其中重复的特征值连续出现。 - 创建一个对角矩阵,
J
其元素是的元素λ
,顺序相同。 - 对于每个多重性大于1
1
的特征值,将特征值的每个重复项的右边放在a 的主对角线上J
,最后一个除外。
所得矩阵J
是的约旦范式A
(对于给定矩阵,可以有多个约旦范式,具体取决于特征值的顺序)。
一个可行的例子
设A
以下矩阵:
A
具有多重性的特征值是λ = {1, 2, 4, 4}
。通过将它们放入对角矩阵,我们得到以下结果:
接下来,将1
s 放在每个重复特征值中的一个之外的所有右边。由于4
是唯一重复的特征值,因此我们1
在前四个值旁边放置一个:
这是Jordan的正常形式A
(单个矩阵可能具有几种有效的Jordan正常形式,但是出于解释的目的,我将详细介绍该细节)。
任务
给定方阵A
作为输入,输出有效的Jordan范式A
。
- 输入和输出可以采用任何合理的格式(2D数组/列表/任何形式,列表/阵列/任何列或行向量,内置矩阵数据类型等)。
- 的元素和特征值
A
将始终是范围内的整数[-200, 200]
。 - 为了简单起见,所有的特征值将具有1的几何多重性(因此上述过程成立)。
A
最多为10x10矩阵,至少为2x2矩阵。- 不允许使用计算特征值和/或特征向量或执行特征分解,Jordan分解或任何其他类型的分解/对角化的内建函数。允许矩阵算术,矩阵求逆和其他矩阵内置函数。
测试用例
[[1, 0], [0, 1]] -> [[1, 1], [0, 1]]
[[3, 0], [0, 3]] -> [[1, 1], [0, 1]]
[[4, 2, 2], [1, 2, 2],[0, 3, 3]] -> [[6, 0, 0], [0, 3, 0], [0, 0, 0]]
[[42, 48, 40, 64, 64], [41, 47, 31, 58, 42], [-55, -47, -27, -74, -46], [-46, -58, -46, -70, -68], [30, 20, 12, 34, 18]] -> [[10, 0, 0, 0, 0], [0, -18, 0, 0, 0], [0, 0, 6, 1, 0], [0, 0, 0, 6, 1], [0, 0, 0, 0, 6]]
Last@JordanDecomposition@#&
呢 还是作弊?