Я должен был пройти дополнительный курс по машинному обучению, мы сделали упражнение с учителем в первом классе, и у меня возникли некоторые трудности в его завершении. Учитель сказал нам вычислить градиенты gx1, gx2 и вычислить новую точку. Я никогда раньше не использовал Matlab, и я новичок в области машинного обучения. Если кто-нибудь сможет мне помочь, я буду признателен.
clear all
close all
clc
funstr = '3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) - 10*(x/5 - x.^3 -
y.^5).*exp(-x.^2-y.^2) - 1/3*exp(-(x+1).^2 - y.^2) ';%funstr = '10-
(exp(-1*(x^2+3*y^2)))';
%funstr = 'x^2 + y^2';
f=vectorize(inline(funstr));
range=[-3 3 -3 3]; %range=[-1 1 -1 1];
Ndiv=50;
dx=(range(2)-range(1))/Ndiv; dy=(range(4)-range(3))/Ndiv;
[x,y] = meshgrid(range(1):dx:range(2),range(3):dy:range(4));
z=(f(x,y));
figure(1); surfc(x,y,z);
s=15;
znv=zeros(s,1);
figure
for i = 1:s
k=0;
niter=200;
hstep = 0.001;
alfa=0.05;
xrange=range(2)-range(1);
yrange=range(4)-range(3);
x1=rand*xrange+range(1);
x2=rand*yrange+range(3);
while (k<niter)
zn=f(x1,x2);
%complete: calculate gradients gx1 and gx2
contour(x,y,z,15);
hold on;
plot(x1,x2,'.','markersize',10,'markerfacecolor','g');
drawnow;
hold on;
%Complete: calculate new point
k=k+1;
znv(i)=zn;
end
end
znMin = min(znv);