Форум для обсуждения курса

MT-401 12.03.21

MT-401 12.03.21

- Артем Маковецкий の投稿
返信数: 0


# x+5y-7=0 - наша прямая

p1 = [0,0];
p2 = [1,0];
p3 = [5,5];
p4 = [10,0];
y1=0;
y2=0;
y3=1;
y4=1;


function s = sigma(x)
s = (1/(1+exp(-x)));
endfunction

function s = scalprod(a, b)
s = 0;
for i=1:length(a)
s += a(i)*b(i);
endfor
endfunction

function s = gradient(delta, h1)
for i=1:3
s(i) = scalprod(delta, h1(i,:));
endfor
endfunction

function f = func_val (w,h1,y)
z2 = [];
z2 = w*h1;
h2 = [];
for i=1:length(z2)
h2(i) = sigma(z2(i));
endfor
f=0;
for j=1:4
f+=(h2(j)-y(j))*(h2(j)-y(j));
endfor
endfunction

function gr_step=grad_desc(lambda,n,w,h1,y)
w_temp=w;
w_next=w;
#lambda=0.2;
for i=1:n
gr=func_val(w_temp,h1,y);
w_next=w_temp-lambda*gr;
w_temp=w_next;
endfor
gr_step=w_next;
endfunction

function gr_step=grad_desc_1(eps_lambda,eps_func,w,h1,y)
w_temp = w;
w_next = w;
flag_lambda = true;
flag_func = true;
while (flag_lambda && flag_func)
lambda = 1.0;
gr = func_val(w_temp,h1,y);
w_next = w_temp-lambda*gr;
while(func_val(w_next,h1,y) >= func_val(w_temp,h1,y))
lambda = lambda/2.0;
w_next = w_temp-lambda*gr;
if(lambda < eps_lambda)
flag_lambda = false;
break
endif
if(abs(func_val(w_next,h1,y) - func_val(w_temp,h1,y)) < eps_func)
flag_func = false;
break
endif
endwhile
if(abs(func_val(w_next,h1,y) - func_val(w_temp,h1,y)) < eps_func)
break
endif
w_temp = w_next;
endwhile
gr_step = w_next;
endfunction

function res = direct_way(w,p_test)
z2 = w*p_test';
h2 = sigma(z2);
if(h2 >= 0.5)
res = 1.0;
endif
if(h2 < 0.5)
res = -1.0;
endif
endfunction
y = [y1,y2,y3,y4];

disp(y')

w11 = 1;
w12 = 1;
w13 = 1;

w = [w11, w12, w13];
h11 = [p1(1),p1(2),1];
h12 = [p2(1),p2(2),1];
h13 = [p3(1),p3(2),1];
h14 = [p4(1),p4(2),1];

h1 = [h11',h12',h13',h14']
s = sigma(0)

z2 = [];
z2 = w*h1;
h2 = [];

for i=1:length(z2)
h2(i) = sigma(z2(i));
endfor

z2
h2

#ptest = [1,0,1];
#z2test = w*ptest';
#h2test = [];
#for i=1:length(z2test)
# h2test(i) = sigma(z2test(i));
#endfor
#h2test
#z2test

delta = [];
for j=1:4
arg = scalprod(w, h1(:,j)) - y(j);
delta(j)=sigma(arg) * sigma(arg) * (1-sigma(arg));
endfor

gr=gradient(delta, h1)

f_val1=func_val(w,h1,y)

w01=w-1*gr;

f_val2 = func_val(w01,h1,y)
w02 = grad_desc(0.2,4,w,h1,y);
f_val3 = func_val(w02,h1,y)
w03 = grad_desc_1(0.00001,0.00001,w,h1,y)
f_val4 = func_val(w03,h1,y)
p_test_1 = [-2,-2,1];
res_test_1 = direct_way(w03,p_test_1)