CVX基础
2014-12-21 09:51阅读:
参考The CVX Users’ Guid Release 2.1
2014年10月24日
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) complex semidefinite
%厄密共轭矩阵
variable p(10) integer
%整数变量
variable q binary
%二进制变量
variable Y(50,50) symmetric
%对称矩阵
variable Z(100,100) hermitian toeplitz
%厄密共轭常对角矩阵
目前支持的结构关键词还有:
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.
同时不建议使用<</SPAN>或者>
5 函数
许多matlab函数如
sum,trace,diag,sqrt,max和min均支持CVX
还有一些CVX新函数,可以在Reference
guide里面找到
此外,可以自己定义新函数,见Adding new functions to the atom
library
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;