3D 行列At
、n x n x nvar
、nvar
変数がありますy1...y25
。変数を cvx に簡単にフィードできました。
cvx_begin sdp;
variable A(2*nbus,2*nbus) symmetric;
variable y(1,nvar);
maximize sum(y*Mfun);
A == subs(At,yt,y(1,nvar));
ただし、最後の行の等号により、次のエラーが発生しています。
Error using sym/subs>normalize (line 197)
Substitution expression X must be a symbolic, cell, or numeric array.
Error in sym/subs>mupadsubs (line 137)
[X2,Y2,symX,symY] = normalize(X,Y); %#ok
Error in sym/subs (line 125)
G = mupadsubs(F,X,Y);
私はその平等をいくつかの異なる方法で設定しようとしました:
最初に作成したのと同じfor
ループを使用します ( double の行列を使用):At
Cfun
A == for k = 1:nvar
At = At + yt(k)*Cfun(:,:,k);
end
このエラーが発生します:
Error: File: proj.m Line: 124 Column: 11
Illegal use of reserved keyword "for".
うまくいくとは思っていませんでしたが、試してみる価値はあると思いました。
また、cvx 内で行列を作成するために使用しようとしbsxfun
ましたが、bsxfun がシンボリックを処理できるとは思いません。repmat
私が今調べている「bsxfun」の代替です(そう言われました)。
この方法で問題を解決しようとしている理由は、cvx を使用して任意の数/組み合わせのバスの最適な電力の流れを解決できるルーチンを作成することです。毎回個別に変数を作成する必要はありません。