MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法

这篇具有很好参考价值的文章主要介绍了MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文是在最近学习MATLAB CVX工具箱解决凸优化问题时学到的一些知识点,分享出来供大家参考。

进行CVX编程时,会遇到各种各样意想不到又难以解决的报错问题,如果编程过程中遇到了很多cvx bug和错误,可以阅读下面这篇文章,这篇文章总结了很多cvx编程错误,并给出了解决方法和代码实现:
MATLAB cvx错误汇总,cvx错误解决,cvx知识点总结,cvx编程技巧

CVX工具箱中有很多特定的,专有的函数,这些函数不仅能够简化表达式,还能够通过函数替换来解决很多报错问题,例如除法、取倒数、对数㏒函数等都有专门函数替代,下面这篇文章总结了cvx中常用的函数,阅读这篇文章一定会对你产生帮助!
MATLAB cvx工具箱中常用的替换函数汇总,解决表达式报错问题


一、语法

1.cvx编程框架:
必须以cvx_begin开始,cvx_end结束。变量声明,目标函数和约束条件必须位于cvx_begin和cvx_end之间。
代码如下(示例):

cvx_begin
    variable x(6,2);
    variable y(6,2);
    minimize(f(x,y));
    subject to
        x == a;  %必须等于某一个值
        x >= 0;   %保证大于等于零
        b <= 0;   %保证小于等于零
        sum(x) <= x_max;  %保证之和小于上限
cvx_end  

基本语句及其含义
注:修饰语句可以组合使用

语句 含义
cvx_begin quiet 不显示求解过程,只输出结果
cvx_begin sdp 采取半正定规划
cvx_begin gp 采取几何规划

二、变量声明

所有的变量必须在使用前以:variable 变量 (维度)
进行申明,variable命令包含变量名,可选的纬度列表
具体语句如下表:

语句 含义
variable X 标量
variable Y(n,m) n*m维矩阵
variable Z(n,m,k) 多维矩阵
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 厄密共轭常对角矩阵

三、目标函数

1.申明目标函数要求使用minimize或maximize函数
2.调用minimize的目标函数必须是凸的
3.调用maximize的目标函数必须是凹的

例如:
minimize( norm( x, 1 ) )

maximize( geo_mean( x ) )

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

四、约束条件

CVX支持下列约束类型

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

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

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

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

五、函数

cvx工具包支持的基本函数:

sum:求和
trace:迹
diag:对角
sqrt:根号
max和min:最大最小

其他复杂函数参考Reference guide

注:可以使用自己定义的函数,直接调用即可。

六、cvx特有的数学运算表达式

在进行cvx求解优化问题时,会出现各种匪夷所思的错误(如下图),搞人心态,尤其是一些MATLAB常用的基本数学表达式在cvx中经常报错,比如除法运算。
常见错误: Cannot perform the operation: {real affine} ./ {positive constant}
MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法
其实cvx工具箱中有很多专属的数学运算表达式,例如关于变量的次方符号(^)是不允许的,需要替换为pow_pos(x,n)。下面列出一些常见的替换表达式:
1.平方/次方表达式

语句 含义
square_pos 平方,square_pos(X)=MAX(X,0).^2
square ( x ) (real x) x.*x
sum_square_abs ( y ) y’* y

2.矩阵范数、log函数

语句 含义
rel_entr log函数,rel_entr(x,y) = xlog(x/y)
norms() 取范数
square_abs ( x ) conj( x ) .*x
quad_form ( A*x - b,o ) (A*x-b)'Q(Ax-b)

3.cvx除法(cvx最麻烦、最容易出错的表达式)

语句 含义
inv_pos 分式或倒数,inv_pos(X) = 1./X
prod_inv(x) 对X中每个元素取到数再求和,Πi​(xi​)−1
quad_over_lin(x,y) X转置乘x再除以y, x^Tx/y
quad_pos_over_lin(x,y) sum_square_pos( x ) / y

4.其他小技巧
MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法

七、常见错误

