每日 11

MATLAB梯度下降法和牛顿法基本过程和实现示例:

  1. 梯度下降法
    原理:沿目标函数的负梯度方向迭代更新参数,寻找极小值。
    基本步骤:
    定义目标函数 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) [2
x(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'), ']']);

  1. 牛顿法
    原理:利用目标函数的一阶导数(梯度)和二阶导数(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) [2
    x(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'), ']']);

posted @ 2025-03-18 19:03  一如初见233  阅读(47)  评论(0)    收藏  举报