美文网首页新新家园
MATLAB之CVX的一些简单笔记

MATLAB之CVX的一些简单笔记

作者: Echo_Mz | 来源:发表于2020-04-08 12:49 被阅读0次

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

8赋值和表达式定义

使用=进行赋值操作

使用ex_pression命令进行定义表达式

variable u(9);

expression x(10);

x(1) = 1;

for k = 1 : 9,

x(k+1) = sqrt( x(k) + u(k) );

end

相关文章

  • MATLAB之CVX的一些简单笔记

    1 cvx_begin和cvx_end 所有的cvx建模必须以cvx_begin开始以cvx_end结束,所有的变...

  • Matlab中凸优化工具包CVX的配置、注册与使用

    CVX工具包可以从官网下载http://cvxr.com/cvx/download/。 CVX是基于Matlab的...

  • CVX 中的幂运算

    matlab 中的CVX工具包不支持 "^" 这个幂运算,cvx中有自己定义的幂运算函数,主要有三种:

  • 答辩记录

    问题一:算法是用什么实现的,怎样实现的? 算法的编程是用matlab实现的,具体是用优化工具包cvx的解作为优化问...

  • Matlab制作Video

    Matlab可以将图像序列合成为一段视频,其过程非常之简单:

  • 第一章 MATLAB 简介

    此系列为《MATLAB数学工具软件实例简明教程》学习笔记。 第一章 MATLAB 简介 MATLAB(MATrix...

  • 2018-02-04

    matlab函数之bsxfun

  • matlab学习笔记——DeepLearnToolBox搭建MN

    DeepLearnToolBox是matlab下的一个简单的深度学习工具包,接口简单易用,其代码是纯matlab编...

  • Matlab 密码锁小游戏

    Matlab本身自带简单的GUI功能,非常适合用来开发简单的小工具或者小游戏。 最近我使用Matlab做了一款简单...

  • Jupyter Notebook 绘图

    苦于Matlab实在太贵, Octave又不能做笔记展示,所以考虑Jupyter用来做简单绘图,来辅助学习线性代数...

网友评论

    本文标题:MATLAB之CVX的一些简单笔记

    本文链接:https://www.haomeiwen.com/subject/wwztzctx.html