每日 11
MATLAB梯度下降法和牛顿法基本过程和实现示例:
- 梯度下降法
 原理:沿目标函数的负梯度方向迭代更新参数,寻找极小值。
 基本步骤:
 定义目标函数 f(x)及其梯度 ∇f(x)初始化参数 x0 ,设置学习率 α(或使用线搜索)和容差ϵ。
迭代更新:
xk+1=xk−α∇f(xk)x k+1 =x k −α∇f(x k )终止条件:当梯度范数 ∥∇f(xk)∥<ϵ∥∇f(x k )∥<ϵ 或达到最大迭代次数时停止。
MATLAB 代码示例:
% 目标函数和梯度
f = @(x) x(1)^2 + 10x(2)^2;
grad = @(x) [2x(1); 20*x(2)];
% 初始化
x = [5; 5];       % 初始点
alpha = 0.1;      % 固定学习率
tol = 1e-6;       % 容差
max_iter = 1000;
% 梯度下降迭代
for k = 1:max_iter
g = grad(x);
if norm(g) < tol
break;
end
x = x - alpha * g;
end
disp(['最优解:x = [', num2str(x'), ']']);
- 牛顿法
 原理:利用目标函数的一阶导数(梯度)和二阶导数(Hessian 矩阵)加速收敛。
 基本步骤:
 定义目标函数 f(x)f(x)、梯度 ∇f(x)∇f(x) 和 Hessian 矩阵 H(x)H(x)。初始化参数 x0x ,设置容差 ϵ。
 迭代更新:xk+1=xk−H(xk)−1∇f(xk)x k+1 =x k −H(x k ) −1 ∇f(x k )
 终止条件:当梯度范数 ∥∇f(xk)∥<ϵ∥∇f(x k )∥<ϵ 或 Hessian 矩阵非正定时停止。
 MATLAB 代码示例:
 % 目标函数、梯度和 Hessian
 f = @(x) x(1)^2 + 10x(2)^2;
 grad = @(x) [2x(1); 20*x(2)];
 hessian = @(x) [2, 0; 0, 20]; % Hessian 矩阵
% 初始化
x = [5; 5];       % 初始点
tol = 1e-6;
max_iter = 100;
% 牛顿法迭代
for k = 1:max_iter
g = grad(x);
H = hessian(x);
if norm(g) < tol || min(eig(H)) <= 0
break;
end
x = x - H \ g;  % 等价于 x = x - inv(H)*g
end
disp(['最优解:x = [', num2str(x'), ']']);
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号