Main Content

优化变量和表达式支持的运算

支持的运算符号

优化变量和表达式是基于问题的优化工作流的基本元素。对于优化变量和表达式的合法运算:

  • xy 表示任意大小的优化数组(通常大小相同)。

  • x2Dy2D 代表二维优化数组。

  • a 是一个标量数字常数。

  • M 是一个常数数字矩阵。

  • c 是一个与 x 大小相同的数字数组。

警告

基于问题的方法不支持在目标函数、非线性等式和非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。

返回优化表达式的运算

这些对优化变量或表达式的运算返回一个优化表达式。

类别运算示例
算术加上常数x+cc+x
加上变量x+y
一元加法+x
减去一个常数x-c
减去变量x–y
一元减法-x
乘以常数标量a*xa.*xx*ax.*a
除以常数标量x/ax./aa\xa.\x
逐点乘以数组c.*xx.*c
逐点除以数组x./cc.\x
逐点乘以变量x.*y
矩阵乘以变量x2D*y2D,或 x*y(当 xy 为标量时)
矩阵乘以变量和矩阵M*x2Dx2D*M
变量与数组的点积dot(x,c)dot(c,x)
变量的线性组合sum(x)sum(x,dim)(其中 dim 可以是标量或向量)、sum(x,'all')mean(x)mean(x,dim)(其中 dim 可以是标量或向量)以及 mean(x,'all')
数组元素的乘积prod(x)prod(x,dim)prod(x,'all')
矩阵的迹trace(x2D)
累计和或乘积cumsum(x)cumprod(x),包括语法 cumsum(x,dim)cumsum(_,direction)cumprod(x,dim)cumprod(_,direction)
差异diff(x),包括语法 diff(x,n)diff(x,n,dim)
串联与重构转置x'x.'
串联catvertcathorzcat
重构reshape(x,[10 1])
创建对角矩阵或获取矩阵的对角元素diag(x2D),其中 x2D 是矩阵或向量,包括语法 diag(x2D,k)
初等函数方阵的幂x2D^a
逐点求幂x.^a
平方根sqrt(x)
范数(欧几里得)

norm(x) 对应标量或向量x,计算 sqrt(sum(x.^2))。对于非向量 x 或其他范数类型,norm(x) 返回黑盒表达式

fcn2optimexpr(@norm,x,Analysis="off")
正弦sin(x)
余弦cos(x)
正割sec(x)
余割csc(x)
正切tan(x)
反正弦asin(x)
反余弦acos(x)
反正割asec(x)
反正割acsc(x)
反正切atan(x)
指数exp(x)
对数log(x)
双曲正弦sinh(x)
双曲余弦cosh(x)
双曲正割sech(x)
双曲余割csch(x)
双曲正切tanh(x)
反双曲正弦asinh(x)
反双曲余弦acosh(x)
反双曲正割asech(x)
反双曲余割acsch(x)
反双曲正切atanh(x)

从 R2024a 开始,优化变量和表达式支持 "like" 语法。有关支持此功能的函数列表,请参阅Class Support for Array-Creation Functions。有关如何使用此语法初始化优化表达式的示例,请参阅初始化优化表达式

注意

a^x 不支持优化变量 x

但是,如果将 a 限制为严格正数,则可以使用等效的 exp(x*log(a))

返回优化变量的运算

这些对优化变量的运算返回一个优化变量。

运算示例
N 维数字索引(包括冒号和 endx(3,5:end)
N 维逻辑索引x(ind),其中 ind 是一个逻辑数组
N 维字符串索引x(str1,str2),其中 str1str2 是字符串
N 维混合索引(数值索引、逻辑索引、冒号、end 和字符串的组合)x(ind,str1,:)
线性数字索引(包括冒号和 endx(17:end)
线性逻辑索引x(ind)
线性字符串索引x(str1)

优化表达式的运算

优化表达式支持优化变量支持的所有运算,并返回优化表达式。此外,您可以使用数值索引、逻辑索引、字符串索引或线性索引(包括用于数值索引或线性索引的冒号和 end 运算符)对优化表达式进行索引或分配。

返回约束表达式的运算

约束是任意两个可比较的表达式,其中包含以下比较运算符之一: ==<=>=。可比较的表达式具有相同的大小,或者其中一个表达式必须是标量,即大小为 1×1。有关示例,请参阅约束和方程的表达式

对优化变量和表达式应用未公开的运算

某些函数和运算在内部仅调用公开支持的运算。在这些情况下,您可以从这些函数或运算中获得合理的结果。例如,目前 squeeze 在内部调用 reshape,后者是一个公开支持的运算。因此,如果您对一个优化变量使用 squeeze,将可以获得一个合理的表达式。

不支持的函数和运算需要 fcn2optimexpr

如果您的目标函数或非线性约束函数不受支持,请使用 fcn2optimexpr 将 MATLAB® 函数转换为优化表达式。有关示例,请参阅将非线性函数转换为优化表达式fcn2optimexpr 函数参考页。

另请参阅

| |

相关主题