0

我有一个以前在 MATLAB 2012 中运行没有任何问题的代码。但是当我切换到 MATLAB 2013 时,我的代码不再工作,并且出现以下错误:

CHOLINC 已被删除。请改用 ICHOL。

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

[ R, p ] = chol( Q );

所以我想知道如何替换cholichol.

4

2 回答 2

0

正如@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。

于 2013-04-24T19:22:34.577 回答
0

首先你应该阅读文档,可以通过输入help ichol或找到它doc ichol。这里也是一个副本: http: //www.mathworks.nl/help/matlab/ref/ichol.html

我不是 100% 确定,但我的第一次尝试是检查更改chol为是否ichol可以解决问题。


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

于 2013-04-24T19:00:11.773 回答