2026a
# 优化变量和表达式支持的运算
# 支持的运算符号
优化变量和表达式是基于问题的优化工作流的基本元素。对于优化变量和表达式的合法运算:
x 和 y 表示任意大小的优化数组(通常大小相同);
x2D 和 y2D 代表二维优化数组;
a 是一个标量数字常数;
M 是一个常数数字矩阵;
c 是一个与 x 大小相同的数字数组。
警告
基于问题的方法不支持目标函数、非线性等式或非线性不等式中使用复数值。如果某函数计算具有复数值,即使是作为中间值,最终结果也可能不正确。
# 返回优化表达式的运算
这些对优化变量或表达式的运算返回一个优化表达式。
# 算术
| 运算 | 示例 |
|---|---|
| 加上常数 | x+c 或 c+x |
| 加上变量 | x+y |
| 一元加法 | +x |
| 减去一个常数 | x-c |
| 减去变量 | x–y |
| 一元减法 | -x |
| 乘以常数标量 | a*x 或 x*a |
| 除以常数标量 | x/a |
| 矩阵乘以变量 | x2D*y2D,或 x*y(当 x 或 y 为标量时) |
| 矩阵乘以变量和矩阵 | M*x2D 或 x2D*M |
| 变量与数组的点积 | dot(x,c) 或 dot(c,x) 或 dot(x,M,x) |
| 变量的线性组合 | sum(x)、sum(x,dims=k) |
| 数组元素的乘积 | prod(x)、prod(x,dims=k) |
| 矩阵的迹 | tr(x2D) |
| 累计和或乘积 | cumsum(x)、cumprod(x)、cumsum(x,dims=k)、cumprod(x,dims=k) |
| 差分 | diff(x)、diff(x,dims=k) |
| 转置 | x' 或 adjoint(x) |
| 重构 | reshape(x,2,2) |
| 创建对角矩阵或获取矩阵的对角元素 | diag(x)、diag(x,k) |
提示
在使用部分数学库函数之前,您需要通过 using TyMath 来实现加载。
# 初等函数
| 运算 | 示例 |
|---|---|
| 方阵的幂 | x2D^a |
| 平方根 | sqrt(x) |
| 范数(欧几里得) | norm(x) 或 norm(x,p),其中 p 为正实数或 Inf |
| 正弦 | 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) |
提示
优化变量或表达式的逐点运算不受支持,请使用 @fcn2expr 将不受支持的函数转换为优化表达式。
# 返回优化变量的运算
| 运算 | 示例 |
|---|---|
| N 维数字索引(包括冒号) | x[4,1:3] |
| N 维字符串索引 | x[str1,str2],其中 str1 和 str2 是字符串 |
| N 维混合索引(数值索引、冒号和字符串的组合) | x[str1,1:3] |
| 线性数字索引(包括冒号) | x[1:4] |
| 线性字符串索引 | x[str1] |
# 优化表达式的运算
优化表达式支持优化变量支持的所有运算,并返回优化表达式。此外,您可以使用数值索引、字符串索引或线性索引(包括用于数值索引或线性索引的冒号)对优化表达式进行索引或分配。
# 返回约束表达式的运算
约束是任意两个可比较的表达式,其中包含以下比较运算符之一: ==、<= 或 >=。可比较的表达式具有相同的大小。
# 不支持的函数和运算需要使用 @fcn2expr 生成
如果您的目标函数或非线性约束函数不受支持,请使用 @fcn2expr 将 Syslab 函数转换为优化表达式。有关示例请参见 @fcn2expr。