熟悉半定编程 (SDP) 的人都知道,在上面关于集合成员的讨论中,使用集合semidefinite(n)的约束在实践中通常使用线性矩阵不等式(LMI)表示。例如,给定、约束表示;也就是说,即X为正半定。

CVX 提供了一种特殊的 SDP 模式,允许在 CVX 模型中使用 Matlab 的标准不等式运算符 >=, <=表示LMI。为了使用它,人们只需在模型前以cvx_begin sdp或 cvx_begin SDP语句开始,而不是简单地cvx_begin。

当 SDP 模式处于启用状态时,CVX 会以不同的方式解释某些不等式约束。具体而言:

  • 等式约束的解释相同(,按元素)。

  • 涉及向量和标量的不等式约束的解释相同;,按元素。

  • 涉及非方阵的不等式约束是不允许的;尝试使用它们会导致错误。如果您希望对矩阵 X 和 Y 进行真正的逐元素比较,请使用向量化运算 X(:) <= Y(:) 或 vec( X ) <= vec( Y ))。(vec 是 CVX 提供的等效于冒号操作的函数。)

  • 涉及实方阵的不等式约束解释如下:

    X >= Y becomes X - Y == semidefinite(n)
    X <= Y becomes Y - X == semidefinite(n)

    如果任何一侧是复数的,则不等式解释如下:

    X >= Y becomes X - Y == hermitian_semidefinite(n)
    X <= Y becomes Y - X == hermitian_semidefinite(n)
  • 还有一个额外的限制:X 和 Y 必须具有相同的大小,或者其中一个必须是标量零。例如,如果 X 和 Y 是大小为 n 的矩阵,
    X >= 1 or 1 >= Y 非法
    X >= ones(n,n) or ones(n,n) >= Y 合法
    X >= 0 or 0 >= Y 合法

    实际上,CVX 对 LMI 约束的不等式运算符执行更严格的解释。

  • 请注意,LMI 约束在其输入上强制执行对称性(实数或埃尔米特,视情况而定)。与SDPSOL不同,CVX不会为您提取对称部分:您必须注意确保对称性。由于 CVX 支持对称矩阵的声明,因此这相当简单。如果 CVX 无法确定 LMI 是否对称到合理的数值容差范围内,则会发出警告。我们提供了一个函数 sym(X),用于提取方阵的对称部分;即 sym(X) = 0.5*(X+X')。

  • 如果提供了双变量,则将应用于转换后的等式约束。如果找到最优点,它将被赋予一个正半定值。

因此,例如,在文件examples/closest_toeplitz_sdp.m中找到的CVX模型,

cvx_beginvariable Z(n,n) hermitian toeplitzdual variable Qminimize( norm( Z - P, 'fro' ) )Z == hermitian_semidefinite( n ) : Q;
cvx_end

也可以这样写:

cvx_begin sdpvariable Z(n,n) hermitian toeplitzdual variable Qminimize( norm( Z - P, 'fro' ) )Z >= 0 : Q;
cvx_end

CVX示例库中的许多其他示例使用半定约束;并且它们都使用SDP模式。要找到它们,只需使用您喜欢的文件搜索工具在 examples/子目录树中搜索文本cvx_begin sdp。

由于半定编程很受欢迎,有些人可能想知道为什么SDP模式不是默认行为。这样做的原因是,我们非常重视保持Matlab的原生行为与CVX行为之间的一致性。使用 >=、<=、><运算符来创建 LMI 偏离了该理想。例如,在上面的示例中,表达式 Z >= 0 将变量 Z 约束为正半定。但是,在求解模型并将 Z 替换为数值后,表达式 Z >= 0 将检验 Z 的元素非负性。要验证 Z 是否实际上是正半定,必须执行类似 min(eig(Z)) >= 0 的测试。

CVX用户指南之半定编程模式相关推荐

  1. CVX用户指南之基础

    cvx_begin和cvx_end 所有 CVX 模型前面必须有命令cvx_begin,并以命令cvx_end终止.所有变量声明.目标函数和约束都应介于两者之间.cvx_begin命令可能还包括一个以 ...

  2. CVX用户指南之简介

    什么是 CVX? ‎CVX 是一个建模系统,用于构建和求解‎‎规范凸程序‎‎ (DCP).‎CVX 支持多种标准问题类型,包括线性和二次型‎‎程序‎‎(LP/QPs).二阶锥形程序 (SOCP) 和半 ...

  3. matlab 半正定规划,CVX介绍——半定规划模式

    这些CVX介绍,主要是翻译CVX官网上面的使用手册,主要目的还是记录吧= =方便查阅 再给出一遍地址http://web.cvxr.com/cvx/doc/sdp.html 可以进去进行英文的对照. ...

  4. LabVIEW CompactRIO 开发指南 3 选择CompactRIO编程模式

    第二章 选择CompactRIO编程模式 第一章中介绍的CompactRIO架构为我们提供了通过LabVIEW FPGA定制FPGA硬件或使用NI CompactRIO扫描模式来实现I/O的选项.如果 ...

  5. CVX用户指南之快速入门

    安装 CVX(请参阅安装)后,可以通过在 Matlab 脚本或函数中输入 CVX 规范,或直接从命令提示符开始使用它.为了将 CVX 规范与周围的 Matlab 代码区分开来,在它们前面加上语句 cv ...

  6. CVX用户指南之DCP规则集

    CVX 强制执行规范凸编程规则集(简称 DCP 规则集)规定的约定.CVX 每当遇到违反任何规则的行为时,都会发出一条错误消息,因此在开始构建模型之前了解这些规则非常重要.这些规则来自凸分析的基本原理 ...

  7. IA-32系统编程指南 - 第三章 保护模式的内存管理【1】

    第三章 保护模式的内存管理[1] [作者:lion3875 原创文章 参考文献<Intel 64 and IA-32 system programming guide>] IA-32保护模 ...

  8. CVX 工具箱(安装及用户指南)

    目录 Introducition 下载地址 User Guide 安装CVX步骤 Quick Start 一个实例 CVX工具箱学习教程 Introducition CVX是一个基于matlab的凸优 ...

  9. 并发编程 – Concurrent 用户指南

    转载自 并发编程 – Concurrent 用户指南 1. java.util.concurrent – Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.c ...

最新文章

  1. swift3.0阿里百川反馈
  2. 斯坦福2021版图机器学习课程完结,视频、PPT全放送,大神主讲
  3. 命令行开启一个unity实例和执行其中的脚本方法的使用和注意
  4. 从零开始学习python编程-Python3.5从零开始学 PDF 下载
  5. word字间距异常处理方式
  6. 二次元《尤里国简介》
  7. 人民大学赵鑫:基于知识与推理的序列化推荐技术研究
  8. 导航条UIBarButtonItem添加图片,如何避免渲染
  9. windows 10安装两个eclipse
  10. C语言画直线~Bresenham方法
  11. 酒类电商1919获阿里巴巴20亿元战略投资,估值达70亿元
  12. 女生适合做软件开发工作吗?优势在哪里?
  13. 华为运营商级路由器配置示例 | IPv4静态路由
  14. 阿里年薪50WJAVA工程师转大数据学习路线!
  15. C#开发Android App--01--准备工具
  16. C++ 类型转换(static_cast、dynamic_cast、reinterpret_cast、const_cast)
  17. 微软CTO谈AI:逃不掉马拉松就准备好跑鞋!30秒自动化妆机;ChatGPT刷爆票圈;剪纸风格的AI绘画 | ShowMeAI资讯日报
  18. wdr7661散热问题_深入测评普联TL-WDR7661千兆版怎么样??比较好不好呀?
  19. 解决java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher类找不到的错误
  20. 案例1:使用awk提取文本案例2:awk处理条件案例3:awk综合脚本应用案例4:awk流程控制案例5:awk扩展应用

热门文章

  1. 【stata笔记】从规律混乱的字符串中提取某个类别的字符(以CGSS2010的地区变量为例)
  2. 10行代码教你用Python扫描Excel表格,自动生成条形码!
  3. 【爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】
  4. linux 打乱一个文本文件的所有行 命令
  5. ionic 3 安卓手机获取经纬度坐标
  6. 网址在线封装APK系统源码
  7. 20考研「数学二」真题+解析完整版
  8. stc12c5a60s2c语言程序,STC12C5A60S2单片机产生SPWM主程序C代码
  9. Python——(字符串)假设有一段英文,其中有单词中间的字母“i”误写为“I”,请编写程序进行纠正。
  10. MySQL基础知识(1)