clear %vahemälu puhtaks

%Joonis alglähendite leidmiseks
ezplot('20*x^2=1-2*x^3+4*y^3')
hold on
grid on
h=ezplot('2*x^3=3*y^2+10*y-5')
set(h,'color','r')
legend('20*x^2=1-2*x^3+4*y^3','2*x^3=3*y^2+10*y-5')
title('Joonis alglähendite leidmiseks')
hold off

%Jooniselt on näha, et süsteemil on 3 lahendit. Valime lõikepunktide
%koordinaadid alglähenditeks. Meile sobivad
%(-0.5;0.5) ja (0.5;0.5) ja (3.5;4.5)

%Kontrollime koonduvust
x=3.5;
y=4.5;
G(1,1)=0.25*(40*x+6*x^2)/(3*nthroot((0.25*(20*x^2-1+2*x^3))^2,3));
G(1,2)=0;
G(2,1)=0;
G(2,2)=0.5*(6*y+10)/(3*nthroot((0.5*(3*y^2+10*y-5))^2,3));
tuletis=norm(G,1)


%Defineerime võrrandisüsteemist vektorfunktsiooni, mille argumendiks on
%vektor z=(z(1),z(2)), kus z(1)=x ja z(2)=y
F=@(z)[20*z(1)^2-1+2*z(1)^3-4*z(2)^3;2*z(1)^3-3*z(2)^2-10*z(2)+5];
%tegime veeruvektori, tõime kõik liikmed ühele poole võrdusmärki


%Kontrollime HIM koonduvust
x=-0.5; 
y=0.5; %esimese lõikepunkti koordinaadid
G(1,1)=-3*x^2/(20*sqrt(1/20*(1-2*x^3+4*y^3)));
G(1,2)=6*y^2/(20*sqrt(1/20*(1-2*x^3+4*y^3)));
G(2,1)=0.6*x^2;
G(2,2)=-0.6*y;
tuletis=norm(G,1); %kasutame 1-normi

%Leiame esimese lahendi HIM kasutades
z=[-0.5,0.5]; %esimese lõikepunkti koordinaadid
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(1)=-sqrt(1/20*(1-2*z(1)^3+4*z(2)^3));
    z(2)=1/10*(2*z(1)^3-3*z(2)^2+5);
    i=i+1;
end
lahend1HIM=z
sammud1HIM=i

%Leiame teise lahendi HIM kasutades
z=[0.5,0.5]; %teise lõikepunkti koordinaadid
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(1)=sqrt(1/20*(1-2*z(1)^3+4*z(2)^3));
    z(2)=1/10*(2*z(1)^3-3*z(2)^2+5);
    i=i+1;
end
lahend2HIM=z
sammud2HIM=i

%Leiame kolmanda lahendi HIM kasutades
z=[3.5,4.5]; %alglähend jooniselt
i=0; %sammude arv
while norm(F(z),1)>10^-6
    z(2)=nthroot(0.25*(20*z(1)^2-1+2*z(1)^3),3);
    z(1)=nthroot(0.5*(3*z(2)^2+10*z(2)-5),3);
    i=i+1;
end
lahend3HIM=z
sammud3HIM=i

%Lahendame süsteemi Newtoni meetodi abil
z=[-0.5;0.5]; %esimene lõikepunkt jooniselt
%NB! Veeruvektor
i=0;
while norm(F(z),1)>10^-6
    Ftuletis(1,1)=40*z(1)+6*z(1)^2;
    Ftuletis(1,2)=-12*z(2)^2;
    Ftuletis(2,1)=6*z(1)^2;
    Ftuletis(2,2)=-6*z(2)-10;
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend1NM=z
sammud1NM=i
lahend1=[lahend1HIM lahend1NM' sammud1HIM sammud1NM]

%Lahendame võrrandisüsteemi Newtoni meetodi abil
%esimene lahend
z=[-0.5;0.5]; %alglähend jooniselt, NB! Veeruvektorina!
i=0; %sammude lugeja
while norm(F(z),1)>10^-6
    %defineerime jakobiaani
    Ftuletis(1,1)=40*z(1)+6*z(2)^2;
    Ftuletis(1,2)=-12*z(2)^2;
    Ftuletis(2,1)=6*z(1)^2;
    Ftuletis(2,2)=-6*z(2)-10;
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend1NM=z' %teeme veeruvektorist reavektori
sammud1NM=i
%koondvastus vektorina
lahend1=[lahend1HIM lahend1NM sammud1HIM sammud1NM]

%teine lahend
z=[0.5;0.5]; %alglähend jooniselt, NB! Veeruvektorina!
i=0; %sammude lugeja
while norm(F(z),1)>10^-6
    %defineerime jakobiaani
    Ftuletis(1,1)=40*z(1)+6*z(2)^2;
    Ftuletis(1,2)=-12*z(2)^2;
    Ftuletis(2,1)=6*z(1)^2;
    Ftuletis(2,2)=-6*z(2)-10;
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend2NM=z' %teeme veeruvektorist reavektori
sammud2NM=i
%koondvastus vektorina
lahend2=[lahend2HIM lahend2NM sammud2HIM sammud2NM]

%kolmas lahend
z=[3.5;4.5]; %alglähend jooniselt, NB! Veeruvektorina!
i=0; %sammude lugeja
while norm(F(z),1)>10^-6
    %defineerime jakobiaani
    Ftuletis(1,1)=40*z(1)+6*z(2)^2;
    Ftuletis(1,2)=-12*z(2)^2;
    Ftuletis(2,1)=6*z(1)^2;
    Ftuletis(2,2)=-6*z(2)-10;
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend3NM=z' %teeme veeruvektorist reavektori
sammud3NM=i
%koondvastus vektorina
lahend3=[lahend3HIM lahend3NM sammud3HIM sammud3NM]