2012-04-07 7 views
2

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

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

+0

Я уже не знаю достаточно о линейной алгебре, чтобы представить общий алгоритм/подход для решения этого. Не могли бы вы описать алгоритм, который вы намереваетесь использовать? Если да, то я, скорее всего, дам вам код Python, который это сделает. Или вы ищете библиотеку, которая уже делает это для вас? –

+0

Возможно, стоит снова взглянуть на вашу проблему - вы вряд ли когда-либо пытаетесь инвертировать матрицу, иногда это кажется. http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/ Инверсия, как вы заметили, часто очень численно нестабильна и ее следует избегать (если это возможно!). – Hooked

ответ

6

Почему бы вам не попробовать использовать scipy? Он имеет метод в своем линейном алгебре module 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. 
+0

спасибо, я явно пропустил этот. –