我有一个代码,我曾经在MATLAB 2012中运行没有任何问题。 但是当我切换到MATLAB 2013时,我的代码不再起作用,我收到以下错误:
CHOLINC已被删除。改为使用ICHOL。
我正在使用cvx包中的这行代码,特别是在quad_form.m文件中:
[R,p] = chol(Q);
所以我想知道如何将chol
替换为ichol
。
答案 0 :(得分:0)
首先,您应该阅读文档,可以通过键入help ichol
或doc 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。