加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

CVX基础

(2014-12-21 09:51:48)
标签:

cvx

matlab

数学建模

分类: matlab

 

参考The CVX UsersGuid Release 2.1 20141024

 

1 cvx_begincvx_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 目标函数

申明目标函数要求使用minimizemaximize函数,注意调用minimize的目标函数必须是凸的,调用maximize的目标函数必须是凹的。

minimize( norm( x, 1 ) )

maximize( geo_mean( x ) )

如果不指定目标函数,问题将被解释成可行性问题,如果可行性点找到,cvx_optval将设定为0,否则将为+Inf

 

4 约束条件

CVX支持下列约束类型

相等==,等式左右两边是仿射表达式

小于<=不等式约束,左边表达式是凸的,右边表达式是凹的。

大于>=约束,左边表达式是凹的,右边表达式是凸的。

可以使用链式不等式:如l <= x <= u.

同时不建议使用<</SPAN>或者>

 

5 函数

许多matlab函数如 sumtracediagsqrtmaxmin均支持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;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有