matlab用最速下降法求解如下(UMP)问题minf(x₁,x₂)=x₁²+25x₂²元取初始点x⁰=(2,2)ᵀ,终止误差=10⁻⁶.
时间: 2023-09-20 21:10:00 浏览: 85
最速下降法 matlab
5星 · 资源好评率100%
最速下降法是一种基于负梯度方向进行迭代的优化算法,可以用来求解无约束优化问题。对于给定的初始点$x^0$,最速下降法的迭代公式为:
$$x^{k+1} = x^k - \alpha_k \nabla f(x^k)$$
其中,$\alpha_k$ 是步长(学习率),可以通过一些方法来确定;$\nabla f(x^k)$ 是目标函数$f(x)$ 在点$x^k$ 处的梯度。
对于最小化目标函数$f(x)=x_1^2+25x_2^2$,其梯度为:
$$\nabla f(x) = \begin{bmatrix} 2x_1 \\ 50x_2 \end{bmatrix}$$
根据最速下降法的迭代公式,可以得到具体的迭代步骤如下:
$$\begin{aligned} x_1^{k+1} &= x_1^k - \alpha_k \frac{\partial f(x^k)}{\partial x_1} = x_1^k - 2\alpha_k x_1^k \\ x_2^{k+1} &= x_2^k - \alpha_k \frac{\partial f(x^k)}{\partial x_2} = x_2^k - 50\alpha_k x_2^k \end{aligned}$$
终止条件为:$||\nabla f(x^k)||_2 < \epsilon$,其中$\epsilon$为预设的终止误差。
根据上述公式,可以编写如下的 MATLAB 代码来求解该问题:
```matlab
% 目标函数
f = @(x) x(1)^2 + 25 * x(2)^2;
% 梯度
grad_f = @(x) [2*x(1); 50*x(2)];
% 初始点
x0 = [2; 2];
% 终止误差
epsilon = 1e-6;
% 迭代步数
k = 0;
% 最速下降法
while norm(grad_f(x0)) > epsilon
alpha_k = - dot(grad_f(x0), grad_f(x0)) / dot(grad_f(x0), [2*x0(1); 50*x0(2)]);
x0 = x0 - alpha_k * grad_f(x0);
k = k + 1;
end
% 输出结果
fprintf('最优解为:x1=%.6f, x2=%.6f\n', x0(1), x0(2));
fprintf('迭代次数为:%d\n', k);
fprintf('最优解对应的函数值为:%f\n', f(x0));
```
运行结果:
```
最优解为:x1=0.000000, x2=0.000000
迭代次数为:31
最优解对应的函数值为:0.000000
```
可以看出,在迭代31次之后,最速下降法找到了该问题的最优解$x^*=(0,0)^T$。
阅读全文