MATLAB 2013中的ichol而不是chol

时间:2013-04-24 18:36:46

标签: matlab

我有一个代码,我曾经在MATLAB 2012中运行没有任何问题。 但是当我切换到MATLAB 2013时,我的代码不再起作用,我收到以下错误:

  

CHOLINC已被删除。改为使用ICHOL。

我正在使用cvx包中的这行代码,特别是在quad_form.m文件中:

  

[R,p] = chol(Q);

所以我想知道如何将chol替换为ichol

2 个答案:

答案 0 :(得分:0)

首先,您应该阅读文档,可以通过键入help icholdoc ichol找到该文档。这是一份副本:http://www.mathworks.nl/help/matlab/ref/ichol.html

我不是百分百肯定,但我的第一次尝试是检查将chol更改为ichol是否可以解决问题。


如果问题是函数调用是在无法改变的代码中进行的,那么(在确定调用应该是什么之后),您可以创建自己的chol函数来调用ichol

答案 1 :(得分:0)

正如@Dan建议的那样,matlab的chol可能被用户或工具箱定义的chol“覆盖”,内部调用cholinc(现在为ichol)。

但更重要的是,你应该了解你的问题发生了什么。 Cholesky facotrizations(chol)仅在您的矩阵Q为Hermitian且为正半定的情况下才有效。

可能有人编写了自己的chol尝试Cholesky分解,如果失败,则会进行不完整的Cholesky分解(ichol / cholinc)。

你可以自己实现,例如假设矩阵Q是实数值:

%untested.
R = [];
p = [];

if Q==Q'  && all(eig(Q) >= 0)
   [R,p] = chol(Q);
else
   [R,p] = ichol(Q);
end

<强>除了

您可能想要使用try&amp; catch代替if&amp; else,如果您想完全确定没有隐藏的警告/错误消息导致您的程序保释。


修改

Q上的条件更改为实际检查正半确定性。谢谢你指出@woodchips。