梯度下降法matlab
时间: 2023-09-04 14:15:27 浏览: 28
梯度下降法是一种常用的优化算法,它可以帮助我们找到一个函数的最小值。在MATLAB中,可以使用以下代码实现梯度下降法:
1. 定义目标函数
首先需要定义待优化的目标函数,例如:
```matlab
function y = target_func(x)
y = x(1)^2 + x(2)^2;
end
```
2. 计算梯度
使用MATLAB的符号计算工具箱可以方便地求出函数的梯度,例如:
```matlab
syms x1 x2
f(x1, x2) = x1^2 + x2^2;
grad = gradient(f, [x1, x2]);
```
此时,`grad`即为目标函数的梯度。
3. 实现梯度下降算法
接下来,可以实现梯度下降算法:
```matlab
function [x_opt, f_opt] = gradient_descent(target_func, grad, x_init, alpha, max_iter, tol)
% target_func: 目标函数
% grad: 梯度
% x_init: 初始点
% alpha: 步长
% max_iter: 最大迭代次数
% tol: 收敛精度
x = x_init;
for i = 1:max_iter
g = double(subs(grad, [x1, x2], x));
x_new = x - alpha * g;
if norm(x_new - x) < tol
break;
end
x = x_new;
end
x_opt = x_new;
f_opt = target_func(x_opt);
end
```
其中,`x_init`为初始点,`alpha`为步长,`max_iter`为最大迭代次数,`tol`为收敛精度。在每次迭代中,根据当前点`x`和目标函数的梯度`g`,计算出下一个点`x_new`,直到满足收敛精度或达到最大迭代次数为止。
4. 调用梯度下降算法
最后,可以调用梯度下降算法来求解目标函数的最小值,例如:
```matlab
[x_opt, f_opt] = gradient_descent(@target_func, grad, [1, 1], 0.1, 1000, 1e-6);
disp(['x_opt = ', num2str(x_opt)]);
disp(['f_opt = ', num2str(f_opt)]);
```
其中,`@target_func`表示将目标函数`target_func`作为函数句柄传递给`gradient_descent`函数。运行上述代码,即可得到目标函数的最小值和最优解。