Precedente | Indice | Successivo |
Scopo: | calcolo della funzione esponenziale di un numero reale. |
Specifiche: |
real function espon (x, tol, ifail)
real x, tol integer ifail |
Descrizione: |
Background del problema Il problema è quello di fornire una valutazione approssimata della funzione esponenziale con la somma parziale n-esima del suo sviluppo di Mac Laurin: Descrizione dell'algoritmo L'algoritmo implementa mediante uno schema iterativo la formula per il calcolo della somma parziale n-esima Sn dello sviluppo della funzione esponenziale. Il procedimento si arresta quando l'errore relativo è minore o uguale alla tolleranza richiesta dall'utente:
Se x è negativo l'algoritmo diventa instabile, perché nella serie a segni alterni le cancellazioni catastrofiche possono amplificare enormemente l'errore di round-off. Pertanto in questo caso si sfrutta la proprietà dell'esponenziale e-x = 1/ex che consente di calcolare la somma di una serie a termini positivi e di ottenere l'esponenziale dal suo reciproco. Raccomandazioni d'uso La tolleranza relativa deve essere non negativa e inferiore ad uno. |
Bibliografia | [1], [2] |
Parametri di I/O |
input: x - di tipo reale, numero di cui calcolare l'esponenziale tol - di tipo reale, tolleranza relativa richiesta
output: |
Indicatori d'errore: |
errore gestiti: ifail = 0 nessun errore ifail = 1 la tolleranza relativa non è valida. |
Routines ausiliarie: | tolm, funzione reale, tolleranza minima relativa. |
Tempo d'esecuzione: | Funzione del numero di somme eseguite, e quindi dalla tolleranza inserita. |
Memoria richiesta | Nessun array allocato in memoria. |
Accuratezza fornita: | Dipendente dalla tolleranza inserita |
Esempio di programma chiamante: |
Program espond c Programma dimostrativo della function espon real espon external espon integer dim parameter (dim=100) real x(dim),esp(dim),t integer n,ifail character*255 fout print*,'*** PROGRAMMA DIMOSTRATIVO DELLA FUNZIONE ESPON ***' write(*,20)'Numero di punti (max ',dim,') =' read(*,*)n print* print*,'Nome del file di output =' read(*,'(A)')fout open(12,FILE=fout,STATUS='NEW') do 5 i=1,n x(i)= 1+.2*(i-1) 5 continue print*,'punti assegnati: ' write(*,30)(x(i),i=1,n) print* print*,'Tolleranza richiesta =' read(*,*)t esp(1)=espon(x(1),t,ifail) if (ifail.eq.1) stop 'Errore! tolleranza non valida' do 10 i= 2,n esp(i)=espon(x(i),t,ifail) 10 continue c salva su file fout i valori calcolati write(12,30)(esp(i),i=1,n) close(12) print* print*,'Valori calcolati =' write(*,30)(esp(i),i=1,n) 20 format (1X,A,I3,A) 30 format (1X,E14.7) End |
Precedente | Indice | Successivo |