clear %vahemälu puhtaks
%Joonis alglähendite leidmiseks
ezplot('x=y^2-1')
hold on
grid on
h=ezplot('y=x^2')
set(h,'color','r')
hold off
legend('x=^2-1','y=x^2')
%Jooniselt on näha 2 lõikepunkti => süsteemil on 2 lahendit. Valime
%lõikepunktide koordinaadid alglähenditeks. Meile sobivad (-0.5,0.5) ja
%(1.2,1.5).

%Defineerime süsteemist vektorfunktsiooni, mille argumendiks on vektor z,
%kus z(1)=x ja z(2)=y.
F=@(z)[z(1)-z(2)^2+1,z(2)-z(1)^2];

%Kontrollime HIMi koonduvust, kui esimeset võrrandist x=y^2-1, siis
%g1=y^2-1. Teisest võrrandist saame g2=x^2. Leiame vektorfunktsiooni G
%Jacobi maatriksi:
%Gtuletis=[0 2*y
%    2*x 0]
x=-0.5;
y=0.5; %alglähendid jooniselt
Gtuletis=[0 2*y
    2*x 0]
tuletis1=norm(Gtuletis,1) %kasutame 1-normi
%teine lahend
x=1.2;
y=1.5;
Gtuletis=[0 2*y
    2*x 0]
tuletis2=norm(Gtuletis,1)%=3>1 ei sobi
 %kontrollime igaks juhuks teise avaldamise ka ära, kus g1=+-sqrt(x+1) ja
 %g2=+-sqrt(y)
 x=-0.5;
 y=0.5;
 Gtuletis=[1/(2*sqrt(x+1)) 0
     0 1/(2*sqrt(y))];
 tuletis11=norm(Gtuletis,1)%=0.7071 SOBIB

x=1.2;
 y=1.5;
 Gtuletis=[1/(2*sqrt(x+1)) 0
     0 1/(2*sqrt(y))];
 tuletis22=norm(Gtuletis,1)%=0.4082 SOBIB

 %Mõlemad Jacobi maatriksi normid sobivad => arvutamiseks kasutame teist
 %avaldamist
 z=[-0.5,0.5]; %alglähend vektorina
 i=0; %sammude arv
while norm(F(z))>10^-6
    z(1)=-sqrt(z(2)); %otsime neg. x
    z(2)=sqrt(z(1)+1);
    i=i+1;
end
vastus1=z
sammud1=i

z=[1.2,1.5]; %alglähend vektorina
 i=0; %sammude arv
while norm(F(z))>10^-6
    z(1)=sqrt(z(2)); %otsime pos. x-i
    z(2)=sqrt(z(1)+1);
    i=i+1;
end
vastus2=z
sammud2=i

%Lahendame Newtoni meetodi abil.
%Defineerime F(z), kus z on vektor, milles z(1)=x ja z(2)=y ja F(z) Jacobi
%maatriksi
F=@(z)[z(1)-z(2)^2+1;z(2)-z(1)^2];
%Jacobi maatriks
%F'=[1 -2*z(2)
%   -2*z(1) 1]
i=0;
z=[-0.5;0.5]; %alglähend veeruvektorina
while norm(F(z))>10^-6
    Ftuletis=[1 -2*z(2)
            -2*z(1) 1]; %Ftuletis leitakse iga kord uuesti
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
vastusNM1=z'
sammudNM1=i

%teine lahend
i=0;
z=[1.2;1.5]; %alglähend veeruvektorina
while norm(F(z))>10^-6
    Ftuletis=[1 -2*z(2)
            -2*z(1) 1]; %Ftuletis leitakse iga kord uuesti
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
vastusNM2=z'
sammudNM2=i

%Modifitseeritud Newtoni meetod
z=[-0.5;0.5]% esimene alglähend jooniselt
i=0; %sammude arv
Ftuletis=[1 -2*z(2)
            -2*z(1) 1]; %Ftuletis leitakse ainult alglähendi korral
while norm(F(z))>10^-6
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
vastusMNM1=z'
sammudMNM1=i

z=[1.2;1.5]% teine alglähend jooniselt
i=0; %sammude arv
Ftuletis=[1 -2*z(2)
            -2*z(1) 1]; %Ftuletis leitakse ainult alglähendi korral
while norm(F(z))>10^-6
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
vastusMNM2=z'
sammudMNM2=i