我有一个以前在 MATLAB 2012 中运行没有任何问题的代码。但是当我切换到 MATLAB 2013 时,我的代码不再工作,并且出现以下错误:
CHOLINC 已被删除。请改用 ICHOL。
我正在使用这行代码,它位于 cvx 包中,特别是在 quad_form.m 文件中:
[ R, p ] = chol( Q );
所以我想知道如何替换chol为ichol.
我有一个以前在 MATLAB 2012 中运行没有任何问题的代码。但是当我切换到 MATLAB 2013 时,我的代码不再工作,并且出现以下错误:
CHOLINC 已被删除。请改用 ICHOL。
我正在使用这行代码,它位于 cvx 包中,特别是在 quad_form.m 文件中:
[ R, p ] = chol( Q );
所以我想知道如何替换chol为ichol.
正如@Dan 所建议的那样,matlabchol可能被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&catch 而不是if& 。else
编辑
将条件更改Q为实际检查正半定性。感谢您指出@woodchips。
首先你应该阅读文档,可以通过输入help ichol或找到它doc ichol。这里也是一个副本: http: //www.mathworks.nl/help/matlab/ref/ichol.html
我不是 100% 确定,但我的第一次尝试是检查更改chol为是否ichol可以解决问题。
如果问题是函数调用是在您无法更改的代码中进行的,那么(在您确定调用应该是什么之后)您可以创建自己的chol调用ichol.