⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gradient_demo.m

📁 梯度下降算法实现程序
💻 M
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -