使用 MATLAB 进行基于求解器的优化
定义并求解优化和最小二乘问题以及非线性方程组。使用优化实时编辑器任务引导您完成此工作流。
1. 将所有优化变量合并为单个向量 \( x \)。使用 \( x \) 编写目标和约束。
| 目标类型 | 数学形式 | 示例 |
|---|---|---|
| 线性 | \( f^{T} x \) | f = [-1 0 -5]; |
| 二次 | \( x^{T}H x + f^{T} x \) | H = [5 1 0; 1 3 0; 0 0 0]; |
| 最小二乘 | \( \| Cx - d \|_2 \) \( \sum F_i(x)^2 \) |
C = [7 8 10; 1 3 4; 2 5 7];d = [2; 1; 1.5];function F = myF(x)F(1) = f1(x);F(2) = f2(x);end |
| 一般 | \( f(x) \) | function objval = fobj(x)objval = 3*(x(1)-x(2))^4;end |
| 约束类型 | 数学形式 | 示例 |
|---|---|---|
| 边界 | \( l \leq x \leq u \) | lb = zeros(n,1);ub = 5*ones(n,1); |
| 线性 | \( A x \leq b \) \( A_{eq} x = b_{eq} \) |
A = [1 0 1; 0 -2 1];b = [4; 2];Aeq = [1 0 2];beq = 1; |
| 二阶锥 | \( \| A_{sc} x - b_{sc} \| \leq d_{sc} x - \gamma \) | A = diag([1,1/2,0]);b = zeros(3,1);d = [0;0;1];gamma = 0;socConstraints =secondordercone(A,b,d,gamma); |
| 一般 | \( c(x) \leq 0 \) \( c_{eq}(x) = 0 \) |
function[c,ceq] = nlcons(x)c(1) = x(1).^2 + x(2).^2 - 1;c(2) = x(1)*x(3) - 5;ceq = [];end |
| 整数 | \( x_j \in \mathbb{Z}^n \) | intcon = [1 2] |
2. 选择与目标和约束类型匹配的求解器。
Optimization Toolbox™ 中的求解器使用导数,通常速度更快,并且适用于大规模问题。Global Optimization Toolbox(斜体)和 MATLAB (*) 中的求解器不使用导数,并会搜索全局最小值。
3.如果求解器要求,请定义初始点;可根据需要设置选项。调用求解器并获得解。
| 选项 |
|---|
使用 示例: opts = optimoptions('fmincon','Display','iter')
|