最速梯度下降法matlab
时间: 2023-10-16 13:31:01 浏览: 15
以下是一个简单的最速梯度下降法的 MATLAB 代码示例:
```
function [x, fval, n_iter] = steepest_descent(f, grad_f, x0, tol, max_iter)
% f: 目标函数
% grad_f: 目标函数的梯度
% x0: 初始点
% tol: 容差
% max_iter: 最大迭代次数
% x: 最优解
% fval: 最优解的函数值
% n_iter: 迭代次数
x = x0;
n_iter = 0;
while n_iter < max_iter
n_iter = n_iter + 1;
grad = grad_f(x);
alpha = backtracking(f, grad, x);
x = x - alpha * grad;
if norm(grad) < tol
break;
end
end
fval = f(x);
end
function alpha = backtracking(f, grad, x)
% 回溯线性搜索
alpha = 1;
c = 0.5;
rho = 0.5;
f0 = f(x);
while f(x - alpha * grad) > f0 - c * alpha * norm(grad)^2
alpha = rho * alpha;
end
end
```
使用该代码,你需要提供目标函数的 MATLAB 函数句柄 `f` 和其梯度的 MATLAB 函数句柄 `grad_f`,初始点 `x0`,容差 `tol` 和最大迭代次数 `max_iter`。函数将返回最优解 `x`,最优解的函数值 `fval` 和迭代次数 `n_iter`。