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/

10-09 12:43