在MATLAB 2013中用ichol代替chol
我有一个代码,我过去在Matlab2012中运行时没有任何问题。 但当我切换到MATLAB 2013时,我的代码不再工作,我得到以下错误: CHOLINC已被删除。使用ICHOL代替 我正在使用cvx包中的这行代码,特别是在quad_form.m文件中: [R,p]=chol(Q)在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是
因此,我想知道如何将
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。显然,我有点生疏了:/