короткой версии моего вопроса:Быстро и эффективно вычисление собственного вектора для известных собственного
Что бы оптимальным способом вычисления собственного вектора для матрицы A
, если мы уже знаем, собственное значение, принадлежащее к собственному вектору?
Longer объяснение:
У меня есть большая стохастическая матрица A
, которая, так как она является стохастической, имеет неотрицательный левый собственный вектор x
(например, что A^Tx=x
).
Я ищу быстрые и эффективные методы численного расчета этого вектора. (Предпочтительно в MATLAB или numpy/scipy - так как оба эти обертывания вокруг ARPACK/LAPACK, любой из них будет прекрасен).
Я знаю, что 1
является наибольшим собственным A
, так что я знаю, что называть что-то вроде этого Python кода:
from scipy.sparse.linalg import eigs
vals, vecs = eigs(A, k=1)
приведет к vals = 1
и vecs
равняясь вектором мне нужно.
Однако, то, что беспокоит меня в том, что вычисление собственных значений, в общем, более сложная операция, чем решение линейной системы, и, в общем случае, если матрица M
имеет собственное значение l
, а затем найти соответствующий собственный вектор вопрос решения уравнения (M - 1 * I) * x = 0
, который теоретически является, по меньшей мере, операцией, которая проще, чем вычисление собственного значения, поскольку мы решаем только линейную систему, а точнее - находим пустое пространство матрицы.
Однако я считаю, что все методы вычисления nullspace в MATLAB
полагаются на вычисление svd
, процесс, который я не могу позволить себе выполнять на матрице моего размера. Я также не могу назвать решатели по линейному уравнению, потому что все они находят только одно решение, и это решение равно 0
(что да, это решение, но не то, что мне нужно).
Есть ли способ избежать вызовов функции eigs
, чтобы решить мою проблему быстрее, чем путем вычисления самого большого собственного значения и сопутствующего собственного вектора?
Вы интересуетесь ** только ** нахождением самого большого собственного вектора или собственного значения? Если это так, подумайте об использовании метода мощности. Это итеративный алгоритм, который одновременно определяет наиболее известный собственный вектор и собственное значение: http://www.math.ualberta.ca/~ewoolgar/labs/linalg/Lab15.pdf. Это, безусловно, намного эффективнее, чем полный SVD. – rayryeng
@rayryeng Фактически, MATLAB использует ARPACK, чтобы найти самую большую собственную партию еще быстрее, чем обычный метод мощности. Но основное внимание в моем вопросе заключается в следующем: поскольку я уже * знаю *, что такое наибольшее собственное значение, существует ли метод, чтобы найти соответствующий собственный вектор, который лучше *, чем методы, которые просто находят наибольшую собственную пар? – 5xum
К сожалению, у меня нет ответа. Мне также интересно узнать, что такое ответ! Надеюсь, кто-то может ответить на ваш вопрос (Amro, chappjc, horchler). – rayryeng