cvx/matlab で奇妙なエラーが発生しました。
デュアル変数を取得するために SDP 問題を解決したいと思います。これが私のコードです。
addpath(<cvx_directory>)
cvx_setup
cvx_begin
variable r(n);
variable R(n,n) symmetric;
dual variable alpha;
dual variable pi;
minimize(trace(A0*R))
pi: trace(A1*R) <=0;
alpha: r== diag(R);
[R r;r' 1] == semidefinite(n+1);
cvx_end
A0、A1が与えられます。上記のコードをスクリプト形式で記述しても、エラーは返されません。しかし、n の値 (変数のサイズ) を渡す必要があるため、上記のコードを関数形式で編集し (最初の行に関数 [出力] = sdp(n) を追加)、エラーを返します。
Undefined operator ':' for input arguments of type 'cvx'.
Error in pi: trace(A1*R) <=0;
二重変数 pi を行の右側に移動すると (trace(A1*R)<=0 : pi のように)
次に、他のエラーを返します。
Too many output arguments
Error in alpha: r== diag(R);
何が起きましたか?
// コードに cvx_setup を追加して、cvx がインストールされていることを確認しました