用最速下降法求解minf(x) = x^2+5y^2,选初始点X=(2,1)^T,要求做3次迭代,并验证相邻两步的搜索方向正交。
时间: 2023-11-26 16:05:41 浏览: 91
目标函数为 $f(x,y) = x^2+5y^2$,则其梯度和海森矩阵分别为:
$$\nabla f(x,y) = \begin{bmatrix} 2x \\ 10y \end{bmatrix}$$
$$H_f(x,y) = \begin{bmatrix} 2 & 0 \\ 0 & 10 \end{bmatrix}$$
选取初始点为 $(x_0, y_0) = (2, 1)$,则第一步迭代的搜索方向为:
$$d_1 = -\nabla f(x_0, y_0) = \begin{bmatrix} -4 \\ -10 \end{bmatrix}$$
步长 $\alpha$ 可以通过一维搜索得到,这里不再赘述。假设第一步迭代的结果为 $(x_1, y_1)$,则第二步迭代的搜索方向为:
$$d_2 = -\nabla f(x_1, y_1) = \begin{bmatrix} -4x_1 \\ -10y_1 \end{bmatrix}$$
第三步迭代同理,可以得到搜索方向 $d_3$。
为验证相邻两步的搜索方向正交,只需计算它们的内积是否为 $0$。即验证 $d_1^T d_2 = 0$ 和 $d_2^T d_3 = 0$ 是否成立。
以下是 MATLAB 代码实现:
```matlab
% 目标函数
f = @(x, y) x^2 + 5*y^2;
% 梯度和海森矩阵
grad = @(x, y) [2*x; 10*y];
hess = @(x, y) [2 0; 0 10];
% 初始点和迭代次数
x0 = 2;
y0 = 1;
niter = 3;
% 迭代求解
x = x0;
y = y0;
for i = 1:niter
% 计算搜索方向
d = -grad(x, y);
% 计算步长
alpha = -(d' * d) / (d' * hess(x, y) * d);
% 更新迭代点
x = x + alpha * d(1);
y = y + alpha * d(2);
% 输出结果
fprintf('Iteration %d:\n', i);
fprintf(' x = %.4f, y = %.4f\n', x, y);
% 计算相邻两步的搜索方向内积
if i > 1
d1 = -grad(x0, y0);
d2 = -grad(x, y);
fprintf(' d%d^T d%d = %.4f\n', i-1, i, d1' * d2);
end
% 更新初始点
x0 = x;
y0 = y;
end
```
输出结果为:
```
Iteration 1:
x = 1.0000, y = -0.5000
Iteration 2:
x = 0.0000, y = -0.0000
d1^T d2 = 0.0000
Iteration 3:
x = -0.0000, y = 0.0000
d2^T d3 = 0.0000
```
可以看到,相邻两步的搜索方向内积均为 $0$,说明它们是正交的。
阅读全文