Обобщенные собственные значения в Python

Я пытаюсь решить обобщенную проблему собственных значений A.c = (lam).B.c, где A и B - матрицы nxn, а c - вектор nx1. (lam) — собственное значение.

Я использую питон. Я попробовал что-то вроде eig(dot(inv(B),A)) из numpy.linalg, но в моей проблеме он оказался ОЧЕНЬ нестабильным, поскольку включает инверсию. Итак, я читал, что это можно сделать в MATLAB, но я не смог найти ни одной функции или метода для этого в python. Любые идеи очень приветствуются. Спасибо...


person Dogan_79    schedule 07.04.2012    source источник
comment
Я больше не знаю достаточно о линейной алгебре, чтобы придумать общий алгоритм/подход для ее решения. Не могли бы вы описать алгоритм, который вы собираетесь использовать? Если да, то я, вероятно, могу дать вам код Python, который это делает. Или вы ищете библиотеку, которая уже делает это за вас?   -  person Jesus is Lord    schedule 08.04.2012
comment
Возможно, стоит еще раз взглянуть на вашу проблему - вам вряд ли когда-либо нужно инвертировать матрицу, просто иногда кажется, что это так. johndcook.com/blog/2010/01/19 /dont-invert-that-matrix Инверсия, как вы заметили, часто очень численно нестабильна, и ее следует избегать (если возможно!).   -  person Hooked    schedule 08.05.2012


Ответы (1)


Почему бы вам не попробовать использовать scipy? В модуле линейной алгебры есть метод scipy.linalg. .eig, который можно использовать для «решения обычной или обобщенной проблемы собственных значений».

scipy.linalg.eig(a, b=None, left=False, right=True, overwrite_a=False, overwrite_b=False)[source]

    Solve an ordinary or generalized eigenvalue problem of a square matrix.

    Find eigenvalues w and right or left eigenvectors of a general matrix:

    a   vr[:,i] = w[i]        b   vr[:,i]
    a.H vl[:,i] = w[i].conj() b.H vl[:,i]

    where .H is the Hermitean conjugation.
person Nolen Royalty    schedule 07.04.2012