梯度下降法matlab实现
时间: 2023-09-04 07:15:16 浏览: 96
梯度下降法(Gradient Descent)是一种常用的优化算法,可以用于求解目标函数的最小值。在Matlab中,可以通过以下步骤实现梯度下降法:
1. 定义目标函数和其梯度
假设我们要求解的目标函数为f(x1, x2),其梯度为grad_f(x1, x2)。在Matlab中,可以通过函数句柄的形式定义目标函数和梯度:
```matlab
f = @(x1, x2) x1^2 + 2*x2^2; % 定义目标函数
grad_f = @(x1, x2) [2*x1; 4*x2]; % 定义梯度
```
2. 初始化参数
我们需要初始化优化参数的初始值,通常可以随机生成一些初始值,例如:
```matlab
x_init = [randn(); randn()]; % 随机生成初始值
```
3. 设置优化参数
梯度下降法中有两个重要的参数:学习率和最大迭代次数。在Matlab中,我们可以通过以下方式设置这些参数:
```matlab
lr = 0.1; % 学习率
max_iter = 100; % 最大迭代次数
```
4. 迭代优化
接下来,我们可以使用梯度下降法迭代优化参数,直到达到最大迭代次数或收敛。在每次迭代中,我们需要计算目标函数的梯度,并更新参数。具体实现如下:
```matlab
x = x_init; % 初始化参数
for iter = 1:max_iter
grad = grad_f(x(1), x(2)); % 计算梯度
x = x - lr * grad; % 更新参数
end
```
5. 输出结果
最后,我们可以输出最终的优化结果:
```matlab
fprintf('Optimized result: x1=%.4f, x2=%.4f, f=%.4f\n', x(1), x(2), f(x(1), x(2)));
```
完整代码如下:
```matlab
f = @(x1, x2) x1^2 + 2*x2^2; % 定义目标函数
grad_f = @(x1, x2) [2*x1; 4*x2]; % 定义梯度
x_init = [randn(); randn()]; % 随机生成初始值
lr = 0.1; % 学习率
max_iter = 100; % 最大迭代次数
x = x_init; % 初始化参数
for iter = 1:max_iter
grad = grad_f(x(1), x(2)); % 计算梯度
x = x - lr * grad; % 更新参数
end
fprintf('Optimized result: x1=%.4f, x2=%.4f, f=%.4f\n', x(1), x(2), f(x(1), x(2)));
```
阅读全文