Почему мои собственные значения A * Atranspose и Atranspose * A не совпадают? - PullRequest
1 голос
/ 10 февраля 2020
  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, это работает нормально. Что я делаю неправильно?

1 Ответ

0 голосов
/ 10 февраля 2020

Причина, по которой это не дает вам одинаковые значения, заключается в том, что A - это матрица 8 на 9. Это означает, что np.dot(A,A_Trans) дает вам матрицу 8 на 8, а np.dot(A_Trans,A) дает матрицу 9 на 9 (это из-за правил умножения матриц).

Невозможно, чтобы матрица 8x8 имела те же собственные значения, что и матрица 9x9, поскольку у одного будет 8 собственных значений, а у другого - 9. Это даже отражается в вашем обновлении, где один список имеет 8 значений, а другое имеет 9.

...