最速下降法法matlab代码
时间: 2023-11-05 19:07:03 浏览: 102
以下是使用最速下降法求解无约束优化问题的 MATLAB 代码示例:
```matlab
% 定义目标函数
f = @(x) x(1)^2 + 2*x(2)^2 - 2*x(1)*x(2) - 4*x(2);
% 定义梯度函数
grad_f = @(x) [2*x(1) - 2*x(2); 4*x(2) - 2*x(1) - 4];
% 初始点
x0 = [0; 0];
% 最大迭代次数
max_iter = 1000;
% 步长
alpha = 0.1;
% 设置精度
epsilon = 1e-6;
% 迭代过程
x = x0;
for i = 1:max_iter
% 计算梯度
grad = grad_f(x);
% 计算下降方向
d = -grad;
% 更新 x
x_new = x + alpha * d;
% 判断是否满足停止条件
if norm(grad) < epsilon
break;
end
% 更新 x
x = x_new;
end
% 输出结果
fprintf('最小值:%f\n', f(x));
fprintf('最优解:%f, %f\n', x(1), x(2));
```
在这个例子中,我们使用最速下降法来求解目标函数 $f(x_1,x_2)=x_1^2+2x_2^2-2x_1x_2-4x_2$ 的最小值。我们首先定义了目标函数和梯度函数,然后设置了初始点、最大迭代次数、步长和精度。在迭代过程中,我们计算梯度、计算下降方向、更新 $x$ 并检查是否满足停止条件。最后输出最小值和最优解。
阅读全文