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

% 1) leiame jooniselt alglähendid
y=@(x) x.^3-8.*x+2;
fplot(y)
yline(0) % st y=0
grid on
% jooniselt on näha, et alglähenditeks võime võtta x=-3, x=0.25 ja x=2.75

% 2) avaldame võrrandist x^3-8x+2=0 suuruse x.
% saame hariliku it. meetodi kuju: x=g(x)
% g(x)=1/8*(x^3+2)

% 3) uurime koondumise tingimust |g'(x)|<1 iga alglähendi korral
% kui >1, siis leiame alglähendi jaoks teise sobiva hariliku it. meetodi
% kuju, st x=g(x)
%gtuletis=3/8*x^2;

% kontrollime, kas alglähendi x0=-3 korral |g'(x)|<1
x=-3;
abs(3/8*x^2) % saime 3.3750>1, antud alglähendi jaoks ei sobi valitud g(x)

% kontrollime, kas alglähendi x0=0.25 korral |g'(x)|<1
x=0.25;
abs(3/8*x^2) % sobib valitud g(x), kuna |g'(x)|<1

% kontrollime, kas alglähendi x0=2.75 korral |g'(x)|<1
x=2.75;
abs(3/8*x^2) % selle alglähendi korral valitud g(x) ei sobi, kuna |g'(x)|>1

% 4) leiame alglähendile 0.25 vastava lahendi
x=0.25;
i=0;
while abs(y(x))>10^(-7)
  x=1/8*(x^3+2);
  i=i+1; 
end
lahend2=x
sammud=i

% 5) valime esimese ja viimase alglähendi jaoks uue g(x)-i
% g(x)=kuupjuur(8x-2)
% uurime, kas alglähendite korral |g'(x)|<1.
x=-3;
abs(8/(3*nthroot((8*x-2)^2,3))) % 0.3038<1
x=2.75;
abs(8/(3*nthroot((8*x-2)^2,3))) % 0.3619<1

% 6) leiame alglähenditele -3 ja 2.75 vastavad lahendid
x=-3;
i=0;
while abs(y(x))>10^(-7)
  x=nthroot(8*x-2,3);    % x=g(x)
  i=i+1; 
end
lahend1=x
sammud=i


x=2.75;
i=0;
while abs(y(x))>10^(-7)
  x=nthroot(8*x-2,3);    % x=g(x)
  i=i+1; 
end
lahend3=x
sammud=i