写一个用随机梯度下降求解二元二次函数的MATLAB代码
时间: 2024-09-29 13:02:34 浏览: 41
在MATLAB中,你可以使用随机梯度下降(SGD)算法来最小化一个二元二次函数,比如目标函数f(x) = x^2 + y^2。这是一个简单的示例,假设你想要找到最小值点(x, y),初始猜测为(0, 0),学习率alpha设置为0.01:
```matlab
% 定义二元二次函数
fun = @(x) x(1)^2 + x(2)^2; % 目标函数
% 初始化参数
x = [0; 0]; % 初始猜测 (x, y)
learning_rate = 0.01; % 学习率
max_iterations = 1000; % 最大迭代次数
% 随机梯度下降算法
for iter = 1:max_iterations
% 随机选择一个梯度方向(这里为了简单起见只取了一个坐标)
gradient_direction = randn(1, 2); % 随机向量
% 计算梯度
gradient = diff(fun(x + learning_rate * gradient_direction)); % 求导,简化计算
% 更新参数
x = x - learning_rate * gradient_direction;
% 打印当前进度
if mod(iter, 100) == 0
fprintf('Iteration %d: f(%f, %f) = %.4f\n', iter, x(1), x(2), fun(x));
end
end
% 输出最终结果
fprintf('Minimum found at (%f, %f)\n', x(1), x(2));
```
阅读全文