% Harjutustund 7, ylesanne 11
% algl2hendid jooniselt
ezplot('x^2+2*y-8=0')
hold on
ezplot('x+y^2-y-3=0')
hold off
yline(0)
grid on
% algl2hendid (-3.4,-2), (-1.6,2.7), (2.1,1.5) ja (3,0)
% vektorfunktsioon
F=@(z) [z(1)^2+2*z(2)-8,z(1)+z(2)^2-z(2)-3];
% 1) lahendamine hariliku it. meetodiga
% koondumise tingimuse uurimine
x=-3.4;
y=-2;
Gtuletis=[0 1-2*y
    -x 0];
norm(Gtuletis,1) % >1
x=-1.6;
y=2.7;
Gtuletis=[0 1-2*y
    -x 0];
norm(Gtuletis,1) % >1
x=2.1;
y=1.5;
Gtuletis=[0 1-2*y
    -x 0];
norm(Gtuletis,1) % >1
x=3;
y=0;
Gtuletis=[0 1-2*y
    -x 0];
norm(Gtuletis,1) % >1

% leiame koonduva kuju
x=-3.4;
y=-2;
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(y+3-x)) 1/(2*sqrt(y+3-x))];
norm(Gtuletis,1) % <1, sobib

x=-1.6;
y=2.7;
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(y+3-x)) 1/(2*sqrt(y+3-x))];
norm(Gtuletis,1) % <1, sobib

x=2.1;
y=1.5;
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(y+3-x)) 1/(2*sqrt(y+3-x))];
norm(Gtuletis,1) % <1, sobib

x=2.9;
y=0;
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(y+3-x)) 1/(2*sqrt(y+3-x))];
norm(Gtuletis,1) % >1, ei sobi

% Kuidas Matlabis Jacobi maatriksit leida 
syms x y; % % x ja y on sümboolsed muutujad
jacobian([x^2+2*y-8,x+y^2-y-3],[x,y])
tuletistemaatriks=jacobian([sqrt(8-2*y),sqrt(y+3-x)],[x,y])

syms tuletis(x,y); % symboolne funktsioon
tuletis(x,y)=tuletistemaatriks;
m=vpa(tuletis(-3.4,-2)) % tulemus kümnendmurruna
norm(m,1)

% leiame kolmele esimesele alglähendile vastavad lahendid
z=[-3.4,-2];
sammud=0;
while norm(F(z),1)>10^(-5)
  z(1)=-sqrt(8-2*z(2)); % hariliku it. meetodi x-i eeskiri
  z(2)=-sqrt(z(2)+3-z(1)); % hariliku it. meetodi y- eeskiri
  sammud=sammud+1;
end
lahend1harilik=z
sammud1harilik=sammud

z=[-1.6,2.7];
sammud=0;
while norm(F(z),1)>10^(-5)
  z(1)=-sqrt(8-2*z(2)); % hariliku it. meetodi x-i eeskiri
  z(2)=sqrt(z(2)+3-z(1)); % hariliku it. meetodi y- eeskiri
  sammud=sammud+1;
end
lahend2harilik=z
sammud2harilik=sammud

z=[2.1,1.5];
sammud=0;
while norm(F(z),1)>10^(-5)
  z(1)=sqrt(8-2*z(2)); % hariliku it. meetodi x-i eeskiri
  z(2)=sqrt(z(2)+3-z(1)); % hariliku it. meetodi y- eeskiri
  sammud=sammud+1;
end
lahend3harilik=z
sammud3harilik=sammud

% viimasele alglähendile koonduv hariliku it. meetodi eeskirja leidmine
% koonduvus
x=2.9;
y=0;
Gtuletis=[0 -1/sqrt(8-2*y)
    1 2*y];
norm(Gtuletis,1) % ligikaudu <1, sobib

z=[2.9,0];
sammud=0;
while norm(F(z),1)>10^(-5)
  z(1)=sqrt(8-2*z(2)); % hariliku it. meetodi x-i eeskiri
  z(2)=z(1)+z(2)^2-3; % hariliku it. meetodi y- eeskiri
  sammud=sammud+1;
end
lahend4harilik=z
sammud4harilik=sammud

% 2) lahendame võrrandisüsteemi Newtoni meetodiga
Ftuletis=@(z) [2*z(1) 2
    1 2*z(2)-1];

z=[-3.4;-2]; % veeruvektor
sammud=0;
while norm(F(z),1)>10^(-5)
  z=z-inv(Ftuletis(z))*F(z)';
  sammud=sammud+1;
end
lahend1newton=z
sammud1newton=sammud

z=[-1.6;2.7]; % veeruvektor
sammud=0;
while norm(F(z),1)>10^(-5)
  z=z-inv(Ftuletis(z))*F(z)';
  sammud=sammud+1;
end
lahend2newton=z
sammud2newton=sammud

z=[2.1;1.5]; % veeruvektor
sammud=0;
while norm(F(z),1)>10^(-5)
  z=z-inv(Ftuletis(z))*F(z)';
  sammud=sammud+1;
end
lahend3newton=z
sammud3newton=sammud

z=[2.9;0]; % veeruvektor
sammud=0;
while norm(F(z),1)>10^(-5)
  z=z-inv(Ftuletis(z))*F(z)';
  sammud=sammud+1;
end
lahend4newton=z
sammud4newton=sammud

% võrdleme sammude arvu 
[sammud1harilik sammud2harilik sammud3harilik sammud4harilik
    sammud1newton sammud2newton sammud3newton sammud4newton]