最速下降法matlab
时间: 2023-10-16 22:22:35 浏览: 65
最速下降法(Steepest Descent Method)是一种用于求解无约束优化问题的迭代算法。在 MATLAB 中,可以使用以下代码实现最速下降法:
```matlab
% 定义目标函数
f = @(x) x(1)^2 + x(2)^2 + x(1)*x(2) - 6*x(1) - 9*x(2);
% 定义梯度函数
gradf = @(x) [2*x(1) + x(2) - 6; 2*x(2) + x(1) - 9];
% 初始化参数
x0 = [0; 0];
tol = 1e-6;
maxiter = 100;
% 迭代计算
for k = 1:maxiter
% 计算当前梯度
gk = gradf(x0);
% 检查是否达到收敛条件
if norm(gk) < tol
break;
end
% 计算下降方向
dk = -gk;
% 计算步长
alpha = fminsearch(@(t) f(x0 + t*dk), 0);
% 更新参数
x0 = x0 + alpha*dk;
end
% 输出结果
disp(['迭代次数:', num2str(k)]);
disp(['最优解:', num2str(x0')]);
disp(['最优值:', num2str(f(x0))]);
```
在上述代码中,`f` 和 `gradf` 分别定义了目标函数和梯度函数。`x0` 是初始参数,`tol` 是收敛容差,`maxiter` 是迭代次数上限。在每次迭代中,首先计算当前梯度 `gk`,然后计算下降方向 `dk`,并使用一维搜索计算步长 `alpha`。最后更新参数 `x0`,并检查是否达到收敛条件。当梯度的范数小于收敛容差时,算法停止迭代。最后输出迭代次数、最优解和最优值。
阅读全文