CVX介绍——函数参考指南

本文介绍了CVX中可用的各种运算符、函数、集合和命令,包括算术运算符、内置函数及其使用限制。特别强调了非线性函数如ABS、exp、log、norm等的应用场景与注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

= =好困啊看凸优化,明天接着看
http://web.cvxr.com/cvx/doc/funcref.html这是英文原版= =可以参照阅读效果更佳哦 ==
在本节中,我们将描述您可能在CVX中遇到的每个运算符,函数,集合和命令。 在某些情况下,底层解算器的局限性会对其使用产生某些限制或警告:

标有匕首的函数(†)不受本地CVX使用的解算器支持。 它们使用逐次逼近方法进行处理,该方法对基础求解器进行多次调用,从而达到相同的最终精度。 如果您使用这些功能之一,将会被警告使用逐次逼近。 这种技术在逐次逼近法中进一步讨论。 正如本节所讨论的,这是一个在许多情况下运作良好的实验方法,但不能得到保证。
涉及幂(例如,x ^ p)和pp-范数(例如norm(x,p))的函数用双匕首(‡)标记。 当pp是一个有理数时,CVX恰好表示这些函数。 对于p的非理性值(个人理解为无理数),选择附近的理性(有理数)。 有关两种情况如何处理的详细信息,请参见http://web.cvxr.com/cvx/doc/advanced.html#powerfunc

算术运算符
Matlab的标准算术运算用于加法,减法,乘法,,除法/ ./ \。和幂指数^。^已经被重载在CVX中适用 - 也就是说,只要它们的使用符合 标准的数学和Matlab惯例以及DCP规则集。 例如:

如果两个CVX表达式具有相同的维度(或者是标量)并且具有相同的曲率(即,它们都是凸,凹或仿射),则可以将它们加在一起。
CVX表达式可以乘以或除以标量常量。 如果常数是正数,则曲率保持不变; 如果是负值,则曲率反转。
仿射列向量CVX表达式可以乘以适当维数的常数矩阵; 或者它可以被一个适当维数的非奇异常数矩阵分开。

当然,许多其他的组合也是可能的。 指数运算符^的使用是有限的; 请参阅下面的Nonlinear中的power的定义。

Matlab的基本矩阵操作和算术运算已经扩展到CVX表达式,包括:

连接:[A,B; C,D]
索引:x(n + 1:结尾),X([3,4],:)等
索引分配,包括删除:y(2:4)= 1,Z(1:4,:) = []等
转置和共轭转置:Z.',y'

内置函数

Linear线性
许多Matlab的基本线性和双线性函数或者自动地用cvx表达式工作,或者扩展到cvx表达式,包括:conj,conv,cumsum,diag,dot,find,fliplr,flipud,flipdim,horzcat,hankel,ipermute,kron ,意思是,permute,repmat,重塑,rot90,稀疏,总和,追踪,tril,triu,toeplitz,vertcat。

大多数应该像使用数字表达式一样来处理CVX表达式。 执行诸如conv,dot或kron之类的cumsum,sum或multiplication之类的某种求和的那些只能按照有纪律的凸规划规则来使用。 例如,kron(X,Y)只有在X或Y是常量时才有效; 而轨迹(Z)只有沿着对角线的元素具有相同的曲率才有效。

Nonlinear非线性
ABS

实和复(复杂指复数,前面出现很多次,都没有修改 = =!)数组的绝对值。凸。
†exp

指数。 凸和不减
†log

对数。 凹而不减。
max

最大值。 凸和不减
min

最小。 凹而不减。
norm

真和复的向量和矩阵的规范(范数)。凸。 因此,函数紧跟Matlab惯例。 因此,单参数版本范数(x)计算矢量的2-范数和矩阵的2-范数(最大奇异值)。 双参数版本规范(x,p)支持如下:

*‡对于矢量,所有值p≥1p≥1都被接受。
对于矩阵,p必须是1,2,Inf或'Fro'。*

polyval

多项式评估。 polyval(p,x),其中p是一个长度为n的向量,计算

p(1) * x.^(n-1) + p(2) * x.^(n-2) + ... + p(n-1) * x + p(n)

这个功能可以通过两种方式在CVX中使用:

如果p是变量,x是常量,则polyval(x,p)计算p的元素的线性组合。 该组合必须满足DCP规则的添加和缩放。
如果p是常数而x是变量,则polyval(x,p)构造变量x的多项式函数。 多项式必须是仿射的,凸的或凹的,并且x必须是真实的和仿射的。

