Approssimazione di e^x con il polinomio di Taylor

di MaximusMeridius il
5 risposte
Buonasera.Non capisco perché questo codice con alcuni valori sembri funzionare,e con altri no(con determinati valori il processo da iterare sembra non arrestarsi mai...).Il calcolo dell'approssimazione poi lo metterò in una funzione di cui ho già scritto solo il prototipo(per l'appunto si chiama "esponenziale"),l'ho messo momentaneamente nel main per facilitarmi il lavoro. Ecco a voi il codice.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void letturax(double&);
double letturatolleranza(double&);
double fattoriale(int);
double potenza(double,int);
double esponenziale(double,double,int&);

int main(){
printf("Programma C++ strutturato in funzioni che approssima e^x,con -1<=x<=1 letto da tastiera,entro la tolleranza letta da tastiera,usando il polinomio di Taylor con x0=0 e\nil criterio di arresto a posteriori;e stampa il grado del polinomio di Taylor costruito e l'approssimazione di e^x calcolata\n");
double x;//esponente di e^x (funzione da approssimare con Taylor)
double tau;//tolleranza con cui approssimare e^x con Taylor
letturax(x);
double toll=letturatolleranza(tau);
double appross_esp=0;
int n;
do{appross_esp+=potenza(x,n)/fattoriale(n);
   n++;
   printf("L'approssimazione di e^x con il polinomio di Taylor nel punto x e':%lf\n",appross_esp);} 
while (n>5);//(appross_esp>(0.001));//||appross_esp==(toll/M_E));
printf("Il grado del polinomio di Taylor con cui viene approssimato e^x e':%d\n",n);
printf("L'approssimazione di e^x con il polinomio di Taylor nel punto x e':%lf\n",appross_esp);
return 0;
}
//Lettura della variabile x della funzione e^x,con x appartente a [-1,1]:
void letturax(double&x){
	printf("Inserire l'esponente(reale) x di e^x con x appartenente a [-1,1]:\n");scanf("%lf",&x);
//do{printf("Inserire l'esponente(reale) x di e^x con x appartenente a [-1,1]:\n");scanf("%lf",&x);}
//while(x<-1||x>2);
return;
}
//Lettura della tolleranza con cui sarà approssimata e^x tramite Taylor:
double letturatolleranza(double& tau){
printf("Inserire la tolleranza toll con cui sara' approssimata e^x tramite Taylor\n");scanf("%lf",&tau);
return tau;
}
//Calcolo del fattoriale di un numero intero inserito:
double fattoriale(int n) 
{double fatt=1;
 for(int j=1;j<=n;j++) fatt*=j;
  return fatt;}
//Calcolo della potenza n-esima del numero intero inserito:  
double potenza(double m,int n) 
{int p=1;
 for(int i=0;i<n;i++) p*=m;
 return p;
}
//Calcolo dell'approssimazione di e^x con Taylor:

5 Risposte

  • Più che altro non riesco a capire se sia giusta o meno la condizione nel while.
  • Ma può darsi(probabilmente)che oltre eventualmente a quello,ci sia sparso qualche altro errore,che non riesco a notare.
  • 
    int n;
    do{appross_esp+=potenza(x,n)/fattoriale(n);
    
    Dicci tu cosa non va qui
  • Come ti ha detto Weierstrass l'errore è evidente ma aggiungo che non devi scrivere il codice in quel modo, è veramente confuso.

    Indenta correttamente e usa delle righe vuote messe in maniera opportuna per rendere leggibili le varie parti.
    Usa spazi per separare le componenti di una riga e non eccedere nei commenti chilometrici attaccati al codice.

    Esempio
    
    //Calcolo del fattoriale di un numero intero inserito:
    //
    double fattoriale(int n) 
    {
        double fatt = 1;
    
        for(int j=1; j<=n; j++)
             fatt *= j;
        
        return fatt;
    }
     
  • Grazie di cuore a entrambi (scusatemi davvero ma l'altro giorno stavo rinc...onito
Devi accedere o registrarti per scrivere nel forum
5 risposte