% Tund nr 7, ülesanne 1

% lahendame võrrandisüsteemi
% leiame alglähendid jooniselt
ezplot('20*x^2=1-2*x^3+4*y^3',[-2,4,-2,5])
hold on 
grid on
m=ezplot('2*x^3=3*y^2+10*y-5',[-2,4,-2,5])
set(m,'color','r')
hold off

% jooniselt on näha, et alglähenditeks võime võtta
%(-0.3;0.5) ja (0.3;0.5) ja (3.7;4.5)

% lahendame võrrandisüsteemi kõigepealt Newtoni meetodiga
% defineerime võrrandisüsteemile vastava vektorfunktsiooni F,
% kus x=z(1) ja y=z(2)
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];
%1) lahendame esimese alglähendi korral
z=[-0.3;0.5]; % siin ka veeruvektor
i=0;
while norm(F(z),1)>10^-6
    Ftuletis=[40*z(1)+6*z(1)^2,-12*z(2)^2;6*z(1)^2,-6*z(2)-10];
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend1n=z
sammud1n=i
%2) lahendame teise alglähendi korral
z=[0.3;0.5]; % siin ka veeruvektor
i=0;
while norm(F(z),1)>10^-6
    Ftuletis=[40*z(1)+6*z(1)^2,-12*z(2)^2;6*z(1)^2,-6*z(2)-10];
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend2n=z
sammud2n=i
%3) lahendame kolmanda alglähendi korral
z=[3.7;4.5]; % siin ka veeruvektor
i=0;
while norm(F(z),1)>10^-6
    Ftuletis=[40*z(1)+6*z(1)^2,-12*z(2)^2;6*z(1)^2,-6*z(2)-10];
    z=z-inv(Ftuletis)*F(z);
    i=i+1;
end
lahend3n=z
sammud3n=i

% lahendame nüüd võrrandisüsteemi hariliku iteratsioonimeetodiga
% siin on tegemist reavektoritega!
% defineerime F-i
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];
% uurime, kas leitud G sobib mõne alglähendi korral
x=-0.3;
y=0.5;
tuletisG=[1/(3*nthroot(1/16*(20*x^2-1+2*x^3)^2,3))*1/4*(40*x+6*x^2),0;0,1/(3*nthroot(1/4*(3*y^2+10*y-5)^2,3))*1/2*(6*y+10)];
norm(tuletisG,1) % ei sobi
x=0.3;
y=0.5;
tuletisG=[1/(3*nthroot(1/16*(20*x^2-1+2*x^3)^2,3))*1/4*(40*x+6*x^2),0;0,1/(3*nthroot(1/4*(3*y^2+10*y-5)^2,3))*1/2*(6*y+10)];
norm(tuletisG,1) % ei sobi
x=3.7;
y=4.5;
tuletisG=[1/(3*nthroot(1/16*(20*x^2-1+2*x^3)^2,3))*1/4*(40*x+6*x^2),0;0,1/(3*nthroot(1/4*(3*y^2+10*y-5)^2,3))*1/2*(6*y+10)];
norm(tuletisG,1) % sobib kolmanda alglähendi korral
%3) lahendame kolmanda alglähendi korral HIMiga
z=[3.7,4.5];
i=0;
while norm(F(z),1)>10^-6
    z(1)=nthroot(1/2*(3*z(2)^2+10*z(2)-5),3);
    z(2)=nthroot(1/4*(20*z(1)^2-1+2*z(1)^3),3);
    i=i+1;
end
lahend3h=z
sammud3h=i
lahend3=[lahend3n',lahend3h]
sammud3=[sammud3n',sammud3h]
% valisime uue G ja uurime nüüd ||G'(x)|| < 1?
x=-0.3;
y=0.5;
uustuletisG=[1/(2*sqrt(1/20*(1-2*x^3+4*y^3)))*1/20*(-6*x^2),1/(2*sqrt(1/20*(1-2*x^3+4*y^3)))*1/20*12*y^2;1/10*(6*x^2),1/10*(-6*y)];
norm(uustuletisG,1) % sobib, sest ||G'(x)||<1
x=0.3;
y=0.5;
uustuletisG=[1/(2*sqrt(1/20*(1-2*x^3+4*y^3)))*1/20*(-6*x^2),1/(2*sqrt(1/20*(1-2*x^3+4*y^3)))*1/20*12*y^2;1/10*(6*x^2),1/10*(-6*y)];
norm(uustuletisG,1) % sobib, sest ||G'(x)||<1
%1) lahendame esimese alglähendi korral HIMiga
z=[-0.3,0.5];
i=0;
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
lahend1h=z
sammud1h=i
lahend1=[lahend1n',lahend1h]
sammud1=[sammud1n',sammud1h]
%2) lahendame teise alglähendi korral HIMiga
z=[0.3,0.5];
i=0;
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
lahend2h=z
sammud2h=i
lahend2=[lahend2n',lahend2h]
sammud2=[sammud2n',sammud2h]