2024-04-26 04:51:23 发布
网友
让
import numpy as np M = np.array([[ 1., -0.5301332 , 0.80512845], [ 0., 0., 0.], [ 0., 0., 0.]])
M是秩1,它唯一的非零特征值是1(它的轨迹)。但是np.linalg.norm(M, ord=2)返回严格大于1的1.39。为什么?
M
np.linalg.norm(M, ord=2)
由np.linalg.eigvals返回的M的特征值是1,0,0,但是M的奇异值是1.39,0,0,这让我感到惊讶。我错过了什么
np.linalg.eigvals
在这种特殊情况下M的2-范数与公式(np.sum(np.abs(M**2)))**(1/2)给出的Frobenius范数一致,因此我们可以看到:
(np.sum(np.abs(M**2)))**(1/2)
import numpy as np M = np.array([[ 1., -0.5301332 , 0.80512845], [ 0., 0., 0.], [ 0., 0., 0.]]) np.sqrt(np.sum(np.abs(M**2))) 1.388982732341062 np.sqrt(np.sum(np.abs(M**2))) == np.linalg.norm(M,ord=2) == np.linalg.norm(M, ord='fro') True
特别地,我们可以证明2-范数是M.T@M的最大特征值的平方根,即
M.T@M
np.sqrt(np.linalg.eigvals(M.T@M)[0]) 1.388982732341062
这就是它和矩阵特征值的关系。现在回想一下,奇异值是M的特征值的平方根。T@M我们打开了迷雾
使用Frobenius范数的一个特征(M的迹和的平方根)。T@M):
np.sqrt(np.sum(np.diag(M.T@M))) 1.388982732341062
面对结果:
np.sqrt(np.linalg.eigvals(M.T@M)[0]) == np.sqrt(np.sum(np.diag(M.T@M))) == np.linalg.svd(M)[1][0] True
矩阵的第二范数所有元素之和的平方根
norm(M, ord=2) = (1.**2 + 0.5301332**2 + 0.80512845**2)**0.5 = 1.39
要得到本征值和奇异值之间的关系,需要计算M^H.M的本征值及其平方根
eigV = np.linalg.eigvals(M.T.dot(M)) array([1.92927303, 0. , 0. ]) eigV**0.5 array([1.38898273, 0. , 0. ])
这是完全正常的。在一般情况下,奇异值不等于特征值。这仅适用于正厄米矩阵
对于平方矩阵,有以下关系:
M = np.matrix([[ 1., -0.5301332 , 0.80512845], [ 0., 0., 0.], [ 0., 0., 0.]]) u, v= np.linalg.eig(M.H @ M) # M.H @ M is Hermitian print(np.sqrt(u)) # [1.38898273 0. 0. ] u,s,v = lin.svd(M) print(s) # [1.38898273 0. 0. ]
在这种特殊情况下
M
的2-范数与公式(np.sum(np.abs(M**2)))**(1/2)
给出的Frobenius范数一致,因此我们可以看到:特别地,我们可以证明2-范数是
M.T@M
的最大特征值的平方根,即这就是它和矩阵特征值的关系。现在回想一下,奇异值是M的特征值的平方根。T@M我们打开了迷雾
使用Frobenius范数的一个特征(M的迹和的平方根)。T@M):
面对结果:
矩阵的第二范数所有元素之和的平方根
要得到本征值和奇异值之间的关系,需要计算M^H.M的本征值及其平方根
这是完全正常的。在一般情况下,奇异值不等于特征值。这仅适用于正厄米矩阵
对于平方矩阵,有以下关系:
相关问题 更多 >
编程相关推荐