2013-03-26 2 views
3

В Matlab я использую функцию 'eigs()', чтобы получить несколько (около 10) наименьших собственных векторов большой матрицы (5000x5000). Как это:Ошибка Matlab eigs с большой матрицей

[V,UU] = eigs(A, 10,'sm'); 

После некоторых попыток, я обнаружил, что наибольший размер матрицы «eigs()» может иметь дело с что-то между 1300 и 1500.

С большими матрицами, он всплывает сообщение об ошибке типа «(A-sigma * I) является сингулярным. Сдвиг является собственным значением. или что-то о «APPAPK» (при использовании «sr») в окне команд.

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

Итак, я хочу знать, есть ли какие-либо трюки с eigs, чтобы заставить его работать с большой матрицей?

Спасибо за ваше время и помощь.

+1

Является ли ваша матрица разреженной? – DanielTheRocketMan

+2

вы можете попытаться добавить идентичную матрицу такого же размера, как: A = A + k * eye (размер (A, 1)); здесь k - экспериментальный коэффициент меньше 1 –

+0

ver_k, ваш метод работает для меня. Но вы можете немного объяснить, почему добавление очень маленького числа в исходную матрицу решает проблему? И, кстати, пожалуйста, поместите свой ответ в поток, чтобы я мог выбрать ваш ответ и закончить свой вопрос. –

ответ

0

Вы можете попробовать добавить единицу измерения того же размера, что и: A = A + k * eye (размер (A, 1)); здесь k - экспериментальный коэффициент меньше 1. Это гарантирует, что матрица A неособенна.