% Demo za racunanje vrednosti polinoma in 
% ocene za natancnost izracunanih vrednosti

% (razdelek 1.6.3 v knjigi Razsirjen uvod v numericne metode)

% koeficienti polinoma (x-2)^9 so 
a = [1 -18 144 -672 2016 -4032 5376 -4608 2304 -512]; % koeficienti polinoma

% zacetni interval je 1.93:0.0003:2.07
x = 1.93:0.0003:2.07;

cla
plot([],[]);
disp('Pritisni Enter');
pause

y = horner(a,x);

plot(x,y,'b','LineWidth',2)
title('Racunanje polinoma (x-2)^9 po Hornerju v blizini nicle','FontSize',16)
xlabel('','FontSize',14)
hold on 
pause

ytocno = (x-2).^9;
plot(x,ytocno,'r','LineWidth',2)
legend({'Hornerjev algoritem','Tocno (x-2)^9'},'FontSize',16)
hold off

disp('Pritisni Enter');
pause

%% Napake niso povsem nakljucne

k = 0:2000;
t = 2+k*2^(-52);
y = horner(a,t);
plot(k,y,'.')
xlabel('x=2+k*2^{-52}','FontSize',14)
disp('Pritisni Enter');
pause

% sedaj gremo še na ocene

x = 1.93:0.0001:2.07;
ytocno = (x-2).^9;

[y,err_ocene] = horneroc(a,x);  % po Hornerju izracunane vrednosti skupaj z oceno absolutne napake

relnapake = abs(y-ytocno)./abs(ytocno);  % relativne napake rezultatov. 
                                         % -log10(relnapake) je stevilo tocnih decimalnih mest
relocene = -err_ocene./abs(ytocno);      % ocene relativne napake

plot(x,real(log10(relocene)), 'b-','LineWidth',2)
hold on
disp('Pritisni Enter');
pause
plot(x,real(log10(relnapake)), 'r.')
legend({'Ocena','Dejanska napaka'},'FontSize',16)
hold off
disp('Pritisni Enter');
pause

% Ocene, 2. del

x = -2:0.002:6;  %  gledamo interval [-2,6];

tocen_y = (x-2).^9;  % stabilno izracunane vrednosti

[num_y,err_ocene] = horneroc(a,x);  % po Hornerju izracunane vrednosti skupaj z oceno absolutne napake

relnapake = abs(num_y-tocen_y)./abs(tocen_y);  % relativne napake rezultatov. -log10(relnapake) je
                                             % stevilo tocnih decimalnih mest
relocene = -err_ocene./abs(tocen_y);   % ocene relativne napake

                              plot(x,real(log10(relocene)), 'b-','LineWidth',2)
hold on
disp('Pritisni Enter');
pause
plot(x,real(log10(relnapake)), 'r.')
legend({'Ocena','Dejanska napaka'},'FontSize',16)
hold off
