CVX用户指南之参考指南

本文档详细介绍了在CVX中使用的一系列运算符、函数和命令,包括线性和非线性函数,如绝对值、指数、对数、范数等。CVX对这些函数进行了重载和扩展,以支持凸优化问题。一些函数如exp、log、power等受到特定限制或需要逐次逼近方法处理。此外,还讨论了各种矩阵操作、集合和命令,如cvx_begin、cvx_end等,用于构建和解决CVX模型。

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

在本节中,我们将介绍您在 CVX 中可能遇到的每个运算符、函数、集合和命令。在某些情况下,求解器的局限对其使用施加了某些限制或警告:

  • 用†标记的函数本身不受 CVX 使用的求解器的支持。包含这些函数的模型将由 Mosek 有效求解,Mosek 是唯一支持构建这些函数的指数锥的求解器。对于所有其他求解器,使用逐次逼近方法处理这些函数,该方法对求解器进行多次调用,从而实现相同的最终精度。如果您的问题需要使用逐次逼近法,则会发出警告。这种技术在逐次逼近法中进一步讨论。正如本节所讨论的,这是一种实验性方法,在许多情况下效果很好,但不能保证。
  • 涉及幂(例如 x^p)和p-范数(例如,norm(x,p))用‡标记。当p是一个有理数,CVX 可以准确表示这些函数。对于 p 的无理数值,将选择最近的有理数。有关如何处理这两种情况的详细信息,请参阅幂函数和 p 范数

算术运算符

Matlab 的标准算术运算:加+、减 -、乘* .*、除 / ./ \ .\ 和幂 ^ .^  为了在 CVX 中工作已经重载,只要它们的使用与标准数学和 Matlab 约定以及 DCP 规则集一致。例如:

  • 如果两个 CVX 表达式具有相同的维度(或者其中一个是标量表达式)并且具有相同的曲率(,两者都是凸、凹或仿射),则可以将它们相加。
  • CVX 表达式可以乘以或除以标量常数。如果常数为正,则保留曲率;如果为负,则曲率反转。
  • 仿射列向量CVX表达式可以乘以适当维度的常数矩阵;或者它可以被左除以适当维度的非奇异常数矩阵。

当然,还有许多其他组合是可能的。幂运算符 ^ .^ 的使用受到一定限制;请参阅下面非线性中幂的定义。

Matlab 的基本矩阵操作和算术运算也已扩展为可与 CVX 表达式配合使用,包括:

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

内置函数

线性

Matlab 的许多基本线性和双线性函数要么自动与 cvx 表达式一起工作,要么已经得到扩展包括:conj、conv、cumsum、diag、dot、find、fliplr、flipud、flipdim、horzcat、hankel, ipermute, kron, mean, permute, repmat, reshape, rot90, sparse, sum, trace, tril, triu, toeplitz, vertcat.

大多数对CVX表达式的行为与对数值表达式的行为相同。那些执行某种求和(如 cumsum、sum)或乘法,(如 conv、dot 或 kron)只能根据规范凸编程规则使用。例如,kron(X,Y) 仅在 X 或 Y 为常量时才有效; trace(Z) 仅当沿对角线的元素具有相同的曲率时才有效。

非线性

abs

实数组和复数组的绝对值。凸。

†exp

指数。凸和非递减。

†log

对数。凹和非递减。

max

最大。凸和非递减。

min

最低。凹和非递减。

norm

实/复向量和矩阵的范数。凸。这个函数严格遵循 Matlab 约定。因此,单参数norm(x)计算向量的2范数,计算矩阵的2范数(最大奇异值)。双参数 norm(x,p)支持如下:

  • ‡ 对于向量,p≥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(p,x)计算 p 元素的线性组合。组合必须满足求和和缩放的 DCP 规则。
  • 如果 p 是常量,x 是变量,polyval(p,x)构造变量 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,.。。}.凸。参数x必须是仿射。
  • p > 1,p\not\in\{2,3,4,5,...\}.凸。参数x必须是仿射,并且隐式约束为非负数。

不允许负和奇整数p,但请参阅下一节中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

方差。凸。

新函数

尽管这些函数是专门为 CVX 开发的,但如果提供数值参数,它们也可以在 CVX 规范之外工作。

avg_abs_dev

关于平均值\mu(x)的平均绝对偏差.凸。