‡power(x,p)

x ^ p和x.^ p,其中x是一个实数变量,而p是一个实常数。 对于x ^ p,x和p都必须是标量。 只有那些合理而明确地解释为凸或凹的p值才被接受:

P =0。 不变。 x.^p被相同地处理1。
0<P<1。 凹。 参数x必须是凹的(或仿射的),并且被隐含地约束为非负的。
P =1。仿射。 x.^ p简单地是x。
p∈{2,4,6,8,...}。凸。 参数xx必须是仿射的。
p> 1 ,p∉{2,3,4,5,...} 。凸。 参数x必须是仿射的,并且被隐含地约束为非负的。

pp的负和奇整数值是不允许的,但是在下一节中可以看到pow_p,pow_pos和pow_abs函数的有用选择。
† power(p,x)
p.^ x和p ^ x,其中p是一个实常数,x是一个实变量。 对于p ^ x,p和x必须是标量。 p的有效值包括:

p∈{0,1}。 不变。
0<P<1。 凸和不增加; x必须凹入。
P>1。 凸和不减 x必须是凸的。

p的负值是不允许的。

std
标准偏差。凸。

sqrt
平方根。 隐含地限制它的论点(个人理解:定义域)是非负的。 凹而不减。

var
方差。凸。

New functions
即使这些函数是专门为CVX开发的,但它们在CVX规范之外也可以使用数字参数。
后面的函数量很大,在文件说明中也有详尽的表达式,需要的可以看看= =这里暂时不写了

### 使用 MATLAB 的 CVX 工具解决混合整数线性规划问题 #### 什么是混合整数线性规划? 混合整数线性规划(Mixed Integer Linear Programming, MILP)是一种特殊的优化问题,其目标是在满足一组线性约束条件下最小化或最大化一个线性目标函数。MILP 中的部分决策变量被限制为整数值。 在 MATLAB 中,可以利用 `CVX` 工具包来求解此类问题。然而需要注意的是,虽然 CVX 支持部分类型的整数约束,但它本身并不完全支持所有的 MILP 功能[^1]。因此,在实际应用中可能需要结合其他工具或者扩展功能实现完整的解决方案。 --- #### 如何设置 CVX 来处理混合整数线性规划? 以下是通过 CVX 实现的一个简单示例: 假设我们有以下的混合整数线性规划问题: - **目标函数**: \( \text{minimize } c^T x \) - **约束条件**: - \( Ax \leq b \) - 部分变量需为整数 对应的 MATLAB 和 CVX 编码如下所示: ```matlab % 定义参数矩阵和向量 A = [-1 1; % 不等式系数矩阵 1 3]; b = [2; % 右端项 5]; c = [1; 2]; % 目标函数系数 % 开始 CVX 求解过程 cvx_begin variable x(2) integer % 定义两个整数变量 minimize(c' * x) % 设置目标函数 subject to % 添加约束条件 A * x <= b; end % 输出结果 disp('Optimal solution:'); disp(x); disp('Objective value:'); disp(cvx_optval); ``` 上述代码片段展示了如何定义变量以及指定它们应为整数类型 (`integer`)。注意这里的关键字 `variable x(2) integer` 明确指出这两个变量都必须是整数[^4]。 如果只是某些特定变量需要作为整数对待,则可以在声明时单独标注这些变量为整数形式。例如对于更复杂的场景下既有连续又有离散变量的情况可分别设定不同类型。 --- #### 处理常见错误提示 当尝试运行含有复杂表达式的程序时可能会遇到一些典型错误消息。例如,“Cannot perform the operation: {real affine} ./ {positive constant}" 这类警告通常是因为违反了 DCP (Disciplined Convex Programming)规则所致[^3]。为了规避这些问题应当遵循以下原则: - 替代非法操作符:如前所述,幂运算应该改写成 `pow_pos()` 函数的形式; - 确保所有参与计算的对象均符合凸分析的要求。 具体而言,任何涉及非线性的变换都需要特别小心验证是否能够保持整体结构仍属于凸集范畴之内。 --- #### 结果解释与评估标准 执行完毕之后可以获得几个重要指标用于判断最终解答的质量: - `fval`: 表明找到的最佳目标值大小。 - `exitflag`: 正数意味着成功完成迭代流程达到局部极小点;零代表到达预设的最大步数前未能充分逼近最优解;负号则暗示过程中出现了异常状况致使无法继续下去[^5]。 此外还有额外字段记录整个演算期间经历的具体细节可供进一步审查之用。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值