给定 A = S*D*S.T(D 是对角矩阵,S/S.T 是任意 nxn 矩阵)A 的特征值不应该对应于 D 的对角元素吗?
Given A = S*D*S.T (D is a diagonal matrix , S/S.T an arbitrary nxn matrix) Shouldn't the eigenvalues of A correspond to the diagonal entries of D?
我被要求编写一个生成随机对称正定二维矩阵的函数。
这是我的尝试:
import numpy as np
from numpy import linalg as la
def random_spd(n):
"""Generates random 2D SPD matrix (symmetric positive definite)"""
while True:
S = np.random.rand(n,n)
if la.matrix_rank(S)==n: #Make sure that S has full rank.
break
D = np.diag(np.random.randint(0,10,size=n))
print(f"S:\n{S}\n\nD:\n{D}\n") #Only for debugging
return S@D@S.T
A = random_spd(2)
print(f"A:\n{A}\n")
ei_vals, ei_vecs = la.eig(A)
print(f"Eigenvalues:\n{ei_vals}\n\nEigenvectors:\n{ei_vecs}")
输出:
D:
[[6 0]
[0 5]]
A:
[[1.97478191 1.71620628]
[1.71620628 2.37372465]]
Eigenvalues:
[0.4464938 3.90201276]
Eigenvectors:
[[-0.74681018 -0.66503726]
[ 0.66503726 -0.74681018]]
据我所知,该功能有效。
现在,如果我尝试计算随机生成矩阵的特征值,它们不应该与
矩阵 D 的对角线元素?
有人可以帮助我理解我的误解或错误吗?
非常感谢你!
最好的问候,麦克斯:)
您正在应用的是同余变换,它保留确定性。
正定矩阵 P
是任何(非空)向量 x
形状 (N, 1)
, x.T @ P @ x
.
现在如果你替换 x = S @ y
,在上面的条件下你会得到 y.T @ S.T @ P @ S @ y
,比较两者你会得出结论 S.T @ P @ S
也是正定的(如果 [=18 是半定正的) =] 不是全职)。
同样,特征值由方程
定义
A @ v = lambda * v
如果你替换 v = S u
你得到的等式是
A @ S @ u = lambda * S @ u
要将此等式置于与特征值等式相同的形式,左乘 inv(S)
的等式
(inv(S) @ A @ S) @ u = lambda * u
我们说这样得到的矩阵inv(S) @ A @ S
是similar到A
,我们称之为相似变换
创建正定矩阵有更简单的方法。一种简单的方法
S = np.random.rand(n,n)
A = S.T @ S + eps * np.eye(n)
S.T@S可以看作是单位矩阵的同余变换,因此半正定,加上eps * eye(n)
会保证所有特征值都大于eps
。没有矩阵求逆,没有特征分解。
我被要求编写一个生成随机对称正定二维矩阵的函数。 这是我的尝试:
import numpy as np
from numpy import linalg as la
def random_spd(n):
"""Generates random 2D SPD matrix (symmetric positive definite)"""
while True:
S = np.random.rand(n,n)
if la.matrix_rank(S)==n: #Make sure that S has full rank.
break
D = np.diag(np.random.randint(0,10,size=n))
print(f"S:\n{S}\n\nD:\n{D}\n") #Only for debugging
return S@D@S.T
A = random_spd(2)
print(f"A:\n{A}\n")
ei_vals, ei_vecs = la.eig(A)
print(f"Eigenvalues:\n{ei_vals}\n\nEigenvectors:\n{ei_vecs}")
输出:
D:
[[6 0]
[0 5]]
A:
[[1.97478191 1.71620628]
[1.71620628 2.37372465]]
Eigenvalues:
[0.4464938 3.90201276]
Eigenvectors:
[[-0.74681018 -0.66503726]
[ 0.66503726 -0.74681018]]
据我所知,该功能有效。 现在,如果我尝试计算随机生成矩阵的特征值,它们不应该与 矩阵 D 的对角线元素? 有人可以帮助我理解我的误解或错误吗? 非常感谢你! 最好的问候,麦克斯:)
您正在应用的是同余变换,它保留确定性。
正定矩阵 P
是任何(非空)向量 x
形状 (N, 1)
, x.T @ P @ x
.
现在如果你替换 x = S @ y
,在上面的条件下你会得到 y.T @ S.T @ P @ S @ y
,比较两者你会得出结论 S.T @ P @ S
也是正定的(如果 [=18 是半定正的) =] 不是全职)。
同样,特征值由方程
定义A @ v = lambda * v
如果你替换 v = S u
你得到的等式是
A @ S @ u = lambda * S @ u
要将此等式置于与特征值等式相同的形式,左乘 inv(S)
(inv(S) @ A @ S) @ u = lambda * u
我们说这样得到的矩阵inv(S) @ A @ S
是similar到A
,我们称之为相似变换
创建正定矩阵有更简单的方法。一种简单的方法
S = np.random.rand(n,n)
A = S.T @ S + eps * np.eye(n)
S.T@S可以看作是单位矩阵的同余变换,因此半正定,加上eps * eye(n)
会保证所有特征值都大于eps
。没有矩阵求逆,没有特征分解。