%demonstrace metody tecen pro nelinearni rovnice
%spolu s odhadem radu metody

%nadefinujeme f(x) a budeme hledat reseni f(x)=0
f=inline('exp(x)-3');
df=inline('exp(x)');

%nadefinujeme celkovy pocet iteraci
iteraci=10;

%nadefinujeme pocatecni body omezujici reseni
xiplusjedna=5;
xi=0;

%do epsilon budeme ukladat odhad chyby, tedy rozdil poslednich dvou odhadu korene
clear epsilon

%do reseni budeme ukladat aktualni odhad reseni
clear reseni

%zacneme iterovat
for i=1:iteraci
	c=xiplusjedna-f(xiplusjedna)/df(xiplusjedna);
	epsilon(i)=abs(xi-xiplusjedna);
	xi=xiplusjedna;
	xiplusjedna=c;
	reseni(i)=c;
end;

%odhadem konecneho reseni je
koren=reseni(length(reseni))

%odhadem konecne chyby je
chyba=epsilon(length(epsilon))

%zobrazime vyvoj reseni v zavislosti na iteracich vlevo
subplot(131);
plot(1:iteraci,reseni);
title('Vyvoj reseni');
xlabel('iterace');
ylabel('reseni');

%zobrazime vyvoj chyby v zavislosti na iteracich uprostred
subplot(132);
plot(1:iteraci,epsilon);
title('Vyvoj chyby');
xlabel('iterace');
ylabel('\epsilon');

%zobrazime zavislost log epsilon_i+1 na log epsilon_i
subplot(133);
x=log10(epsilon(1:(length(epsilon)-1)));
y=log10(epsilon(2:(length(epsilon))));
plot(x,y);
title('log \epsilon_{i+1} na log \epsilon_i');
xlabel('log \epsilon_{i}');
ylabel('log \epsilon_{i+1}');

%provedeme fit daty primkou
p=polyfit(x,y,1);

%smernice (tedy i rad) je
disp(['Rad je ' num2str(p(1))]);
