Matlab VS Python - eig (A, B) VS sc.linalg.eig (A, B)

У меня есть следующие матрицы сигма и сигмад:

сигма:

    1.9958   0.7250
    0.7250   1.3167

сигмад:

    4.8889   1.1944
    1.1944   4.2361

Если я попытаюсь решить обобщенную проблему собственных значений в python, я получу:

    d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma))

V:

    -1     -0.5614
    -0.4352    1

Если я попытаюсь решить проблему с g. е. проблема в Matlab я получаю:

    [V,d]=eig(sigmad,sigma)

V:

    -0.5897    -0.5278
    -0.2564    0.9400

Но точки совпадают.


person JEquihua    schedule 27.07.2012    source источник


Ответы (1)


Любое (ненулевое) скалярное кратное собственного вектора также будет собственным вектором; имеет значение только направление, а не общая нормализация. В разных подпрограммах используются разные соглашения - часто вы видите, что величина установлена ​​на 1 или максимальное значение установлено на 1 или -1 - а некоторые подпрограммы даже не заботятся о внутренней согласованности по соображениям производительности. Ваши два разных результата кратны друг другу:

In [227]: sc = array([[-1., -0.5614], [-0.4352,  1.    ]])

In [228]: ml = array([[-.5897, -0.5278], [-0.2564, 0.94]])

In [229]: sc/ml
Out[229]: 
array([[ 1.69577751,  1.06366048],
       [ 1.69734789,  1.06382979]])

и поэтому на самом деле это одни и те же собственные векторы. Подумайте о матрице как об операторе, который изменяет вектор: собственные векторы - это особые направления, в которых вектор, указывающий в этом направлении, не будет скручиваться матрицей, а собственные значения - это факторы, измеряющие, насколько матрица расширяет или сжимает вектор.

person DSM    schedule 27.07.2012