梯度下降法matlab
时间: 2023-10-16 20:26:24 浏览: 56
以下是一个简单的梯度下降法的 MATLAB 实现:
```matlab
function [x, fval] = gradientDescent(f, gradf, x0, alpha, eps)
% f: 目标函数
% gradf: 目标函数梯度
% x0: 初始值
% alpha: 步长
% eps: 收敛精度
x = x0;
fval = f(x);
while true
grad = gradf(x);
x_new = x - alpha * grad;
fval_new = f(x_new);
if abs(fval_new - fval) < eps
break;
end
x = x_new;
fval = fval_new;
end
end
```
其中,`f` 和 `gradf` 分别是目标函数和目标函数的梯度,`x0` 是初始值,`alpha` 是步长,`eps` 是收敛精度。函数返回值 `x` 是最优解,`fval` 是最优解对应的函数值。
使用方法示例:
```matlab
% 定义目标函数和梯度
f = @(x) x(1)^2 + x(2)^2;
gradf = @(x) [2*x(1); 2*x(2)];
% 初始值
x0 = [1; 1];
% 步长和收敛精度
alpha = 0.1;
eps = 1e-6;
% 梯度下降求解
[x, fval] = gradientDescent(f, gradf, x0, alpha, eps);
% 输出结果
disp(['x = [', num2str(x(1)), ', ', num2str(x(2)), ']']);
disp(['fval = ', num2str(fval)]);
```
阅读全文