f_{\text{aad}}(x) = \frac{1}{n} \sum_{i=1}^n |x_i-\mu(x)| = \frac{1}{n} \sum_{i=1}^n \left| x_i - {\textstyle\frac{1}{n}\sum_i x_i}\right| = \frac{1}{n}\left\| (I-\tfrac{1}{n}\textbf{1}\textbf{1}^T)x \right\|_1.

avg_abs_dev_med

关于中位数\mathop{\textrm{m}}(x)的平均绝对偏差.凸

f_{\text{aadm}}(x) = \frac{1}{n} \sum_{i=1}^n |x_i-\mathop{\textrm{m}}(x)| = \inf_y \frac{1}{n} \sum_{i=1}^n |x_i-y|

det_inv

对称(或埃尔米特)正定矩阵逆的行列式,\det X^{-1},它与特征值倒数的积相同。当在 CVX 规范中使用时,det_inv将矩阵约束为对称(如果实数)或埃尔米特(如果复数)和正半定。当与数值参数一起使用时,如果不满足这些约束,det_inv返回 +Inf。凸。

det_rootn

半定矩阵行列式的n次根,(\det X)^{1/n}.当在 CVX 规范中使用时,det_rootn将矩阵约束为对称(如果实数)或埃尔米特矩阵(如果复数)和正半定。当与数值参数一起使用时,如果不满足这些约束,det_rootn返回 -Inf。凹。

det_root2n

半定矩阵行列式的2n次根;,det_root2n(X)=sqrt(det_rootn(X)).凹。仅用于向后兼容目的。

† entr

熵函数:entr(x)=-x.*log(x)。凹。当使用具有负元素的常量参数调用时,返回 -Inf。

geo_mean

向量的几何平均值,\left( \prod_{k=1}^n x_k \right)^{1/n}在 CVX 规范中使用时,geo_mean将向量的元素限制为非负数。当与数值参数一起使用时,如果任何元素为负数,geo_mean返回 -Inf。凹和递增。

inv_pos

正部分的倒数,1/\max\{x,0\}.在 CVX 规范内部,施加约束,使其参数为正。CVX 规范外部,如果x\leq 0返回+\infty。凸和递减。

† kl_div

Kullback-Leibler距离:

f_{\text{kl}}(x,y) \triangleq \begin{cases} x\log(x/y)-x+y & x,y>0 \\ 0 & x=y=0 \\ +\infty & \text{otherwise} \end{cases}

凸。CVX 规范外部,如果参数不在域中返回+\infty

lambda_max

实对称或复埃尔米特矩阵的最大特征值。在 CVX 内部,施加约束保证参数是对称的(如果是实数)或埃尔米特的(如果是复数)。凸。

lambda_min

实对称或复埃尔米特矩阵的最小特征值。在 CVX 内部,施加约束保证参数是对称的(如果是实数)或埃尔米特的(如果是复数)。凹。

lambda_sum_largest(X,k)

实对称或复埃尔米特矩阵的k个最大特征值之和。在 CVX 内部,施加约束保证参数是对称的(如果是实数)或埃尔米特的(如果是复数)。凸。

lambda_sum_smallest(X,k)

实对称或复埃尔米特矩阵的k个最小特征值之和。在 CVX 内部,施加约束保证参数是对称的(如果是实数)或埃尔米特的(如果是复数)。凹。

log_det

正定矩阵行列式对数,\log \det(X),当在 CVX 规范中使用时,log_det将其参数限制为对称(如果实数)或埃尔米特(如果复数)和正定。使用数值参数时,如果不满足这些约束,log_det返回 -Inf。凹。

‡ log_normcdf(x)

标准正态随机变量累积分布函数的对数。凹和递增。

† log_prod(x)

当x是整数\log\prod_i x_i;否则-\infty。凹和非递增。等效于 sum_log(x)。

†log_sum_exp(x)

x 的元素指数之和的对数。凸和非递减。

logsumexp_sdp

log-sum-exp函数的多项式近似,具有全局绝对精度。这可用于估计log-sum-exp函数,而无需使用逐次逼近法。

matrix_frac(x,Y)

x^TY^{-1}x。在 CVX 中,施加约束保证Y是对称的(或埃尔米特)和正定的;在 CVX 外部,返回+∞除非Y=Y^T\succ 0。凸。

