matlab关于 eig函数不收敛的问题
错误案例: eig is not converged!!
详细情况请参见网页:http://ask.cvxr.com/t/eig-did-not-converge-in-prox-trace/996
主要是新版本的matlab使用了一种更快速的特征值分解方法,所以出现了这种问题。
这里给出两种解决方案:
[v d] = eig(A); % 最常见的调用方式
%% 修改方案1
try
[v,d] = eig(A);
catch ME
if (strcmpi(ME.identifier,'MATLAB:eig:NoConvergence'))
[v,d] = eig(A, eye(size(A)));
else
rethrow(ME);
end
end
%% 修改方案2 用SVD分解替换 eig函数 [v,d,w] = svd(A); d = d.*sign(diag(real(dot(v,w,1))));
那么问题来了,svd输出的结果确实与eig不一样。关于svd分解和eig分解的区别和联系,可以参见网页: http://m.blog.csdn.net/article/details?id=51240318
当然不同的matlab版本,同样的调用方式,得到的特征值和特征向量也是有区别的。
本人更倾向于第一种修改方案。

浙公网安备 33010602011771号