clear %vahemälu puhtaks

%Joonis alglähendite leidmiseks
ezplot('x^2+2*y-8=0')
hold on
h=ezplot('x+y^2-y-3=0')
set(h,'color','k')
grid on
hold off
legend('x^2+2y-8=0','x+y^2-y-3=0')
title('Joonis alglähendite leidmiseks')
%Jooniselt on näha 4 lõikepunkti => võrrandisüsteemil on 4 lahendit. Valime
%lõikepunktide koordinaadid alglähenditeks. Meile sobivad
%(-3.5;-2) ja (-1.5;2.5) ja (2.5;1.5) ja (3;-0.1)

%Defineerime võrrandisüsteemist funktsioonide vektori, mille argumendiks on
%vektor z, kus z(1)=x ja z(2)=y
F=@(z)[z(1)^2+2*z(2)-8,z(1)+z(2)^2-z(2)-3];

%Kontrollime HIM koonduvust
%1) avaldasime esimesest võrrandist x ja teisest y lineaarsest liikmest
x=-3.5;
y=-2; %esimese lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    1 2*y];
tuletis=norm(Gtuletis,1) %=4.2887>1 ei sobi

x=-1.5;
y=2.5; %teise lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    1 2*y];
tuletis=norm(Gtuletis,1) %=5.5774 ei sobi

x=2.5;
y=1.5; %kolmanda lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    1 2*y];
tuletis=norm(Gtuletis,1) %=3.4473>1 ei sobi

x=3;
y=-0.1; %neljanda lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    1 2*y];
tuletis=norm(Gtuletis,1) %=1 sobib

%2) avaldasime esimesest võrrandist y ja teisest x
x=-3.5;
y=-2; %esimese lõikepunkti koordinaadid
Gtuletis=[-x 0; 0 1-2*y];
tuletis=norm(Gtuletis,1) %=5>1 ei sobi

x=-1.5;
y=2.5; %teise lõikepunkti koordinaadid
Gtuletis=[-x 0; 0 1-2*y];
tuletis=norm(Gtuletis,1) %=4>1 ei sobi

x=2.5;
y=1.5; %kolmanda lõikepunkti koordinaadid
Gtuletis=[-x 0; 0 1-2*y];
tuletis=norm(Gtuletis,1) %=2.5>1 ei sobi

%3) avaldame esimesest võrrandist x ja teisest võrrandist y (ruuduga
%liikmest)
x=-3.5;
y=-2; %esimese lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(3+y-x)) 1/(2*sqrt(3+y-x))];
tuletis=norm(Gtuletis,1) %=0.5244<1 sobib

x=-1.5;
y=2.5; %teise lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(3+y-x)) 1/(2*sqrt(3+y-x))];
tuletis=norm(Gtuletis,1) %=0.7663<1 sobib

x=2.5;
y=1.5; %kolmanda lõikepunkti koordinaadid
Gtuletis=[0 -1/sqrt(8-2*y)
    -1/(2*sqrt(3+y-x)) 1/(2*sqrt(3+y-x))];
tuletis=norm(Gtuletis,1) %=0.8008 sobib

%Lahendame HIM kasutades
z=[-3.5,-2.5] %esimese lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(1)=-sqrt(8-2*z(2));
    z(2)=-sqrt(3+z(2)-z(1));
    i=i+1;
end
lahend1HIM=z
sammud1HIM=i

z=[-1.5,2.5] %teise lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(1)=-sqrt(8-2*z(2));
    z(2)=sqrt(3+z(2)-z(1));
    i=i+1;
end
lahend2HIM=z
sammud2HIM=i

z=[2.5,1.5] %kolmanda lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(1)=sqrt(8-2*z(2));
    z(2)=sqrt(3+z(2)-z(1));
    i=i+1;
end
lahend3HIM=z
sammud3HIM=i

z=[3,-0.1] %neljanda lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(1)=sqrt(8-2*z(2));
    z(2)=z(1)+z(2)^2-3;
    i=i+1;
end
lahend4HIM=z
sammud4HIM=i

%Lahendame Newtoni meetodi abil
z=[-3.5;-2]; %NB! Alglähend veeruvektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    Ftuletis=[2*z(1) 2
        1 2*z(2)-1];
    z=z-inv(Ftuletis)*F(z)'; %kõik vektorid peavad olema veeruvektorid
    i=i+1;
end
lahend1NM=z'
sammud1NM=i

z=[-1.5;2.5] %teise lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    Ftuletis=[2*z(1) 2
        1 2*z(2)-1];
    z=z-inv(Ftuletis)*F(z)'; %kõik vektorid peavad olema veeruvektorid
    i=i+1;
end
lahend2NM=z'
sammud2NM=i

z=[2.5;1.5] %kolmanda lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    Ftuletis=[2*z(1) 2
        1 2*z(2)-1];
    z=z-inv(Ftuletis)*F(z)'; %kõik vektorid peavad olema veeruvektorid
    i=i+1;
end
lahend3NM=z'
sammud3NM=i

z=[3;-0.1] %neljanda lõikepunkti koordinaadid vektorina
i=0; %sammude arv
while norm(F(z),1)>10^-6
    Ftuletis=[2*z(1) 2
        1 2*z(2)-1];
    z=z-inv(Ftuletis)*F(z)'; %kõik vektorid peavad olema veeruvektorid
    i=i+1;
end
lahend4NM=z'
sammud4NM=i