matlab编写随机梯度下降法求解一个多元函数的最小值
时间: 2023-08-24 10:35:11 浏览: 274
梯度下降:这个函数找到函数的局部最小值。-matlab开发
下面是一个简单的Matlab代码实现随机梯度下降法,求解一个多元函数的最小值:
```matlab
% 定义目标函数
f = @(x) (x(1)-1)^2 + (x(2)-2)^2 + (x(3)-3)^2;
% 初始化参数
x0 = [0, 0, 0]; % 初始值
alpha = 0.01; % 学习率
iters = 1000; % 迭代次数
% 随机梯度下降
x = x0; % 初始点
for i=1:iters
% 随机选择一个方向
dir = randn(1, 3); % 随机生成一个方向
dir = dir/norm(dir); % 归一化
% 计算梯度
grad = (f(x+0.0001*dir)-f(x))/0.0001*dir';
% 更新参数
x = x - alpha*grad*dir;
end
% 输出结果
fprintf('最小值为 %f\n', f(x));
fprintf('最小点为 (%f, %f, %f)\n', x(1), x(2), x(3));
```
其中,`f`表示目标函数,`x0`表示初始点,`alpha`表示学习率,`iters`表示迭代次数。在每次迭代中,随机选择一个方向,计算梯度并更新参数。最后的`x`即为函数的最小点,`f(x)`即为函数的最小值。
阅读全文