approximation de e par un développement illimité

Retrouver tous les sujets résolus.
Verrouillé
Cédric

approximation de e par un développement illimité

Message par Cédric » mer. 26 févr. 2020 16:42

Bonjour,
pourquoi ce script Python ne fonctionne-t-il pas si je tape par exemple precision(2) pour avoir une valeur approchée de e à 0,01 près par la somme des factorielles ?
(Problème de float et fonction ???).
Merci de votre aide.
C.
from math import factorial
from math import e
def e(n):
e=1
for k in range(1,n+1):
e=e+1/factorial(k)
return e
def precision(p):
n=1
while abs(e(n)-e)>10**(-p):
n=n+1
return n,e(n)
sos-math(21)
Messages : 10354
Enregistré le : lun. 30 août 2010 11:15

Re: approximation de e par un développement illimité

Message par sos-math(21) » mer. 26 févr. 2020 17:01

Bonjour,
c'est un problème de nom : tu as nommé e la fonction qui contient les sommes partielles alors que e est aussi le nombre d'Euler.
Donc dans la condition de ta fonction precision, il y a un problème : Python ne peut pas interpréter abs(e(n)-e) car e représente la fonction pour lui alors que tu voudrais qu'il l'interprète comme le nombre d'Euler.
Pour contourner le problème, il suffit de renommer ta première fonction :

Code : Tout sélectionner

from math import factorial
from math import e
def exp(n):
    e=1
    for k in range(1,n+1):
        e=e+1/factorial(k)
    return e
def precision(p):
    n=1
    while abs(exp(n)-e)>10**(-p):
        n=n+1
    return n,exp(n)
Et l'appel de la fonction fonctionne :

Code : Tout sélectionner

>>> precision(8)
(11, 2.718281826198493)
Bonne continuation
Cédric

Re: approximation de e par un développement illimité

Message par Cédric » jeu. 27 févr. 2020 12:10

Bonjour,
merci beaucoup, ça marche maintenant !
Puis-je vous demander pourquoi le script suivant fonctionnait par contre alors qu'il devrait y avoir le même problème, non ?
Pourquoi n'y a-t-il pas confusion entre e et e(n)
Merci !
from math import factorial
from math import e
def e(n):
e=1
for k in range(1,n+1):
e=e+1/factorial(k)
return e
sos-math(21)
Messages : 10354
Enregistré le : lun. 30 août 2010 11:15

Re: approximation de e par un développement illimité

Message par sos-math(21) » jeu. 27 févr. 2020 17:18

Bonjour,
celui-ci fonctionnait puisqu'il n'y avait pas eu appel de la fonction e dans une autre fonction donc il n'y pas eu ambiguïté entre e en tant que fonction et e en tant que constante.
Dans la définition de ta fonction, tu utilises aussi une variable e mais dans ce cas, c'est différent car tu es à l'intérieur de l'espace de noms de ta fonction donc si tu l'appelles, python va d'abord chercher si il existe une variable e définie dans le code de la fonction, sinon, il cherchera en dehors de l'espace des noms et il tombera sur ta constante e.
D'une manière générale, pour éviter ce genre de mésaventure, je t'encourage à nommer tes variables et tes fonctions de manière explicite et non ambiguë.
Un code sans risque pourrait alors être :

Code : Tout sélectionner

from math import factorial
from math import e
def suite_expo(n):
    somme = 1
    for k in range(1,n+1):
        somme = somme + 1/factorial(k)
    return somme
def precision(p):
    n = 1
    while abs(suite_expo(n) - e)>10**(-p):
        n = n + 1
    return n, suite_expo(n)
Cédric

Re: approximation de e par un développement illimité

Message par Cédric » jeu. 27 févr. 2020 22:16

Merci beaucoup !
Tout est parfaitement clair !
C.
sos-math(21)
Messages : 10354
Enregistré le : lun. 30 août 2010 11:15

Re: approximation de e par un développement illimité

Message par sos-math(21) » ven. 28 févr. 2020 08:10

Bonjour,
tant mieux si cela a pu t'aider à y voir plus clair.
Bonne continuation et à bientôt sur sos-math
Verrouillé