最速下降法的matlab代码实现
时间: 2024-12-21 15:05:39 浏览: 33
最速下降法是一种求解无约束优化问题的迭代方法。它的基本思想是从一个初始点出发,每次沿着当前点的负梯度方向进行搜索,以达到最小化目标函数的目的。以下是使用MATLAB实现最速下降法的代码:
```matlab
function [x, fval, iter] = steepestDescent(f, grad_f, x0, tol, max_iter)
% f: 目标函数
% grad_f: 目标函数的梯度
% x0: 初始点
% tol: 容忍度
% max_iter: 最大迭代次数
x = x0;
fval = f(x);
iter = 0;
while norm(grad_f(x)) > tol && iter < max_iter
% 计算梯度
grad = grad_f(x);
% 计算步长
alpha = (grad' * grad) / (grad' * grad_f(x + grad));
% 更新变量
x = x - alpha * grad;
% 计算新的函数值
fval = f(x);
% 更新迭代次数
iter = iter + 1;
% 显示迭代信息
fprintf('Iteration %d: x = %.4f, f(x) = %.4f\n', iter, x, fval);
end
end
% 示例使用
% 定义目标函数
f = @(x) x(1)^2 + x(2)^2;
% 定义目标函数的梯度
grad_f = @(x) [2*x(1); 2*x(2)];
% 初始点
x0 = [5; 5];
% 容忍度
tol = 1e-6;
% 最大迭代次数
max_iter = 1000;
% 调用最速下降法函数
[x, fval, iter] = steepestDescent(f, grad_f, x0, tol, max_iter);
% 显示结果
fprintf('Optimal solution: x = [%.4f; %.4f], f(x) = %.4f, iterations = %d\n', x(1), x(2), fval, iter);
```
在这个实现中,`steepestDescent`函数接受目标函数`f`、目标函数的梯度`grad_f`、初始点`x0`、容忍度`tol`和最大迭代次数`max_iter`作为输入参数。函数通过迭代更新变量`x`,直到梯度的大小小于容忍度或达到最大迭代次数。
阅读全文