
function demo_diff1

m=4;

h0=1/10;

N0=1;
N=N0*2.^(0:m-1);
mm=2;

example=1;

switch example
    case 1
        a=0; f=@(x) exp(x); sol=exp(a);
    case 2
        a=5; f=@(x) 1./(1+x^2);
        f1=@(x) (-2*x)./(1+x^2).^2; sol=feval(f1,a);
            case 3
        a=pi/4; f=@(x) sin(x);
        f1=@(x) cos(x); sol=feval(f1,a);
end

% prima riga
for ii=1:m
    Ni=N(ii);
    h=h0/Ni;
    diffi=(feval(f,a+h)-feval(f,a-h))/(2*h);
    I(ii,1)=diffi;
end


% righe successive
for k=1:m
    for ii=1:k
        I(ii,k+1)=NaN;
    end
    prev_col=I(k:m,k);
    curr_col=(2^(mm*k)*prev_col(2:end)-prev_col(1:end-1))/(2^(mm*k)-1);
    I(k+1:end,k+1)=curr_col;
end

format short e
h=h0./N';
A=[h I];
for ii=1:m
    for jj=1:m+1
        if isnan(A(ii,jj)) == 1
            fprintf('$$ &');
        else
            fprintf('$%1.15e$ &',A(ii,jj));
        end
    end
    fprintf(' \\\\\n \t');
end



fprintf('\n \n');


format short e
errs=abs(I-sol);
h=h0./N';
A=[h errs];
for ii=1:m
    for jj=1:m+1
        if isnan(A(ii,jj)) == 1
            fprintf('$$ &');
        else
            fprintf('$%1.1e$ &',A(ii,jj));
        end
    end
    fprintf(' \\\\\n \t');
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;

