我有一个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
循环我首先创建了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".
我真的不希望那个人工作,但认为值得一试。
我也尝试使用bsxfun
在cvx中创建矩阵,但我不相信bsxfun能够处理符号。 repmat
是' bsxfun'的替代品。 (所以我告诉我)我现在正在调查。
我试图以这种方式解决问题的原因是创建一个例程,可以使用cvx来解决任何数量/组合总线的最佳潮流,而不必每次都单独创建变量。
答案 0 :(得分:0)
发布后我又花了30多分钟才发现它。我没有在等式约束中编写for循环,而是在变量声明后写了cvx_begin:
return json_encode(array("success" => true));