function output = func_stirling( N )
%   Commento
%   
%   funzione equivalente allo script script_stirling.m
%   che accetta in ingresso il numero N di punti su cui 
%   effettuare il calcolo.
%
%   sintassi: output = func_stirling( N )
%   output e' lo "handle" al plot creato

%   NON si inizia con CLEAR in una function!!!!
n = 1:N;


% calcolo il fattoriale di n ( n! )
nf = factorial(n);

% approssimazione di Stirling
Sn = sqrt( 2*pi*n ) .* ( n/exp(1) ).^n;

%   calcolo l'errore assoluto
Eass = abs ( Sn - nf );

%   calcolo l'errore relativo
Erel = Eass ./ nf ; 


%   apro la figura 1 in cui voglio inserire il grafico 
figure(1)

%   cancella eventuali grafici precedenti
clf
%   tiene sulla figura tutti i plot
hold on
%   traccia la linea del grafico
output = plot( n, Erel, 'k-' )
%   rappresenta con simboli i puntoi calcolati
plot( n, Erel, 'r*' )

%   introduco le etichette degli assi
xlabel( '\itn', 'FontSize', 16)
ylabel( 'sin({\itE_{rel}})', 'FontSize', 16, 'Rotation', 0)

%   introduco titolo
title('{\bfErrore relativo per l''approssimazione di Stirling}')


%   attivo il reticolo di rifermento
grid on

%  NON uso assi monometrici
%axis equal
%   restringe gli assi alla prozione disegnata
axis tight

%   Predispongo a schermo la tabella dei dati

clc

divisore = '*******************************************************************';

disp(divisore)
fprintf('n \t   n!\t\t   S(n) \t Eass \t\t Erel\n')
disp(divisore)

fprintf('%d \t %12d \t %11g \t %8.3g \t %g\n', [ n; nf; Sn; Eass; Erel ] )


% stampa in un file i dati

%   aprire un file in scrittura
fid = fopen('stirling.txt', 'w' );
% scrivo nel file indentificato da fid 
fprintf(fid,'%d \t %12d \t %11g \t %8.3g \t %g\n',...
    [ n; nf; Sn; Eass; Erel ] );
%   CHIUDERE IL FILE
fclose(fid);






