对角矩阵的极分解是否可交换?

0 投票
1 回答
36 浏览
提问于 2025-04-12 03:00

我在理解极分解的时候犯了个错误。我原以为极分解是 PU,其实应该是 UP。在试图弄清楚我哪里出错时,我发现我给的输入在某种情况下是可以互换的,这让我没意识到这个大错误。如果有人能解释一下这个问题,那就太好了,我想知道对于所有对角矩阵来说,它是否都是可以互换的?有没有极分解的公式是 PU 的?非常感谢大家的帮助。

import numpy as np
from scipy.linalg import polar
A= np.array([[-2, 1, 0, 0],
              [1, -2, 1, 0],
              [0, 1, -2, 1],
              [0, 0, 1, -2]])
U, P = polar(A)
print(U)
print(P)
A1 = U @ P
print(A1)
A2 = P @ U
print(A2)
are_equal = np.allclose(A1, A2)
print("Are matrix equal:", are_equal)

1 个回答

1

你发的这个矩阵是对称的,而且是实数值的。简单来说,就是这个矩阵和它的转置矩阵是一样的(A = A.T),而且里面没有复杂的数字。这一点很重要,因为所有对称且实数的矩阵都是一种叫做“正常矩阵”的东西。你可以在这里了解更多信息:正常矩阵。如果这个矩阵是正常的,那么它的极分解就会满足一个特定的关系:P @ U = U @ P。更多详情可以参考这里:来源

任何方形的对角矩阵也是对称的。不过,严格来说,你发的这个矩阵并不是对角矩阵,因为它的主对角线之外还有其他元素。这个矩阵实际上是一个叫做“三对角矩阵”的东西。三对角矩阵不一定是对称的。不过,如果你的三对角矩阵是对称且实数的,那么它的极分解就是可交换的。

除了用数学方法证明这个观点,你还可以通过实验来验证。下面的代码会生成成千上万的矩阵及其极分解,并检查它们是否是可交换的。

import numpy as np
from scipy.linalg import polar

N = 4
iterations = 10000
for i in range(iterations):
    A = np.random.randn(N, N)
    # A = A + A.T
    U, P = polar(A)
    are_equal = np.allclose(U @ P, P @ U)
    if not are_equal:
        print("Matrix A does not have commutative polar decomposition!")
        print("Value of A:")
        print(A)
        break
    if (i + 1) % (iterations // 10) == 0:
        print(f"Checked {i + 1} matrices, all had commutative polar decompositions")

如果你运行这个代码,它会立刻找到一个反例,因为这个矩阵不是对称的。不过,如果你取消注释A = A + A.T这行代码,这样就强制让随机矩阵变成对称的,那么所有的矩阵都会有效。

最后,如果你需要左侧的极分解,可以使用polar(A, side='left')来实现。具体的操作方法可以查看这个文档:文档

撰写回答