IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Recoder la fonction exponentielle


Sujet :

Mathématiques

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Recoder la fonction exponentielle
    Bonjour

    J'ai un peu recherche sur le forum mais sans succe, une facon de recoder la fonction exponentielle.

    Je ne souhaite pas utiliser la vrais fonction exp()... ^^

    J'ai un peu reflechie sur le sujet, peut etre je pourrai utiliser une methode recursive avec une variable global qui s'incrementerai de facon expo, donc avec une incrementation base sur une formule mathematique proche de l'expo.

    Je code en language C.
    Merci de votre aide.

    PS : Desole pour le manque d'accent, je suis sur un clavier qwerty.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Finalement, j'ai trouver un bout de code qui es pas mal, je le donne ici pour des gens qui comme moi, voudrais savoir comment cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    double my_exp(double x) 
        {
        	double sum = 1;  // La somme totale
        	double fact = 1;  // La factorielle
        	double pow = 1;  // La puissance
     
        	double sumPreced = sum;
        	int max = 1;
     
        	for (int i=1; i<=max; i++)
        	{
        		sumPreced = sum;
     
        		fact = fact * i;
        		pow = pow * x;
     
        		sum = sum + (pow / fact);
     
        		if (sumPreced == sum) i = max+1; // Permet de continuer si le résultat n'est pas satisfaisant
        		else max = max + 1; // On s'arrête si on n'ajoute plus rien à la somme
        	}
    	return sum;
        }
    Sachant que ce code ne fonctionne pas bien pour les nombre negatif, donc voici la petit modification que j'ai faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If (x <= 0)
    {
    Mettre le code ci dessus
    }
    else
    {
    sum = 1 / my_exp(-x);
    }
    voila

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Usuellement, on commence par coder un programme qui calcule e^x entre x=0 et x=1, en l'approximant par des polynômes de Legendre.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  4. #4
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Il y a aussi l'algorithme CORDIC (utilisation de la formule exp(a.b)=exp(a).exp(b) avec une table de valeurs précalculées).

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Finalement, j'ai trouver un bout de code qui es pas mal
    Non, ce code n'est pas terrible ....
    Calcule un peu le nombre de multiplications et de divisions que tu fais ....
    Autre inconvénient, l'exponentielle 'explose' très vite, quand elle dépasse la valeur maximale du type on ajoute un terme nul et c'est d'ailleurs ton critère d'arrêt.
    Il y a mieux:
    Calculer pour n donné, calculer les termes de la suite récurrente descendante:
    1+x/(n+1) = u(n+1)
    1+x/n+ x²/n(n+1) = u(n)= 1+u(n+1)/n
    à chaque fois une division et une addition.
    Tu verras que u0 est l'approximation à l'ordre n+1 de exp(x) par son développement en série entière, et qu'il n'y a aucun des inconvénients précédents.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Code pour calculer exp(x)
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    double expo(double x)
    {	// calcul de e^x
    	double s=1; //calcul de x^n/n!
    	double r=1; //résultat
    	for(int n=1;n<=15;n++) // 15 itérations
    	{
    		s*=x/n;
    		r+=s;
    	}
    	return r;
    }

Discussions similaires

  1. Recherche fonction exponentielle amortie
    Par Giansolo dans le forum Mathématiques
    Réponses: 12
    Dernier message: 16/06/2008, 21h07
  2. Fonction exponentiel
    Par virtuadrack dans le forum C
    Réponses: 4
    Dernier message: 26/03/2007, 02h24
  3. Réponses: 5
    Dernier message: 28/01/2007, 15h12
  4. recoder la fonction cat
    Par Pitou5464 dans le forum C
    Réponses: 13
    Dernier message: 17/10/2006, 20h22
  5. VBA excel, fonction exponentiel
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/09/2006, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo