function dg = demo_gaussint()
%
% Integrace pomoci Gaussovych kvadratur
%

%% Funkce kterou chceme integrovat
f = inline('sin(x)*exp(cos(x))','x');

%% Integracni meze
a = 0;
b = pi;

%% Integracni formule na 15 bodech od -1 do 1.
%% Na kazdem radku je uzel a prislusna vaha
vzorec = [
  -0.987992518	 0.03075324221;
  -0.9372733924	 0.07036604699;
  -0.8482065834	 0.1071592202;
  -0.7244177314	 0.139570678;
  -0.5709721726	 0.1662692057;
  -0.3941513471	 0.1861609998;
  -0.201194094	 0.1984314853;
   0.0	         0.201194094;
   0.201194094   0.1984314853;
   0.3941513471	 0.1861609998;
   0.5709721726	 0.1662692057;
   0.7244177314	 0.139570678;
   0.8482065834	 0.1071592202;
   0.9372733924	 0.07036604699;
   0.987992518	 0.03075324221 ];

m = size(vzorec,1);   % pocet bodu

uzly = vzorec(:,1);
vahy = vzorec(:,2);


integral = 0;

%% Vazeny soucet
for i=1:m
    %% Body jsou preskalovane z (-1,1) na (a,b)
    integral = integral + vahy(i) * f( ( (b-a)*uzly(i) + (a+b) )/2 );
end

integral = integral * (b-a)/2;

%% Analyticke reseni (jen pro vypocet chyby)
fint   = inline('-exp(cos(x))','x');
presne = fint(b)-fint(a);

%% Relativni chyba
chyba  = abs(integral-presne) / max(abs(presne),1e-30);

disp(['Vysledek je ' num2str(integral) ', rel.chyba je ' num2str(chyba)]);


end