错误1:
无法从 cvx 转换为 double
MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法
错误1解决办法:
如果变量声明是在cvx表达式之外,那么cvx运行过程中会产生数据从cvx类型存到double(外面是double的)的过程。必须要将中间变量在cvx表达式里面进行定义。
在cvx_begin和cvx_end之间用variable声明变量。

错误2:
This is often an indication that an equality constraint was written with one equals ‘=’ instead of two ‘==’. The model must be rewritten before cvx can proceed.
错误2原因:
cvx中的variable变量不是允许人为赋值的,只有在最后得出结果才会被结果覆盖,使用等号对某一个变量进行赋值是不允许的,cvx会动态优化变量,不允许人为赋值。
错误2解决办法:
使用expression声明临时变量,临时变量可以在cvx求解过程中进行人为赋值,整个求解结束时该变量被自动清除。
expression变量是可以使用“=”的临时变量

// 声明临时变量
cvx_begin

    variable a;   %优化变量,不可以赋值修改,可以用双等号==来写约束条件
    expression b;  %临时变量,可以用等号=来赋值修改
    minimize(f(x));
    subject to
       a == 0;  %约束条件,a必须等于零
       b = 10;  %给b赋值为10,优化结束后自动清除
 			
cvx_end  

错误3:
点除运算出现错误,出错 ./ (line 29)
错误3解决办法:
用错误提示给出的语法去纠正错误
例如:1./x报错,修改为:times(1, x, ‘./’)
再比如:z = x ./ y 报错,修改为:z = times(x, y, ‘./’)

错误4:
点除运算出现错误,出错 ./ (line 29)

MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法

错误4解决办法:
例如: x ./ y报错
用inv_pos(y)来代替y,上式修改为x .* inv_pos(y)

// 错误4
minimize(x ./ y);
//修改为
minimize(x .* inv_pos(y));

还有很多cvx错误这里不再一一列举,详细错误总结在我另一篇博客:
MATLAB cvx错误汇总,cvx错误解决,cvx知识点总结,cvx编程技巧

八、进阶阅读

1.CVX工具箱中有很多特定的,专有的函数,这些函数不仅能够简化表达式,还能够通过函数替换来解决很多报错问题,例如除法、取倒数、对数㏒函数等都有专门函数替代,下面这篇文章总结了cvx中常用的函数,阅读这篇文章一定会对你产生帮助!
MATLAB cvx工具箱中常用的替换函数汇总,解决表达式报错问题

2.如果是对MATLAB基础操作,尤其是涉及到矩阵操作、逻辑运算、数组生成等方面不是很熟悉的,可以参考下面这篇文章:
MATLAB基础操作,矩阵乘法、数组矩阵索引、最大最小运算符、零矩阵/随机矩阵/单位矩阵的生成、log函数、Inf和NaN的含义,语句过长用连接符换行、逻辑运算符以及区别

3.如果程序调试成功需要画结果图,但是对MATLAB画图的基本知识和语法搞不清楚的,可以参考下面这篇文章:
MATLAB绘图必看,画图大全!MATLAB绘图基础操作大全—折线图、散点图、颜色样式、线条粗细汇总

参考资料

参考视频:
https://www.bilibili.com/video/BV1UQ4y1K7Vf/?spm_id_from=333.337.search-card.all.click&vd_source=aaf9c92065709eaa104228d5528a5d21
参考文章:
1.https://blog.csdn.net/gongshouxiayin/article/details/122477776?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168301606916800222832721%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168301606916800222832721&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-122477776-null-null.142v86insert_down38v5,239v2insert_chatgpt&utm_term=cvx&spm=1018.2226.3001.4187

2.https://www.jianshu.com/p/69bf890e1b1d文章来源地址https://www.toymoban.com/news/detail-479270.html

