% Harjutustund 3, ülesanne 3
% VÕRRANDI LAHENDAMINE HARILIKU ITERATSIOONIMEETODIGA
% f(x)=0
% 1) määrame alglähendi(d)
% 2) avaldame võrrandist f(x)=0 suuruse x
% saame kuju x=g(x)
% 3) leiame lähendite jada x0,x1,x2,...,xn->x*
% 4) hariliku it. meetodi eeskiri xn=g(xn-1)
% 5) uurime koondumise tingimust |g'(x)|<1
% kui koondumise tingimus ei ole täidetud, siis tuleb
% valida uus g(x)
% uurime koondumise tingimust alglähendite korral 

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

g=@(x) 1/8.*(x.^3+2);
x0=-3;
x1=g(-3)
x2=g(x1)
x3=g(x2)
% .... antud g(x)-i korral ei saa -3le vastavat lahendit kätte
% meetod hajub valitud g(x)-ga. Seega tuleb alglähendile -3
% valida uus g(x)

% uurime koondumise tingimust |g'(x)|<1 iga alglähendi korral
gtuletis=@(x) 3/8.*x.^2;
abs(gtuletis(-3)) % 3.3750>1, ei sobi
abs(gtuletis(0)) % 0<1, valitud g(x) sobib
abs(gtuletis(2.5)) % 2.3438>1, ei sobi

% leiame hariliku it. meetodiga alglähendile 0 vastava lahendi
x=0; % alglähend
sammud=0;
while abs(y(x))>10^(-5)
  x=g(x); % eeskiri
  sammud=sammud+1;
end
lahend2=x
sammud2=sammud

% leiame alglähenditele -3 ja 2.5 uue g(x)
uusg=@(x) nthroot(8*x-2,3);
uusgtuletis=@(x) 8/(3*nthroot((8*x-2)^2,3));
abs(uusgtuletis(-3)) % <1, sobib
abs(uusgtuletis(2.5)) % <1, sobib

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

x=2.5; % alglähend
sammud=0;
while abs(y(x))>10^(-5)
  x=uusg(x); % uus sobiv eeskiri
  sammud=sammud+1;
end
lahend3=x
sammud3=sammud