cvx_begin和cvx_end
所有 CVX 模型前面必须有命令cvx_begin,并以命令cvx_end终止。所有变量声明、目标函数和约束都应介于两者之间。cvx_begin命令可能还包括一个以上的修饰符:
cvx_begin quiet
防止模型在求解时生成任何屏幕输出。
cvx_begin sdp
调用半定编程模式。
cvx_begin gp
调用几何编程模式。
这些修饰符可以在适当的时候组合使用;例如,cvx_begin sdp quiet 会调用 SDP 模式并静音求解器输出。
变量
所有变量都必须使用variable命令(或variables命令;见下文)声明,然后才能在约束或目标函数中使用。variable命令包括变量的名称、可选的维度列表以及一个或多个关键字,这些关键字提供有关变量内容或结构的其他信息。
变量可以是实或复标量、向量、矩阵或n-维度数组。例如
variable X
variable Y(20,10)
variable Z(5,5,5)
总共声明 326 个(标量)变量:一个标量 X、一个 20x10 矩阵 Y(包含 200 个标量变量)和一个 5x5x5 数组 Z(包含 125 个标量变量)。
变量声明还可以包含一个或多个关键字,以表示变量的各种结构或条件。例如,要声明复变量,请使用 complex 关键字:
variable w(50) complex
非负变量和对称/埃尔米特正半定 (PSD) 矩阵可以分别使用 nonnegative 和 semidefinite关键字指定:
variable x(10) nonnegative
variable Z(5,5) semidefinite
variable Q(5,5) complex semidefinite
在这个例子中,x 是一个非负向量,Z 是一个实对称的 PSD 矩阵,Q是一个复埃尔米特 PSD 矩阵。正如我们将在下面看到的,hermitian semidefinite 将是第三种情况的一种等效选择。
对于 MIDCP,integer 和 binary关键字分别用于声明整数和二进制变量:
variable p(10) integer
variable q binary
可以使用各种关键字来帮助构造具有矩阵结构的变量,例如对称性或带状。例如,代码段
variable Y(50,50) symmetric
variable Z(100,100) hermitian toeplitz
声明 Y 为50×50实对称矩阵变量,和 Z 为100×100 埃尔米特托普利茨矩阵变量。(请注意,hermitian关键字还指定矩阵是复的。)当前支持的结构关键字包括:
banded(lb,ub) diagonal hankel hermitian
skew_symmetric symmetric toeplitz tridiagonal
lower_bidiagonal lower_hessenberg lower_triangular
upper_bidiagonal upper_hankel upper_hessenberg upper_triangular
下划线实际上可以省略;因此,例如,lower triangular也是可以接受的。这些关键字不言自明,但有以下几个例外:
banded(lb,ub)
矩阵具有较低的带宽 lb 和较高的带宽 ub。如果 lb 和 ub 均为零,则生成对角矩阵。可以省略 ub,在这种情况下,它被设置为等于 lb。例如, banded(1,1) (或 banded(1)) 是一个三对角矩阵。
upper_hankel
矩阵是 Hankel(即沿反对角线不变),在中心反对角线下方为零,即i+j>n+1.
当提供多个关键字时,生成的矩阵结构由交集确定。例如,symmetric tridiagonal是有效组合。也就是说,CVX确实拒绝诸如symmetric lower_triangular的组合,当存在更合理的替代方案时 - 在这种情况下是diagonal。此外,如果关键字完全冲突,使得没有非零矩阵满足所有关键字,则会导致错误。
特定于矩阵的关键字可应用于n-维度数组:数组的