1 cvx_begin和cvx_end
所有的cvx建模必须以cvx_begin开始以cvx_end结束,所有的变量声明,目标函数和约束必须位于这两者之间,cvx_begin命令可以包含多个修饰词。
cvx_begin quiet 禁止求解过程中的屏幕输出
cvx_begin sdp 调用半正定规划
cvx_begin gp 调用几何规划
修饰词可以组合使用
2 变量
所有的变量必须在使用前以variable(或者variables)命令申明,variable命令包含变量名,可选的纬度列表,一个或者多个关键词提供有关变量内容和结构的额外信息。
variable X %标量
variable Y(20,10) %矩阵
variable Z(5,5,5) %多维矩阵
variable w(50)complex %复数向量
variable x(10)nonnegative %非负
variable Z(5,5) semidefinite %半正定(对称正定矩阵)
variable Q(5,5) complexsemidefinite %厄密共轭矩阵
variable p(10) integer %整数变量
variable q binary %二进制变量
variable Y(50,50) symmetric %对称矩阵
variable Z(100,100) hermitiantoeplitz %厄密共轭常对角矩阵
目前支持的结构关键词还有:
banded(lb,ub) diagonal hankel hermitian
skew_symmetric symmetric toeplitz tridiagonal
lower_bidiagonal lower_hessenberg lower_triangular
upper_bidiagonal upper_hankel upper_hessenberg upper_triangular
指定矩阵关键词同样可以用于多维矩阵,此时将定义多个申明的结构
variable R(10,10,8) hermitian semidefinite%定义8个厄密共轭半正定矩阵
variables 可以同时定义多个变量,但是不能定义复数,整数,结构变量:
variables x1 x2 x3 y1(10) y2(10,10,10);
3 目标函数
申明目标函数要求使用minimize或maximize函数,注意调用minimize的目标函数必须是凸的,调用maximize的目标函数必须是凹的。
minimize( norm( x, 1 ) )
maximize( geo_mean( x ) )
如果不指定目标函数,问题将被解释成可行性问题,如果可行性点找到,cvx_optval将设定为0,否则将为+Inf。
4 约束条件
CVX支持下列约束类型
相等==,等式左右两边是仿射表达式
小于<=不等式约束,左边表达式是凸的,右边表达式是凹的。
大于>=约束,左边表达式是凹的,右边表达式是凸的。
可以使用链式不等式:如l <= x <= u.
同时不建议使用<或者>
5 函数
许多matlab函数如sum,trace,diag,sqrt,max和min均支持CVX
还有一些CVX新函数,可以在Reference guide里面找到
此外,可以自己定义新函数,见Adding new functions to the atomlibrary
6 设定集合
可以用==或者来设定集合
如
X semidefinite(n);
A*X*A’-X B*semidefinite(n)*B’;
cvx_begin
variables x(n) y;
minimize( y );
subject to
{ A*x-b, y } lorentz(m);
cvx_end
7 对偶变量
略
8赋值和表达式定义
使用=进行赋值操作
使用ex_pression命令进行定义表达式
variable u(9);
express_ion x(10);
x(1) = 1;
for k = 1 : 9,
x(k+1) = sqrt( x(k) + u(k) );
end
variables x y
expre_ssion z
z = 2 * x - y;
square( z ) <= 3;
quad_over_lin( x, z ) <= 1;