% Harjutustund 4, ülesanne 4
y=@(x) x^3-6*x^2+3*atan(x)+3;
ytuletis=@(x) 3*x^2-12*x+3*1/(1+x^2);
fplot(y,[-1,7])
yline(0)
grid on
% alglähendid: -0.5, 1 ja 5.7
% Newtoni meetodiga 
x=-0.5;
sammud=0;
while abs(y(x))>10^(-5)
 x=x-y(x)/ytuletis(x); % Newtoni m. eeskiri
 sammud=sammud+1;
end
lahend1newton=x
sammud1newton=sammud

x=1;
sammud=0;
while abs(y(x))>10^(-5)
 x=x-y(x)/ytuletis(x); % Newtoni m. eeskiri
 sammud=sammud+1;
end
lahend2newton=x
sammud2newton=sammud

x=5.7;
sammud=0;
while abs(y(x))>10^(-5)
 x=x-y(x)/ytuletis(x); % Newtoni m. eeskiri
 sammud=sammud+1;
end
lahend3newton=x
sammud3newton=sammud
% modifitseeritud Newtoni meetodiga
x=-0.5;
sammud=0;
while abs(y(x))>10^(-5)
 x=x-y(x)/ytuletis(-0.5); % modifitseeritud Newtoni m. eeskiri
 sammud=sammud+1;
end
lahend1newtonmod=x
sammud1newtonmod=sammud

x=1;
sammud=0;
while abs(y(x))>10^(-5)
 x=x-y(x)/ytuletis(1); % mod Newtoni m. eeskiri
 sammud=sammud+1;
end
lahend2newtonmod=x
sammud2newtonmod=sammud

x=5.7;
sammud=0;
while abs(y(x))>10^(-5)
 x=x-y(x)/ytuletis(5.7); % mod. Newtoni m. eeskiri
 sammud=sammud+1;
end
lahend3newtonmod=x
sammud3newtonmod=sammud
[sammud1newton,sammud2newton,sammud3newton]
[sammud1newtonmod,sammud2newtonmod,sammud3newtonmod]

% lahendame võrrandi hariliku iteratsioonimeetodiga
% x=g(x)
g=@(x) nthroot(6*x^2-3*atan(x)-3,3);
gtuletis=@(x) 1/(3*nthroot((6*x^2-3*atan(x)-3)^2,3))*(12*x-3/(1+x^2));
% uurime koondumise tingimust |g'(x)|<1
abs(gtuletis(-0.5)) % >1, seega tuleb alglähendi -0.5 jaoks leida
% uus g(x)
abs(gtuletis(1)) % >1, ei sobi
abs(gtuletis(5.7)) % <1, sobib. Valitud g(x)-ga koondub meetod 

% leiame alglähendile 5.7 vastava lahendi
x=5.7;
sammud=0;
while abs(y(x))>10^(-5)
 x=g(x); % hariliku it. meetodi eeskiri
 sammud=sammud+1;
end
lahend3harilik=x
sammud3harilik=sammud

% alglähendite -0.5 ja 1 jaoks leiame koonduva hariliku it. meetodi
% valime uue g(x)-i
uusg=@(x) sqrt(1/6*(x^3+3*atan(x)+3));
uusgtuletis=@(x) 1/(2*sqrt(1/6*(x^3+3*atan(x)+3)))*1/6*(3*x^2+3/(1+x^2));
abs(uusgtuletis(-0.5)) % <1, sobib
abs(uusgtuletis(1)) % <1, sobib
% alglähendite -0.5 ja 1 jaoks on leitud koonduv hariliku it. meetodi kuju
x=-0.5;
sammud=0;
while abs(y(x))>10^(-5)
 x=-uusg(x); % uus hariliku it. meetodi eeskiri.
 % lahend on - märgiga, siis uusg(x) ette - märk
 sammud=sammud+1;
end
lahend1harilik=x
sammud1harilik=sammud

x=1;
sammud=0;
while abs(y(x))>10^(-5)
 x=uusg(x); % uus hariliku it. meetodi eeskiri
 sammud=sammud+1;
end
lahend2harilik=x
sammud2harilik=sammud

[sammud1newton,sammud2newton,sammud3newton]
[sammud1newtonmod,sammud2newtonmod,sammud3newtonmod]
[sammud1harilik,sammud2harilik,sammud3harilik]