
function demo_ellipse

% INTEGRANDA (PERIMETRO ELLISSE)
f=@(x) (1/(2*pi))*sqrt(1-0.36*(sin(x)).^2);

% INTEGRALE ESATTO DI "f" IN [0,2*pi]
I=(5734161139222659*ellipticE(9/25))/9007199254740992;

% METODO UTILIZZARE
% metodo=1: trapezi composta, metodo=2: simpson composta.
metodo=2;

% APPLICAZIONE DI TRAPEZI COMPOSTA PER VARI "N".
% a) Per ogni "N=2,4,8,...,512", viene registrato ne vettore "errore"
% l'errore assoluto compiuto tra integrale esatto e quello numerico.
% b) Viene stampato a video il numero "N" e l'errore corrispondente, con
%    rispettivamente 2 cifre decimali, 1 cifra prima della virgola e 1 dopo
%    virgola, in notazione esponenziale.
errore=[];

NV=[2 4 8 16 32 64 128 256 512]';

for N=[2 4 8 16 32 64 128 256 512]

    % Vettore dei nodi "x" e vettore dei pesi "w".
    if metodo == 1
        [x,w]=trapezi_composta(N,0,2*pi);
    else
        [x,w]=simpson_composta(N,0,2*pi);
    end

    % Valutazione funzione nei nodi.
    fx=feval(f,x);

    % Calcolo degli integrali.
    I_num=w'*fx;

    % Valutazione dell'errore.
    errore(end+1,1)=abs(I-I_num);

    % Stampa dell'errore.
    fprintf('\n \t N: %2.0f errore: %1.1e',N,errore(end));
end

fprintf('\n');
if metodo == 1
        fprintf('\n \t * Metodo: formula dei trapezi composta.');
    else
        fprintf('\n \t * Metodo: formula di Cavalieri-Simpson composta.');
    end
fprintf('\n \n');





function [x,w]=trapezi_composta(N,a,b)

% FORMULA DEI TRAPEZI COMPOSTA.
% INPUT:
% N: NUMERO SUBINTERVALLI.
% a, b: ESTREMI DI INTEGRAZIONE.
% OUTPUT:
% x: NODI INTEGRAZIONE.
% w: PESI INTEGRAZIONE (INCLUDE IL PASSO!).

h=(b-a)/N;             % PASSO INTEGRAZIONE.
x=a:h:b; x=x';         % NODI INTEGRAZIONE.

w=ones(N+1,1);         % PESI INTEGRAZIONE.
w(1)=0.5; w(N+1)=0.5;
w=w*h;



function [x,w]=simpson_composta(N,a,b)

% FORMULA DI SIMPSON COMPOSTA.
% INPUT:
% N: NUMERO SUBINTERVALLI.
% a, b: ESTREMI DI INTEGRAZIONE.
% OUTPUT:
% x: INTEGRAZIONE.
% w: PESI INTEGRAZIONE (INCLUDE IL PASSO!).

h=(b-a)/N;             % AMPIEZZA INTERVALLO.
x=a:(h/2):b; x=x';     % NODI INTEGRAZIONE.

w=ones(2*N+1,1);           % PESI INTEGRAZIONE.
w(3:2:2*N-1,1)=2*ones(length(3:2:2*N-1),1);
w(2:2:2*N,1)=4*ones(length(2:2:2*N),1);
w=w*h/6;