优化变量和表达式支持的运算
支持的运算符号
优化变量和表达式是基于问题的优化工作流的基本元素。对于优化变量和表达式的合法运算:
x
和y
表示任意大小的优化数组(通常大小相同)。x2D
和y2D
代表二维优化数组。a
是一个标量数字常数。M
是一个常数数字矩阵。c
是一个与x
大小相同的数字数组。
警告
基于问题的方法不支持在目标函数、非线性等式和非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。
返回优化表达式的运算
这些对优化变量或表达式的运算返回一个优化表达式。
类别 | 运算 | 示例 |
---|---|---|
算术 | 加上常数 | x+c 或 c+x |
加上变量 | x+y | |
一元加法 | +x | |
减去一个常数 | x-c | |
减去变量 | x–y | |
一元减法 | -x | |
乘以常数标量 | a*x 或 a.*x 或 x*a 或 x.*a | |
除以常数标量 | x/a 或 x./a 或 a\x 或 a.\x | |
逐点乘以数组 | c.*x 或 x.*c | |
逐点除以数组 | x./c 或 c.\x | |
逐点乘以变量 | x.*y | |
矩阵乘以变量 | x2D*y2D ,或 x*y (当 x 或 y 为标量时) | |
矩阵乘以变量和矩阵 | M*x2D 或 x2D*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.' |
串联 | cat 、vertcat 和 horzcat | |
重构 | reshape(x,[10 1]) | |
创建对角矩阵或获取矩阵的对角元素 | diag(x2D) ,其中 x2D 是矩阵或向量,包括语法 diag(x2D,k) | |
初等函数 | 方阵的幂 | x2D^a |
逐点求幂 | x.^a | |
平方根 | sqrt (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 维数字索引(包括冒号和 end ) | x(3,5:end) |
N 维逻辑索引 | x(ind) ,其中 ind 是一个逻辑数组 |
N 维字符串索引 | x(str1,str2) ,其中 str1 和 str2 是字符串 |
N 维混合索引(数值索引、逻辑索引、冒号、end 和字符串的组合) | x(ind,str1,:) |
线性数字索引(包括冒号和 end ) | x(17:end) |
线性逻辑索引 | x(ind) |
线性字符串索引 | x(str1) |
优化表达式的运算
优化表达式支持优化变量支持的所有运算,并返回优化表达式。此外,您可以使用数值索引、逻辑索引、字符串索引或线性索引(包括用于数值索引或线性索引的冒号和 end
运算符)对优化表达式进行索引或分配。
返回约束表达式的运算
约束是任意两个可比较的表达式,其中包含以下比较运算符之一: ==
、<=
或 >=
。可比较的表达式具有相同的大小,或者其中一个表达式必须是标量,即大小为 1×1。有关示例,请参阅约束和方程的表达式。
对优化变量和表达式应用未公开的运算
某些函数和运算在内部仅调用公开支持的运算。在这些情况下,您可以从这些函数或运算中获得合理的结果。例如,目前 squeeze
在内部调用 reshape
,后者是一个公开支持的运算。因此,如果您对一个优化变量使用 squeeze
,将可以获得一个合理的表达式。
不支持的函数和运算需要 fcn2optimexpr
如果您的目标函数或非线性约束函数不受支持,请使用 fcn2optimexpr
将 MATLAB® 函数转换为优化表达式。有关示例,请参阅将非线性函数转换为优化表达式或 fcn2optimexpr
函数参考页。
另请参阅
OptimizationExpression
| OptimizationVariable
| fcn2optimexpr