Precedente Indice Successivo



Espon



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:
espon - di tipo reale, valore della funzione ifail - di tipo intero, indicatore d'errore

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