优化变量和表达式支持的运算
支持的运算符号
优化变量和表达式是基于问题的优化工作流的基本元素。对于优化变量和表达式的合法运算:
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) | |
| 余切 | cot(x) | |
| 反正弦 | asin(x) | |
| 反余弦 | acos(x) | |
| 反正割 | asec(x) | |
| 反正割 | acsc(x) | |
| 反正切 | atan(x) | |
| 反余切 | acot(x) | |
| 指数 | exp(x) | |
| 对数 | log(x) | |
| 双曲正弦 | sinh(x) | |
| 双曲余弦 | cosh(x) | |
| 双曲正割 | sech(x) | |
| 双曲余割 | csch(x) | |
| 双曲正切 | tanh(x) | |
| 双曲余切 | coth(x) | |
| 反双曲正弦 | asinh(x) | |
| 反双曲余弦 | acosh(x) | |
| 反双曲正割 | asech(x) | |
| 反双曲余割 | acsch(x) | |
| 反双曲正切 | atanh(x) | |
| 反双曲余切 | acoth(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