到了这里,关于MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • (转载)matlab遗传算法工具箱

    (转载)matlab遗传算法工具箱

            以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。         遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代的方式进行选

    2024年02月07日
    浏览(13)
  • MATLAB cftool工具箱——曲线拟合

    MATLAB cftool工具箱——曲线拟合

        cftool工具箱可以将数据点拟合成曲线或曲面并直观显示出图像。能实现多种类型的线性、非线性曲线/面拟合。     有两种方式打开cftool:(1)在命令行窗口输入\\\"cftool\\\"并回车;(2)在MATLAB的\\\"APP\\\"选项栏中找到\\\"Curve Fitting\\\"程序打开即可。     界面左上部分为数据区域,下拉框中

    2024年02月08日
    浏览(10)
  • 【MATLAB第57期】基于MATLAB的双隐含层BP神经网络回归预测模型(无工具箱版本及工具箱版本对比)

    【MATLAB第57期】基于MATLAB的双隐含层BP神经网络回归预测模型(无工具箱版本及工具箱版本对比)

    数据为案例数据 。103行样本,7输入1输出数据。 训练集数据的R2为:0.9022 测试集数据的R2为:0.87266 训练集数据的MAE为:1.8189 测试集数据的MAE为:2.1658 训练集数据的MBE为:-0.00088469 测试集数据的MBE为:0.3059 数据与无工具版本相同,数据顺序也相同。 训练集数据的R2为:1 测试

    2024年02月16日
    浏览(25)
  • Matlab样条工具箱及曲线拟合

    Matlab样条工具箱及曲线拟合

    Matlab样条工具箱提供了样条的建立、操作、绘制等功能. 建立一个样条曲线或曲面,根据前缀可分为4类: 前缀 类别 cs* 三次样条 pp* 分段多项式样条 sp* B样条,系数为基函数系数 rp* 有理B样条 函数操作:求值、求导数、求积分等; 节点操作:节点重数的设定、修改等. 1.三次

    2024年02月08日
    浏览(15)
  • matlab系统辨识工具箱及其反向验证

    matlab系统辨识工具箱及其反向验证

    系统辨识工具箱 什么时候使用系统辨识,当系统传递函数不确定(在多大程度上不确定?)时,通过对输入输出数据采集,通过数学迭代找到控制对象的近似模型。在找到近似模型(传递函数)后,就可以使用线性化调参工具对系统控制参数进行整定,进行控制系统设计。 调用命

    2024年02月05日
    浏览(10)
  • matlab机器人工具箱基础使用

    资料:https://blog.csdn.net/huangjunsheng123/article/details/110630665 test1.m

    2024年02月12日
    浏览(43)
  • 在Matlab中安装LibSVM工具箱

    在Matlab中安装LibSVM工具箱

    1 下载工具箱 地址:LibSVM下载地址 下拉网页: 2 注意事项: 2.1 注意测试数据 ==官网下载的数据包中没有Matlab对应的数据集格式,点此下载:heart_scale.mat.== 链接: https://pan.baidu.com/s/15LYMilm8asw9EYkHmifLyg 提取码: trws 复制这段内容后打开百度网盘手机App,操作更方便哦 –来自百度

    2024年02月04日
    浏览(8)
  • 遗传算法与Matlab GA工具箱

    遗传算法与Matlab GA工具箱

    GA是一种进化算法,基本原理效仿生物界“物竞天择,适者生存”的演化法则。 一些基本概念 种群population:问题潜在的解集 个体individual:每一个可能的解,通过基因编码一定数目的个体形成一个种群 适应度fitness:由此判断个体的优良,进而进行选择 选择selection、交叉cr

    2024年02月09日
    浏览(12)
  • 【Matlab】相机标定(计算机视觉工具箱)

    【Matlab】相机标定(计算机视觉工具箱)

    图像处理和计算机视觉是Matlab的一个主要应用领域,这部分包括4个工具箱——图像处理、计算机视觉、雷达、医学图像。由于视觉的东西容易呈现,所以先从计算机视觉工具箱学起。 官方文档对计算机视觉工具箱的介绍如下:设计和测试计算机视觉、3D 视觉和视频处理系统

    2024年02月05日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包