matlab实现梯度下降法的代码
时间: 2023-10-12 19:04:42 浏览: 106
以下是Matlab的代码实现:
```matlab
% 定义目标函数
y = @(x) x^2 + 2*x + 1;
% 定义初始点、学习率和迭代次数
x0 = 0;
alpha = 0.1;
max_iter = 100;
% 进行梯度下降迭代
for i = 1:max_iter
% 计算当前点的梯度
grad = diff(y, x);
% 计算下一个点的位置
x_next = x0 - alpha * double(subs(grad, x, x0));
% 判断是否满足迭代精度要求
if abs(x_next - x0) < 1e-6
break;
end
x0 = x_next;
end
% 输出最终迭代结果
fprintf('Optimal solution: x = %.4f, y = %.4f\n', x0, y(x0));
```
在这个例子中,我们定义了目标函数y(x) = x^2 + 2x + 1,初始点x0 = 0,学习率alpha = 0.1,迭代次数max_iter = 100。然后使用for循环进行梯度下降迭代,内部计算当前点的梯度、下一个点的位置,并判断是否满足迭代精度要求。最后输出最终迭代结果。
相关问题
matlab随机梯度下降法代码
以下是一个简单的 MATLAB 随机梯度下降法的示例代码:
```matlab
function [theta, J_history] = stochasticGradientDescent(X, y, theta, alpha, num_iters)
% X 是输入特征数据,y 是对应的标签数据
% theta 是待求解的参数向量
% alpha 是学习率
% num_iters 是迭代次数
m = length(y); % 样本数
J_history = zeros(num_iters, 1); % 用于记录每次迭代后的代价函数值
for iter = 1:num_iters
% 随机选择一个样本
i = randi(m);
% 计算该样本的误差
error = (X(i,:) * theta - y(i)) * X(i,:)';
% 更新参数向量
theta = theta - alpha * error;
% 记录代价函数值
J_history(iter) = computeCost(X, y, theta);
end
end
```
其中,`computeCost` 函数是计算代价函数的,可以参考以下代码:
```matlab
function J = computeCost(X, y, theta)
% X 是输入特征数据,y 是对应的标签数据
% theta 是待求解的参数向量
m = length(y); % 样本数
J = (1 / (2 * m)) * sum((X * theta - y).^2);
end
```
使用示例如下:
```matlab
% 生成随机数据
m = 100;
n = 2;
X = [ones(m, 1), rand(m, n)];
y = rand(m, 1);
% 初始化参数向量
theta = zeros(n+1, 1);
% 设置学习率和迭代次数
alpha = 0.01;
num_iters = 1000;
% 运行随机梯度下降算法
[theta, J_history] = stochasticGradientDescent(X, y, theta, alpha, num_iters);
% 绘制代价函数值随迭代次数的变化
plot(1:num_iters, J_history, '-b', 'LineWidth', 2);
xlabel('Number of iterations');
ylabel('Cost J');
```
matlab实现梯度下降算法
梯度下降法是一种常用的无约束最优化方法,用于求解多维函数的极小值。其基本原理是通过迭代计算梯度(方向导数)的负方向来逐步逼近极小值点。在Matlab中,可以使用以下代码实现梯度下降算法:
```matlab
function [x_opt] = gradient_descent(f, x_init, learning_rate, epsilon, max_iter)
x = x_init; % 初始点
iter = 0; % 迭代次数
while true
% 计算梯度
grad = gradient(f, x);
% 更新参数
x = x - learning_rate * grad;
% 判断终止条件
if norm(grad) < epsilon || iter >= max_iter
break;
end
iter = iter + 1;
end
x_opt = x; % 返回最优解
end
```
其中,`f`是目标函数,`x_init`是初始点,`learning_rate`是学习率(步长),`epsilon`是终止条件(梯度的范数小于该值时停止迭代),`max_iter`是最大迭代次数。函数的返回值`x_opt`是最优解。