|
Appunti informatica |
|
Visite: 1819 | Gradito: | [ Picolo appunti ] |
Leggi anche appunti:Il computer al servizio del progresso dell'umanitàIl computer al servizio del progresso dell'umanità La nostra era moderna, Architettura 68000dArchitettura 68000d Il 68000 possiede i tipi binari Byte, Word, Longword La comunicazione multimediale1.1 Introduzione La comunicazione multimediale è un campo in continua |
Calcolo dell'Esponenziale
Scopo
Calcolo dell'esponenziale tramite la determinazione della n-ma somma della serie esponenziale.
Specifiche e Parametri
sum=espon(x)
Parametro |
Tipo |
Input/output |
Descrizione |
x |
Reale (fp) |
Input |
Numero reale del sistema floating point positivo o negativo. |
k |
Intero |
Input |
Valore della Tolleranza |
sum |
Reale (fp) |
Output |
Risultato ottenuto dalla somma. |
Routine Ausiliarie
y = epsmac(x) (per determinare il valore della massima precisione relativa del sistema)
Descrizione
L'algoritmo calcola la somma n-ma della serie esponenziale mediante sviluppo in serie di Taylor, determinando in run-time il numero delle somme da effettuare per avere il risultato più accurato possibile. La somma si arresta automaticamente al termine n-mo definito come il più piccolo elemento che da contributo al valore della somma precedente.
In caso di segno negativo dell'esponente l'algoritmo procede calcolando normalmente la serie, come se l'esponente fosse positivo, ed alla fine ne calcola il reciproco.
Complessità ed Accuratezza
L'accuratezza dipende dalla macchina su cui viene eseguito l'algoritmo. Per evitare una perdita di cifre significative dovute alla cancellazione catastrofica, pochè otterremmo una serie a segni alterni, nel caso in cui x<0 si è voluto porre e^(-x)=1/e^x.
T(n) = O(n)
Indicatori di errore
Errore dovuto all'inserimento dei dati:
- Mancato Inserimento dell'esponente.
- Inserimento di un carattere come esponente.
- Inserimento di un esponte al di fuori dell'intervallo
[-709, 709]
Errore nell'inserimento della Tolleranza:
- Inserimento di tolleranza negativa
- Inserimento di un vettore per la tolleranza
- Inserimento di un carattere come tolleranza
Testo della Funzione
function sum=espon(x,k)
%Controllo errore nell'inserimento dei dati: Parametri non inseriti
if (nargin==0)
error('Non hai Inserito il Valore di x'
end
%Controllo errore nell'inserimento dei dati: Inserimento di Caratteri
if(ischar(x)==1)
error('Non puoi Inserire un Carattere come Esponente'
end
%Controllo dei dati inseriti: Evitare Overflow ed Underflow
if (x<-709)
disp('Hai Inserito un Esponente Troppo Piccolo: Esponente Minimo -709'
x=0;
elseif (x>709.7)
disp('Hai Inserito un Esponente Troppo Elevato: Esponente Massimo 709'
end
%Valitazione della Tolleranza: Massima Precisione
if nargin==1
disp('Hai Scelto di Proseguire con la Precisione Massima'
tol=epsmac;
else
%Controllo dei dati inseriti: Evitare Valori di k negativi
if (k<=0)
error('Il Valore della Tolleranza deve essere Positivo'
end
%Controllo dei dati inseriti: Evitare che k sia un vettore
if (length(k)~=1)
error('Il Valore della Tolleranza deve essere uno Scalare'
end
%Controllo errore nell'inserimento dei dati: Inserimento di Caratteri
if(ischar(k)==1)
error('Non Puoi Inserire un Carattere come Tolleranza'
end
tol=power(10, -k);
end
%Escludo valori impossibili nella tolleranza
tol=max(tol,epsmac);
%Evito l'underflow della tolleranza
if(abs(x)>=minr/tol)
tol=abs(x)*tol;
else
tol=minr;
end
%Inizializzazione delle variabili
sum=1;
n=1;
add=abs(x);
%Criterio di Arresto Dimanico
while (abs(add)>sum*tol)
sum=sum+add;
n=n+1;
add=add*(abs(x)/n);
end
%Valutazione dell'esponente negativo: Stabilizzazione dell'Algoritmo
if x<0
sum=1/sum;
end
return
Esempi d'uso
>>espon(7,8)
ans =
1.096633127134126e+003
Casi di Test
Esempi con massima precisione
Esempio 1: Esponenziale 6 >> espon(6) Hai Scelto di Proseguire con la Precisione Massima ans = 4.034287934927349e+002 |
Funzione del Matlab y=esp(x) >> exp(6) ans = 4.034287934927351e+002 |
Esempio 1: Esponenziale 1 >> espon(1) Hai Scelto di Proseguire con la Precisione Massima ans = 2.71828182845905 |
Funzione del Matlab y=esp(x) >> exp(1) ans = 2.71828182845905 |
Esempio 1: Esponenziale 4.67 >> espon(4.67) Hai Scelto di Proseguire con la Precisione Massima ans = 1.066977424324507e+002 |
Funzione del Matlab y=esp(x) >> exp(4.67) ans = 1.066977424324508e+002 |
Esempio 1: Esponenziale -23 >> espon(-23) Hai Scelto di Proseguire con la Precisione Massima ans = 1.026187963170192e-010 |
Funzione del Matlab y=esp(x) >> exp(-23) ans = 1.026187963170189e-010 |
Esempi con precisione definita dall'utente
Esempio 1: Esponenziale 6, tolleranza 10 >> espon(6,10) ans = 4.03428793 e+002 |
Funzione del Matlab y=esp(x) >> exp(6) ans = 4.034287934927351e+002 |
Esempio 1: Esponenziale 1, tolleranza 12 >> espon(1,12) ans = 2.71828182845 |
Funzione del Matlab y=esp(x) >> exp(1) ans = 2.71828182845905 |
Esempio 1: Esponenziale 4.67, tolleranza 5 >> espon(4.67,5) ans = 1.0669 e+002 |
Funzione del Matlab y=esp(x) >> exp(4.67) ans = 1.066977424324508e+002 |
Esempio 1: Esponenziale -23, tolleranza 3 >> espon(-23,3) ans = 1.0 e-010 |
Funzione del Matlab y=esp(x) >> exp(-23) ans = 1.026187963170189e-010 |
Casi di test particolari
>> espon ??? Error using ==> espon Non hai Inserito il Valore di x |
Mancato Inserimento dell'Esponente X |
>> espon('k') ??? Error using ==> espon Non puoi Inserire un Carattere come Esponente |
Inserimento di un carattere come esponente |
>> espon(709.79) Hai Inserito un Esponente Troppo Elevato: Esponente Massimo 709 Hai Scelto di Proseguire con la Precisione Massima ans = Inf |
Inserimento di un esponente troppo elevato |
>> espon(-709.1) Hai Inserito un Esponente Troppo Piccolo: Esponente Minimo -709 Hai Scelto di Proseguire con la Precisione Massima ans = 1 |
Inserimento di un esponente troppo piccolo |
>> espon(45,-7) ??? Error using ==> espon Il Valore della Tolleranza deve essere Positivo |
Inserimento di una tolleranza negativa |
>> k = [1 2 3; 23 4 0; 6 7 8]; >> espon(45,k) ??? Error using ==> espon Il Valore della Tolleranza deve essere uno Scalare |
Inserimento di una matrice come tolleranza |
>> k = [1 2 3]; >> espon(45,k) ??? Error using ==> espon Il Valore della Tolleranza deve essere uno Scalare |
Inserimento di un vettore come tolleranza |
>> espon(45,'k') ??? Error using ==> espon Non Puoi Inserire un Carattere come Tolleranza |
Inserimento di un carattere come tolleranza |
Appunti su: esponenziale 002, |
|