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版本,同样的调用方式,得到的特征值和特征向量也是有区别的。

本人更倾向于第一种修改方案。

 

  

posted @ 2016-11-11 11:15  邪恶的亡灵  阅读(1603)  评论(0)    收藏  举报