3

我试图找到拉普拉斯算子的 2 个最小特征值的 2 个特征向量。我这样做是通过

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

哪里L是 lapalcian 和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 为其迭代过程选择了错误的初始猜测?

我使用的矩阵应该有一个下降条件数......

4

2 回答 2

1

我在实现标准化切割分割时遇到了同样的问题。条件数实际上是无限的,因为最小的特征值是 0,这基本上就是 MATLAB 的错误信息。它首先运行 LU 分解。

我刚刚将 I 的倍数 10*eps*speye 添加到归一化的拉普拉斯算子以改善条件反射并修复它。

于 2012-12-19T21:37:10.937 回答
-1

我对 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

于 2014-11-04T06:28:28.213 回答