0

MATLAB 2012 で問題なく実行できたコードがあります。しかし、MATLAB 2013 に切り替えると、コードが機能しなくなり、次のエラーが発生します。

CHOLINC は削除されました。代わりに ICHOL を使用してください。

私はcvxパッケージ、特にquad_form.mファイルにあるこのコード行を使用しています:

[ R, p ] = chol( Q );

cholそれで、どうすれば に置き換えることができるのだろうと思っていますichol

4

2 に答える 2

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 に答える
0

@Danが示唆したように、matlabはおそらく内部的に呼び出すcholユーザー定義またはツールボックス定義によって「オーバーライド」されています(現在)。cholcholincichol

しかし、もっと重要なことは、問題で何が起こっているのかを理解する必要があるということです。コレスキー係数化 ( ) は、行列がエルミート行列で半正定値の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 さん、ご指摘ありがとうございます。

于 2013-04-24T19:22:34.577 に答える