norm_largest(x,k)

对于实和复向量,返回向量 x 中k 个最大幅值的总和。凸。

norm_nuc(X)

实或复矩阵 X 的奇异值之和。凸。

‡ norms(x,p,dim), norms_largest(x,k,dim)

沿矩阵或 N维数组的指定维度计算向量范数。对于范数之和和最大范数问题很有用。凸。

poly_env(p,x)

计算 p 描述的多项式(在polyval意义上)的凸包络或凹包络的值。p 必须是一个实数常数向量,其长度 n 为 0、1、2、3 或其他奇长度;并且 x 必须是实数和仿射。p 的第一个非零元素的符号决定了是构造凸(正)包络还是凹(负)包络。

pos(x)

\max\{x,0\},用于实数x.凸和递增。

‡ pow_abs(x,p)

|x|^p用于x\in\mathbf{R}x\in\mathbf{C}p\geq 1.凸。

‡ pow_pos(x,p)

\max\{x,0\}^p用于x\in\mathbf{R}p\geq 1.凸和非递减。 

‡ pow_p(x,p)

用于x\in\mathbf{R}和实常数p,计算幂函数的非负凸分支和凹分支:

\begin{array}{ccl} p\leq 0 & f_p(x) \triangleq \begin{cases} x^p & x > 0 \\ +\infty & x \leq 0 \end{cases} & \text{convex, nonincreasing} \\ 0 < p \leq 1 & f_p(x) \triangleq \begin{cases} x^p & x \geq 0 \\ -\infty & x < 0 \end{cases} & \text{concave, nondecreasing} \\ p \geq 1 & f_p(x) \triangleq \begin{cases} x^p & x \geq 0 \\ +\infty & x < 0 \end{cases} & \text{convex, nonmonotonic} \end{array}

prod_inv(x)

当x为正数时,\prod_i x_i^{-1};否则 +∞. 凸和非递增.

quad_form(x,P)

对于实x和对称P,x^TPx对于复x和埃尔米特P,x^HPx.当P固定和正半定,凸;当P固定和负半定,凹;

