% Harjutustund 3, ülesanne 3
% võrrandi lahendamine hariliku iteratsioonimeetodiga
% võrrand x^3-8x+2=0

% defineerime funktsiooni
y=@(x) x^3-8*x+2;

% 1) alglähendid jooniselt 
fplot(y)
% x-telg ehk y=0
yline(0) % y=0
grid on
% alglähenditeks võime võtta -3, 0 ja 2.5
% 2) avaldame võrrandist x^3-8x+2=0 suuruse x
% saame hariliku iteratsioonimeetodi kuju x=g(x)
% x=1/8*(x^3+2)
g=@(x) 1/8*(x^3+2);

% 3) uurime, kas koondumise tingimus |g'(x)|<1 on täidetud
% alglähendite korral
gtuletis=@(x) 3/8*x^2;
abs(gtuletis(-3)) % 3.3750>1, ei sobi, tuleb valida uus g(x)
abs(gtuletis(0)) % 0<1, sobib
abs(gtuletis(2.5)) % 2.3438>1, ei sobi, tuleb valida uus g(x)

% 4) leiame alglähendile 0 vastava lahendi x*
% valime sobiva täpsuse, olgu selleks epsilon=10^-4
% senimaani rakendame harilikku it. meetodit, kuni kahe järjestikuse
% lähendi vahe on <10^-4

x=0;
sammud=0;
while abs(y(x))>10^(-4)
  x=g(x); % eeskiri
  sammud=sammud+1;
end
lahend2=x
sammud2=sammud

% 5) leiame uue g(x)-i
uusg=@(x) nthroot(8*x-2,3);
uusgtuletis=@(x) 8/(3*nthroot((8*x-2)^2,3));
% uurime koondumise tingimust -3 ja 2.5 korral
abs(uusgtuletis(-3)) % <1, sobib
abs(uusgtuletis(2.5)) % <1, sobib
% leiame alglähenditele -3 ja 2.5 vastavad lahendid

x=-3;
sammud=0;
while abs(y(x))>10^(-4)
  x=uusg(x); % eeskiri, uus g(x)
  sammud=sammud+1;
end
lahend1=x
sammud1=sammud

x=2.5;
sammud=0;
while abs(y(x))>10^(-4)
  x=uusg(x); % eeskiri, uus g(x)
  sammud=sammud+1;
end
lahend3=x
sammud3=sammud