Иногда собственные векторы, вычисленные в python и mathematica, имеют противоположные знаки, кто-нибудь знает почему? - PullRequest
5 голосов
/ 20 июня 2019

Я пытаюсь вычислить собственные векторы многих матриц 3x3, используя python.Мой код на python основан на коде из Mathematica, который использует функцию Eigenvector [].Я попытался использовать функцию eig () от numpy и scipy, и в большинстве случаев собственные векторы, вычисленные в mathematica и python, идентичны.Однако есть несколько случаев, когда собственные векторы, вычисленные в python, противоположны по знаку тем, которые вычисляются в mathematica.

Я уже пытался использовать numpy и scipy для вычисления собственных векторов, которые приводят к одной и той же проблеме.

Код Python

    _, evec = eig(COVMATRIX)

Код Mathematica

    evec = Eigenvectors[COVMATRIX]

Обратите внимание, что в Mathematica собственные векторы расположены вдоль строк, тогда как в Python собственные векторы расположены вдоль столбцов в матрице.,

Учитывая

    COVMATRIX = [[2.9296875e-07, 0.0, 2.09676562e-10], 
                 [0.0, 2.9296875e-07, 1.5842226562e-09], 
                 [2.09676562e-10, 1.58422265e-09, 5.85710e-11]]

Собственные векторы от Python:

    [[-7.15807155e-04,  9.91354763e-01, -1.31206788e-01],
     [-5.40831983e-03, -1.31208740e-01, -9.91340011e-01],
     [9.99985119e-01,  2.21572611e-13, -5.45548378e-03]]

Собственные векторы от Mathematica:

    {{-0.131207, -0.99134, -0.00545548}, 
     {0.991355, -0.131209, 2.6987*10^-13}, 
     {-0.000715807, -0.00540832, 0.999985}}

В этом случае собственные векторыто же самое между mathematica и python, но ...

Учитывая

    COVMATRIX = [[2.9296875e-07, 0.0, 6.3368875e-10],
                 [0.0, 2.9296875e-07, 1.113615625e-09],
                 [6.3368875e-10, 1.113615625e-09, 5.0957159954e-11]]

Собственные векторы от Python

    [[ 2.16330513e-03,  8.69137041e-01,  4.94566602e-01],  
     [ 3.80169349e-03, -4.94571334e-01,  8.69128726e-01], 
     [-9.99990434e-01,  1.11146084e-12,  4.37410133e-03]]

Но собственные векторы от Python противоположны по знакуСобственные векторы в Mathematica, которые ниже

    {{-0.494567, -0.869129, -0.0043741},  
     {0.869137, -0.494571, 1.08198*10^-12}, 
     {-0.00216331, -0.00380169, 0.99999}}

Ответы [ 2 ]

5 голосов
/ 20 июня 2019

Если v - собственный вектор, то по определению: Av = лямбда * v

Таким образом, если v является собственным вектором, то -v также является собственным вектором, поскольку: A * (-v) = - A * v = -lambda * v = лямбда * (-v)

Так что оба подхода верны. Цель собственных векторов - найти неколинейные векторы (это полезно, если вы хотите диагонализировать вашу матрицу). Так что не имеет значения, дают ли они вам вектор или противоположный вектор.

2 голосов
/ 20 июня 2019

На самом деле они представляют собой только разные базисы одного и того же векторного пространства, состоящего из всех собственных векторов. Возможно, причина появления другой базы состоит в том, что алгоритм python отличается от алгоритма mathematica.

...