注意:二次函数(如quad_form,sum_square通常可以被norm函数替换,而不会牺牲等价性。出于数值原因,此替代公式是首选。有关详细信息,请参阅消除二次型

quad_over_lin(x,y)

对于x \in \mathbf{R}^ny >0x^Tx/y;对于x \in \mathbf{C}^ny>0x^*x/y。在 CVX 规范中,添加约束y>0. CVX 规范之外,如果y≤0,返回+∞.凸,y上递减.

quad_pos_over_lin(x,y)

对于x \in \mathbf{R}^ny >0,sum_square_pos( x )/y .凸,x上递增,y上递减.

†rel_entr(x)

标量相对熵;rel_entr(x,y)=x.*log(x/y).凸。

sigma_max

实或复矩阵的最大奇异值。与norm相同。凸。

square

对于x\in\mathbf{R}x^2.凸。

square_abs

对于x\in\mathbf{R}x\in\mathbf{C}|x|^2

square_pos

对于x\in\mathbf{R}\max\{x,0\}^2.凸和递增。 

sum_largest(x,k)

实向量x的k个最大值之和, 对于x.凸和非递减。

† sum_log(x)

当x为正数时,\sum_i\log(x_i); 否则−∞. 凹和非递减。

sum_smallest(x,k)

k个最小值之和,等效于 -sum_largest(-x,k)。凹和非递减。

sum_square

等效于 sum(square(x)),但效率更高。凸。仅适用于实值。

sum_square_abs

等效于 sum(square_abs(x)),但效率更高。凸。

sum_square_pos

等效于 sum(square_pos(x)),但效率更高。仅适用于实值。凸和递增。

trace_inv(X)

SPD 矩阵 X 逆的迹,它与特征值的倒数之和相同。凸。在 CVX 之外,如果参数不是正定的,则返回 +Inf。

trace_sqrtm(X)

正半定矩阵 X 的平方根的迹。这与特征值的平方根之和相同。凹。在 CVX 外部,如果参数不是正半定,则返回 +Inf。

集合

CVX目前支持以下集合;在每种情况下,n 都是正整数常量。

nonnegative(n)

R^n_+ \triangleq \left\{\,x\in\mathbf{R}^n\,~|~\,x_i\geq 0,~i=1,2,\dots,n\,\right\}

simplex(n)

R^n_{1+} \triangleq \left\{\,x\in\mathbf{R}^n\,~|~\,x_i\geq 0,~i=1,2,\dots,n,~\textstyle\sum_ix_i=1\,\right\}

semidefinite(n)

\mathbf{S}^n_+ \triangleq \left\{\,X\in\mathbf{R}^{n\times n}\,~|~\,X=X^T,~X\succeq 0\,\right\}

hermitian_semidefinite(n)

\mathbf{H}^n_+ \triangleq \left\{\,Z\in\mathbf{C}^{n\times n}\,~|~\,Z=Z^H,~Z\succeq 0\,\right\}

nonneg_poly_coeffs(n)

\mathbf{P}_{+,n} \triangleq \left\{\,p\in\mathbf{R}^n[n+1]\,~|~\,\sum_{i=0}^n p_{i+1} x^{n-i} \geq 0 ~ \forall x\in\mathbf{R}\,\right\}

convex_poly_coeffs(n)

\mathbf{E} \triangleq \text{cl}\left\{\,(x,y,z)\in\mathbf{R}\times\mathbf{R}\times\mathbf{R}\,~|~\,y>0,~ye^{x/y}\leq z\,\right\}

exp_cone

\mathbf{E} \triangleq \text{cl}\left\{\,(x,y,z)\in\mathbf{R}\times\mathbf{R}\times\mathbf{R}\,~|~\,y>0,~ye^{x/y}\leq z\,\right\}

geo_mean_cone(n)

\mathbf{G}_n \triangleq \text{cl}\left\{\,(x,y)\in\mathbf{R}^n\times\mathbf{R}^n\times\mathbf{R}^n\,~|~\,x\geq 0,~(\prod_{i=1}^n x_i)^{1/n} \geq y\,\right\}

命令

cvx_begin

开始新的 CVX 模型。如果模型已在进行中,它将发出警告并清除它。有关完整说明,请参阅cvx_begin和cvx_end,包括控制求解器输出、SDP 模式、GDP 模式等关键字。

cvx_clear

清除正在构造的任何模型。当出现错误并且必须从头开始时很有用。虽然当模型在进行中时,cvx_begin在调用时发出警告,但cvx_clear是静默的。

cvx_end

表示 CVX 模型的结束。在典型使用中,这会指示 CVX 开始求解过程。请参阅cvx_begin和cvx_end

cvx_expert

控制在采用需要使用逐次逼近的模型时发出警告;请参阅逐次逼近法更多详细信息。

cvx_power_warning

控制 CVX 在构建涉及有理幂函数的模型期间是否以及何时发出警告(即 x^p,其中 x 是变量,p 是常量);请参见幂函数和 p 范数

cvx_precision

控制求解器精度;请参阅控制精度

cvx_quiet

在求解过程中启用或禁用屏幕输出;请参阅控制屏幕输出。另请参阅cvx_begin和cvx_end,了解较新的首选语法cvx_begin quiet。

cvx_save_prefs

将cvx_expert、cvx_power_warning、cvx_precision和cvx_solver的当前状态保存到磁盘,以便在退出和重新启动 MATLAB 时保留其值。该文件保存在 MATLAB 的首选项目录中,可以通过键入 prefdir 命令找到该目录。

cvx_setup

用于安装和配置 CVX 的安装脚本;请参阅安装

cvx_solver

选择求解 CVX 模型时要使用的求解器;请参见选择求解器

cvx_solver_settings

允许用户向CVX不支持的求解器提供高级的、特定于求解器的设置;请参阅高级求解器设置

cvx_version

打印有关 CVX、Matlab 和操作系统的当前版本的信息。提交错误报告时,请包含此命令的输出。

cvx_where

返回安装 CVX 的目录。

dual variable, dual variables

创建一个或多个与当前模型中的约束联系的对偶变量;请参阅对偶变量

expression, expressions

创建一个或多个表达式持有者;请参见赋值和表达式持有者

maximise, maximize

指定最大化目标;请参阅目标函数

minimise, minimize

指定最小化目标;请参阅目标函数

variable, variables

创建一个或多个变量以在当前 CVX 模型中使用;请参阅变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值