在MATLAB 2013中用ichol代替chol

在MATLAB 2013中用ichol代替chol,matlab,Matlab,我有一个代码,我过去在Matlab2012中运行时没有任何问题。 但当我切换到MATLAB 2013时,我的代码不再工作,我得到以下错误: CHOLINC已被删除。使用ICHOL代替 我正在使用cvx包中的这行代码,特别是在quad_form.m文件中: [R,p]=chol(Q) 因此,我想知道如何将chol替换为ichol首先,您应该阅读文档,可以通过键入help ichol或doc ichol找到它。这里还有一份副本: 我不是100%确定,但我的第一次尝试是检查将chol更改为ichol是

我有一个代码,我过去在Matlab2012中运行时没有任何问题。 但当我切换到MATLAB 2013时,我的代码不再工作,我得到以下错误:

CHOLINC已被删除。使用ICHOL代替

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

[R,p]=chol(Q)


因此,我想知道如何将
chol
替换为
ichol
首先,您应该阅读文档,可以通过键入
help ichol
doc ichol
找到它。这里还有一份副本:

我不是100%确定,但我的第一次尝试是检查将
chol
更改为
ichol
是否会奏效



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

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

但更重要的是,你应该了解你的问题是什么。Cholesky facotrations(
chol
)仅在矩阵
Q
是厄米特半正定矩阵时才起作用

可能有人编写了自己的
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
&
catch
,而不是
if
&
else


编辑


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

您确定这就是错误所在吗?由于未删除
chol
cholinc
是:/n您可能正在使用工具箱或用户定义的版本隐藏matlab的
chol
函数,该版本内部使用
cholinc
。使用det(Q)>0进行测试通常是个坏主意。@woodchips因此
try
&
catch
替代建议已修复。谢谢你提醒我,@woodchips。显然,我有点生疏了:/