MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、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_beginvariable x(6,2);variable y(6,2);minimize(f(x,y));subject tox == 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}
在这里插入图片描述
其实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_entrlog函数,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.其他小技巧
在这里插入图片描述

七、常见错误

错误1:
无法从 cvx 转换为 double
在这里插入图片描述
错误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_beginvariable a;   %优化变量,不可以赋值修改,可以用双等号==来写约束条件expression b;  %临时变量,可以用等号=来赋值修改minimize(f(x));subject toa == 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)

在这里插入图片描述

错误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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29537.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次累累累的过往:在Linux环境下的项目实现

写在前面&#xff1a;当你看到这篇文章的时候&#xff0c;我有可能已经完成了这个实训&#xff0c;这是边做边写的一个叙事流&#xff0c;或者是什么私心分享流&#xff09;。 大书记官艾尔海森为你写诗:) 任务背景&#xff1a; 在任意环境下实现ARP欺骗&#xff08;主&#…

Prompt learning 教学[技巧篇]:通过增加示例、引导词、特殊符号指令等方式让chatgpt输出更好的答案

Prompt learning 教学[技巧篇]&#xff1a;通过增加示例、引导词、特殊符号指令等方式让chatgpt输出更好的答案 技巧1&#xff1a;To Do and Not To Do 在问答场景里&#xff0c;为了让 AI 回答更加准确&#xff0c;一般会在问题里加条件。比如让 AI 推荐一部电影给你 Recomme…

对含有中英文的文本去除停用词 结巴分词

对含有中英文的文本去除停用词 分词 这里的停用词表可以自己定义或者采用网上的 是文本分类 情感分析进行预处理的步骤 from collections import Counter import jieba**# jieba.load_userdict(userdict.txt) **# 创建停用词list**** def stopwordslist(filepath):stopwords …

一、(4) 结巴分词词性提取

一、&#xff08;4&#xff09; 结巴分词词性提取 代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Tue May 14 14:45:01 2019author: sun """ import jieba.posseg as psg import codecs# 建立结果保存路径 result codecs.ope…

结巴分词加字典分词词性标注

1 代码 import jieba import jieba.posseg as pseg jieba.load_userdict("data/entity_noun_dic.txt") jieba.add_word(word"重置", tag"v") jieba.del_word("送别") jieba.del_word("人流量")result pseg.cut("请问光…

使用斯坦福分词器进行词性标注

使用斯坦福分词器进行词性标注 文章目录 使用斯坦福分词器进行词性标注前言一、斯坦福分词器是什么&#xff1f;二、使用步骤1.去官网下载工具包2.导入库3.斯坦福模型功能的介绍4.分词结果展示5.分词结果进行分析 三、总结 前言 中文分词是中文文本处理的一个基础步骤&#xf…

力扣 139. 单词拆分

一、题目描述 给你一个字符串 s 和一个字符串列表 word_dict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s "leetcode"…

文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

解单词拆分问题

问题描述&#xff1a; 题目&#xff1a;Leetcode第139题 难度&#xff1a;中等 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重…

一次 Netty 不健壮导致的无限重连分析

由于 OOM 导致不健壮的 Netty 一系列诡异的行为&#xff0c;这次的问题分析会比上次那个更有意思一点。&#xff08;备注&#xff1a;本文 Netty 版本是上古时代的 3.7.0.Final) 现象描述 开发的同学反馈 dubbo 客户端无法调用远程的服务&#xff0c;抓包来看&#xff0c;客户…

G2SAT: Learning to Generate SAT Formulas论文精读

0. Abstract SAT&#xff08;布尔可满足&#xff09;问题被证明是一个经典的np完全问题&#xff0c;作为一个计算机科学的基本问题&#xff0c;在决策、验证和理论证明等很多方面都有应用。目前的SAT求解器的开发和评估依赖于现有的有限的现实问题&#xff0c;且现有的手工制作…

【论文精读】A Survey on Knowledge Graphs Representation, Acquisition and Applications

A Survey on Knowledge Graphs Representation, Acquisition and Applications 前言Abstract1. INTRODUCTIONII. OVERVIEWA. A Brief History of Knowledge BasesB. Definitions and NotationsC. Categorization of Research on Knowledge GraphD. Related Surveys III. KNOWLE…

SharpContour论文精读

SharpContour: A Contour-based Boundary Refinement Approach for Efficient and Accurate Instance Segmentation 论文链接&#xff1a;[2203.13312] SharpContour: A Contour-based Boundary Refinement Approach for Efficient and Accurate Instance Segmentation (arxiv…

【论文精读】HumanNeRF

目录 Abstract1.Introduction2.Related workHuman specific renderingNeural radiance fieldsHuman-specific neural renderingConcurrent work 3.Representing a Human as a Neural FieldCanonical volumeSkeletal motionNon-rigid motionPose correction 4.Optimizing a Huma…

GAN论文精读以及基础讲解

GAN精读论文&#xff1a;Neurips-2014-Generative Adversarial Nets 根据李沐老师的讲解加上笔者个人的理解做的一个笔记&#xff0c;希望能够对想了解GAN的求学者有所帮助&#xff01; 一、标题、作者、期刊 论文的标题名为Generative Adversarial Nets&#xff0c;中文解释…

我在工作群和ChatGPT聊了会天,找到了升职加薪的新思路

ChatGPT 大火&#xff01; 我们知道&#xff0c;基于 AIGC 的 ChatGPT 可以整合信息并“回复”给我们所需的很多类答案&#xff0c;比如写论文、作诗、画画&#xff0c;不过现在&#xff0c;ChatGPT 已经从火出圈的现象级 AI 应用&#xff0c;迅速被更多开发者融入到更多产品工…

容联七陌:ChatGPT大模型能力为智能客服带来新方向

科技云报道原创。 近几个月来&#xff0c;大众对ChatGPT预期的持续走高&#xff0c;也影响到了智能客服领域公司的命运。 一方面&#xff0c;ChatGPT的出现为智能客服场景带来了更加“智能”的可能性&#xff1b;但另一方面&#xff0c;有人认为ChatGPT完全可以替代现有的智能…

ChatGPT爆火之后,视觉研究者坐不住了?谷歌将ViT参数扩大到220亿

本文来源 机器之心 编辑&#xff1a;泽南 视觉模型有很大的提升空间&#xff0c;研究者们在以往的 LLM 中学到经验教训&#xff0c;认为扩展是一个很有前途的方法。来自谷歌的研究者将 ViT 扩展到 22B 参数量&#xff0c;这是迄今为止报道的最大的视觉主干。 与自然语言处理类…

Android之Android studio实现智能聊天机器人

Android实现智能聊天机器人 最近在做项目中,突然来了灵感,要做一个聊天机器人.聊天机器人在很多大型App上都有使用,比如QQ群里的QQ小冰,淘宝京东等App上在没有人工客服之前会有机器人跟你聊天,根据你发的问题关键词,向你推荐一些答案,可以省下很多人工的时间以及减小服务器的压…

图像复原之维纳滤波

基本原理 图像复原是图像处理的重要组成部分&#xff0c;由于图像在获取和传输过程中通常不可避免的要受到一些噪声的干扰&#xff0c;因此在进行其他图像处理以及图像分析之前&#xff0c;应该尽量将图像复原到其原始真实状态。图像复原的关键问题是在于建立退化模型。图像退…