用matlab写梯度下降法
时间: 2023-10-31 21:28:17 浏览: 58
以下是一个使用 MATLAB 实现梯度下降法的示例:
假设我们要最小化函数 f(x) = x^2 + 2x + 1,我们可以使用梯度下降法来找到最小值点。
步骤1:定义函数
我们首先需要定义我们要求解的函数。在 MATLAB 中,我们可以使用一个匿名函数来定义它:
f = @(x) x^2 + 2*x + 1;
步骤2:定义初始值
我们需要选择一个初始值 x0,从这个点开始迭代。在这个例子中,我们可以选择 x0 = 0。
x0 = 0;
步骤3:定义学习率和迭代次数
梯度下降法需要一个学习率和迭代次数。我们可以尝试不同的学习率和迭代次数来找到最小值点。在这个例子中,我们选择学习率为 0.1,迭代次数为 100。
learning_rate = 0.1;
num_iterations = 100;
步骤4:迭代计算
我们使用下面的代码来实现梯度下降法:
x = x0;
for i = 1:num_iterations
gradient = 2*x + 2; % 计算梯度
x = x - learning_rate * gradient; % 更新 x
end
在每次迭代中,我们计算函数的梯度,然后将其乘以学习率,从当前 x 值中减去这个乘积,得到新的 x 值。
步骤5:输出结果
最后,我们输出最终的 x 值和函数的最小值:
fprintf('最小值点: %f\n', x);
fprintf('最小值: %f\n', f(x));
完整的代码如下:
f = @(x) x^2 + 2*x + 1;
x0 = 0;
learning_rate = 0.1;
num_iterations = 100;
x = x0;
for i = 1:num_iterations
gradient = 2*x + 2; % 计算梯度
x = x - learning_rate * gradient; % 更新 x
end
fprintf('最小值点: %f\n', x);
fprintf('最小值: %f\n', f(x));