import numpy as np
import matplotlib.pyplot as plt
import scipy.linalg as la
A = np.array([[-5,-5,-1,0,0,0,500,500,100],
[0,0,0,-5,-5,-1,500,500,100],
[-150,-5,-1,0,0,0,30000,1000,80],
[0,0,0,-150,-5,-1,12000,400,80],
[-150,-150,-1,0,0,0,33000,33000,220],
[0,0,0,-150,-150,-1,12000,12000,80],
[-5,-150,-1,0,0,0,500,15000,100],
[0,0,0,-5,-150,-1,1000,30000,200]])
print("Matrix A is :\n", A)
A_Trans=np.transpose(A)
print("Transpose is:\n",A_Trans)
prod1=np.dot(A,A_Trans)
print(prod1)
u,v = la.eigh(prod1)
print("Eigen values of AAT are \n",np.abs(u))
print("Corresponding eigenvectors of AAT in the columns: \n",np.abs(v))
prod2=np.dot(A_Trans,A)
print(prod2)
w,x = la.eigh(prod2)
print("Eigen values of ATA are \n",np.abs(w))
print("Corresponding eigenvectors of ATA in the columns: \n",np.abs(x))
这是我得到的输出。为了保持职位整洁,我省略了一些输出。
Eigen values of AAT are
[2.85018004e+09 4.52373040e+00 2.19731826e+03 1.84822781e+04
2.46139762e+04 4.52427374e+04 1.01150754e+09 2.18234247e+09]
Eigen values of ATA are
[3.28219743e+09 6.70266037e+08 2.95889936e-01 1.23330275e+00
9.79916827e+03 2.20387805e+04 3.06750605e+04 7.13857850e+04
1.12278371e+06]
我考虑过使用svd函数,但我想自己尝试一下。但是,它在MATLAB中工作得很好,但在python中却不能。另外,当我输入较小的矩阵(如2X2)时,效果很好。我究竟做错了什么?
最佳答案
不能提供所有相同值的原因是A
是一个8 x 9的矩阵。这意味着np.dot(A,A_Trans)
为您提供8 x 8的矩阵,而np.dot(A_Trans,A)
为您提供9 x 9的矩阵(这是由于矩阵乘法规则)。
8x8矩阵无法与9x9矩阵具有相同的特征值,因为一个矩阵将具有8个特征值,而另一个将具有9个。这甚至反映在更新中,其中一个列表具有8个值,而另一个具有9个值。 9。
关于python - 为什么我的A * Atranspose和Atranspose * A的特征值不匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60142363/