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
。
まず、ドキュメンテーションを読む必要があります。help ichol
またはと入力すると、ドキュメンテーションを見つけることができますdoc ichol
。ここにもコピーがあります:http://www.mathworks.nl/help/matlab/ref/ichol.html
100% 確信があるわけではありませんが、最初に に変更chol
して問題が解決するかどうかを確認することをおichol
勧めします。
関数呼び出しが変更できないコードで行われていることが問題である場合は、(呼び出しがどうあるべきかを理解した後で) をchol
呼び出す独自の関数を作成できますichol
。
@Danが示唆したように、matlabはおそらく内部的に呼び出すchol
ユーザー定義またはツールボックス定義によって「オーバーライド」されています(現在)。chol
cholinc
ichol
しかし、もっと重要なことは、問題で何が起こっているのかを理解する必要があるということです。コレスキー係数化 ( ) は、行列がエルミート行列で半正定値のchol
場合にのみ機能します。Q
おそらく、誰かがコレスキー分解を試みる独自chol
のコードを作成し、それが失敗した場合、代わりに不完全なコレスキー分解 ( 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 さん、ご指摘ありがとうございます。