我有一个以前在 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
.