📄 gradient_demo.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 + -