Разложение по собственным значениям с использованием MATLAB - PullRequest
0 голосов
/ 11 июля 2011

Я провожу размерное уменьшение квадратной матрицы A. Теперь моя проблема заключается в том, что у меня проблема с вычислением собственного разложения матрицы A 13000 x 13000, т.е. Поскольку это разреженная матрица, я получаю ошибку «Недостаточно памяти», используя 4 ГБ ОЗУ. Я убежден, что это не проблема моего ПК, так как память не используется при запуске команды eigs. Помощь, которую я увидел в Интернете, была связана с ARPACK. Я проверил рекомендуемый сайт, но там было много файлов, не знаю, что скачать. Кроме того, я не понял, как использовать его с MATLAB. В другой справке говорится, что используются численные методы, но я не знаю, какой конкретно использовать. Пожалуйста, любое решение приветствуется.

Error in ==> eigs>ishermitian at 1535
tf = isequal(A,A');

Error in ==> eigs>checkInputs at 479
            issymA = ishermitian(A);

Error in ==> eigs at 96
[A,Amatrix,isrealprob,issymA,n,B,classAB,k,eigs_sigma,whch, ...

Error in ==> labcomp at 20
[vector lambda] = eigs(A) 

Можно ли получить перевод этих ошибок и как их исправить?

Ответы [ 2 ]

3 голосов
/ 11 июля 2011

Причина, по которой вы не видите, что память использовалась, заключается в том, что она не использовалась - Matlab не может выделить необходимый объем памяти.

Хотя размер массива 13000 x 13000 удваивается (тип данных по умолчанию в Matlab) составляет около 1,25 ГБ, это не означает, что достаточно 4 ГБ оперативной памяти - Matlab требуется 1,25 ГБ непрерывной памяти, в противном случае вам не удастся выделить вашу матрицу. Вы можете прочитать больше о проблемах с памятью в Matlab здесь: http://www.mathworks.com/support/tech-notes/1100/1106.html

Вы можете в качестве первого шага попробовать использовать одинарную точность:

[v d]=eigs(single(A));

Вы говорите

В другой справке говорится, что используются численные методы

Если вы делаете это на компьютере, он по определению числовой.

Если вы не хотите (или не можете из-за ограничений памяти) сделать это в Matlab, вы можете найти библиотеку линейной алгебры (ARPACK - только одна из них) и выполнить вычисления вне Matlab.

0 голосов
/ 16 ноября 2016

Во-первых, если A разрежено, одиночный (A) не будет работать.Одиночные разреженные матрицы не реализованы в MATLAB, см. Комментарии: как создать одиночную разреженную матрицу в мекс-файлах

Вызов ishermitian может завершиться неудачно, поскольку вы не можете сохранить двакопии вашей матрицы (A и A ').Обойдите эту проблему, закомментировав строку и установив issymA в true или false, в зависимости от того, является ли ваша матрица эрмитовой.

Если вы обнаружите дальнейшие проблемы с памятью внутри eigs, попробуйтеуменьшите объем памяти, задавая меньше решений eigs(A,1) или уменьшая максимальный размер базы (опция p), что по умолчанию вдвое превышает количество запрашиваемых решений:

 opts.p = 3
 [x,d] = eigs(A,2,'LM',opts)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...