Загадочная ошибка Matlab при вычислении eigs

Я пытаюсь найти 2 собственных вектора 2 наименьших собственных значений лапласиана. я делаю это по

[v,c]=eigs(L,M,2,'SM');

Где L — это лапалсиан, а M — массовая матрица.

В результате получаю ошибку

Error using eigs/checkInputs/LUfactorAminusSigmaB (line 1041)
The shifted operator is singular. The shift is an eigenvalue.
 Try to use some other shift please.


Error in eigs/checkInputs (line 855)
            [L,U,pp,qq,dgAsB] = LUfactorAminusSigmaB;

Error in eigs (line 94)
[A,Amatrix,isrealprob,issymA,n,B,classAB,k,eigs_sigma,whch, ...

Означает ли это, что я делаю что-то неправильно, или это просто Matlab выбирает неверное начальное предположение для своего итерационного процесса?

Матрицы, которые я использую, должны иметь номер условия спуска...


person olamundo    schedule 26.11.2012    source источник
comment
Конечно. Куда мне их загрузить? Они довольно большие....   -  person olamundo    schedule 27.11.2012


Ответы (2)


Я столкнулся с той же проблемой при реализации нормализованной сегментации сокращений. Число условия на самом деле бесконечно, потому что наименьшее собственное значение равно 0, и это в основном то, о чем сообщение об ошибке MATLAB. Сначала выполняется декомпозиция LU.

Я просто добавил кратное I, 10*eps*speye, к нормализованному лапласиану, чтобы улучшить обусловленность, и это исправило ситуацию.

person Radu    schedule 19.12.2012
comment
Почему вы выбрали именно 10*eps*speye, а не какое-то другое значение? - person Andreas K.; 11.02.2016

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

% Решите проблему собственных значений, используя полные матрицы

[v,c]=eig(full(L),full(M));

% Отсортируйте собственные значения с помощью функции сортировки (знак «-» означает, что вам нужны наименьшие по величине действительные собственные значения)

[E,P] = sort(real(c),'descend'); % Here I am assuming you know all the eigenvalues have` negative real parts

% Теперь P — это вектор, который содержит (по порядку) индексы перестановки строк, выполняемой функцией % sort. % Чтобы получить два собственных вектора, соответствующих двум наименьшим собственным значениям:

for k = 1:2
  index = P(k);
  lambda(k) = c(index,index); % use this to check if c(index,index)=E(k,k)
  eigvec(:,k) = v(:,index); % corresponding eigenvector
end

Надеюсь это поможет

G

person Gunter    schedule 04.11.2014