В Matlab я использую функцию 'eigs()', чтобы получить несколько (около 10) наименьших собственных векторов большой матрицы (5000x5000). Как это:Ошибка Matlab eigs с большой матрицей
[V,UU] = eigs(A, 10,'sm');
После некоторых попыток, я обнаружил, что наибольший размер матрицы «eigs()» может иметь дело с что-то между 1300 и 1500.
С большими матрицами, он всплывает сообщение об ошибке типа «(A-sigma * I) является сингулярным. Сдвиг является собственным значением. или что-то о «APPAPK» (при использовании «sr») в окне команд.
У меня есть информация об этих ошибках из Google, но они касаются некоторого внутреннего кода или теоремы (звучит как один), который я не совсем понимаю.
Итак, я хочу знать, есть ли какие-либо трюки с eigs, чтобы заставить его работать с большой матрицей?
Спасибо за ваше время и помощь.
Является ли ваша матрица разреженной? – DanielTheRocketMan
вы можете попытаться добавить идентичную матрицу такого же размера, как: A = A + k * eye (размер (A, 1)); здесь k - экспериментальный коэффициент меньше 1 –
ver_k, ваш метод работает для меня. Но вы можете немного объяснить, почему добавление очень маленького числа в исходную матрицу решает проблему? И, кстати, пожалуйста, поместите свой ответ в поток, чтобы я мог выбрать ваш ответ и закончить свой вопрос. –