如何将MATLAB syms / symbolics传递给cvx sdp求解器?

时间:2016-05-04 06:15:42

标签: matlab cvx

我有一个3D矩阵Atn x n x nvarnvar变量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来解决任何数量/组合总线的最佳潮流,而不必每次都单独创建变量。

1 个答案:

答案 0 :(得分:0)

发布后我又花了30多分钟才发现它。我没有在等式约束中编写for循环,而是在变量声明后写了cvx_begin:

return json_encode(array("success" => true));