gradient_demo.m

来自「梯度下降算法实现程序」· M 代码 · 共 41 行

M
41
字号
clc,clear;syms x y ; % f = 2*x.^2 + y.^2;   % 效果不错f = (x-1).^4 + y.^2;% f = (x-y) ./ (x.^2+y.^2+2); % 为什么不好使?% [C,h]=contour(x,y,f);% ezplot(x,y,f);  %%% error% ezmesh(f);figure; ezcontour(f);lambda = 0.1;    % 步长alpha(:,1) = [10;6];  % 初始点dx = diff(f,x,1);dy = diff(f,y,1);fvalue = subs(f,{x,y},{alpha(1,1),alpha(2,1)}); % 初始点的函数值delta_x = subs(dx,{x,y},{alpha(1,1),alpha(2,1)}); % 对x的偏导数delta_y = subs(dy,{x,y},{alpha(1,1),alpha(2,1)}); % 对y的偏导数hold onplot(alpha(1,:),alpha(2,:),'r*');flag = 0;i = 2;eps = 1e-4;while ~flag        % matlab下实现do-while循环    delta = [-double(delta_x); -double(delta_y)];  % 搜索方向(负梯度方向)    alpha(:,i) = alpha(:,i-1) + lambda.*delta;   % 更新到新的点    fvalue(:,i) = subs(f,{x,y},{alpha(1,i),alpha(2,i)});  %新的点函数值    delta_x = subs(dx,{x,y},{alpha(1,i),alpha(2,i)});    delta_y = subs(dy,{x,y},{alpha(1,i),alpha(2,i)});    if abs(fvalue(:,i) - fvalue(:,i-1)) < eps         flag = 1;    end    arrow3(alpha(:,i-1)',alpha(:,i)','b',.2,.4);    i = i+1;endplot(alpha(1,end),alpha(2,end),'r*');hold off;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?