vuoi
o PayPal
tutte le volte che vuoi
Calcolo Numerico - Elaborato 1
Esempi d'uso:
<< [y,N]=espo(25,35) y = 7.200489933738553e+010 N = 73
<< [y,N]=espo(40) y = 2.353852668370183e+017 N = 98
Situazioni di errore:
<< [y,N]=espo(25,35,45) ??? Error using ==> espo Too many input arguments.
<< [y,N,M]=espo(25,35) ??? Error using ==> espo Too many output arguments.
<< [y,N]=espo ??? Error using ==> espo Nessun input specificato.
<< [y,N]=espo('x') ??? Error using ==> espo x deve essere un numero reale.
<< [y,N]=espo([1 2 3]) ??? Error using ==> espo x deve essere uno scalare.
<< [y,N]=espo(25,[1 2 3]) ??? Error using ==> espo TOL deve essere uno scalare.
<< [y,N]=espo(710) ??? Error using ==> espo Overflow.
<< [y,N]=espo(-710) ??? Error using ==> espo Underflow.
Test dei casi funzionanti:
<< [y,N]=espo(25,eps) y = 1.000000000000000e+000 N = 1
macchina>> [y,N]=espo(32,13)
y =7.896296018230850e+013
N =78% ESPO con esponente negativo e tolleranza maggiore dell’epsilon macchina>> [y,N]=espo(-32,14)
y =1.266416554909790e-014
N =81% ESPO senza tolleranza>> [y,N]=espo(32)
y =7.896296018268023e+013
N =85% ESPO con esponente uguale a zero>> [y,N]=espo(0)
y = 1
N =1% ESPO con tolleranza minore dell’epsilon macchina>> [y,N]=espo(4,18)
y =54.59815003314422
N =29
berragazzo 3/6
Calcolo Numerico - Elaborato 1
Confronto con il Matlab:
x ESPO con tolleranza massima EXP di Matlab
1 2.71828182845905 2.718281828459055
5 1.484131591025765e+00 1.484131591025766e+00
30 1.068647458152442e+013 1.068647458152446e+013
100 2.688117141816041e+043 2.688117141816136e+043
350 1.007090887027834e+152 1.007090887028080e+152
710 Overflow. Inf
-710 Underflow. 4.476286225675130e-309
Come si può notare dalla tabella, con l’aumentare di x le cifre esatte della funzione ESPOdiminuiscono rispetto alla funzione EXP di Matlab.
Inoltre la funzione ESPO nel caso x=-710 dà underflow mentre la funzione EXP dà un determinato valore perché quest'ultima gestisce isubnormal numbers. File espo.m: ```matlab function [y,N]=espo(x,TOL) % ESPO calcola l'esponenziale di x % Parametri di ingresso: % x = Valore dell'esponente % TOL = Tolleranza, numero di cifre esatte richieste % Parametri di uscita: % y = Risultato della funzione e^x % N = Numero di termini della serie % Esempi d'uso: tenendo conto di [S,n]=espo(x,TOL) si può avere % 1) Esponenziale con tolleranza % >> [y,N]=espo(25,35) % y = 7.200489933738553e+010 % N = 73 % 2) Esponenziale con la massima precisione % >> [y,N]=espo(40) % y = 2.353852668370183e+017 % N = 98 format long; if (nargin==0) error('Nessun input specificato.'); end if (ischar(x)==1) error('x deve essere un numero reale.'); end dimx=prod(size(x)); % Controllore dimensione di x if (dimx~=1) error('x deve essere uno scalare.'); end ```(nargin==1) %Massima precisione
berragazzo 4/6
Calcolo Numerico - Elaborato 1
TOL=eps;
elseif (ischar(TOL)==1)|(TOL<0)
error('TOL deve essere un numero naturale.');
end
TOL=power(10,-TOL);
end
TOL=max(TOL,eps); %Verifica per valori di TOL impossibili
dimTOL=prod(size(TOL)); % Controllore dimensione di TOL
if (dimTOL~=1)
deve essere uno scalare.');
error('TOL
endif abs(x)>(realmin/TOL) % TOL relativo ad x evitando underflow
TOL=abs(x)*TOL;
else
TOL=realmin;
end
y=1; % Algoritmo stabile per il calcolo di e^x
N=1;
add=abs(x);
while (add>(y*TOL))
y=y+add;
N=N+1;
add=(add*(abs(x)/N));
end
if(x<0)
y=1./y;
end
if (y==inf) %Verifica overflow
error('Overflow.');
end
if (y==0) %Verifica underflow
error('Underflow.');
end
berragazzo 5/6