approximation de e par un développement illimité
approximation de e par un développement illimité
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)
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)
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: approximation de e par un développement illimité
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 :
Et l'appel de la fonction fonctionne :
Bonne continuation
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)
Code : Tout sélectionner
>>> precision(8)
(11, 2.718281826198493)
Re: approximation de e par un développement illimité
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
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
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: approximation de e par un développement illimité
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 :
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)
Re: approximation de e par un développement illimité
Merci beaucoup !
Tout est parfaitement clair !
C.
Tout est parfaitement clair !
C.
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: approximation de e par un développement illimité
Bonjour,
tant mieux si cela a pu t'aider à y voir plus clair.
Bonne continuation et à bientôt sur sos-math
tant mieux si cela a pu t'aider à y voir plus clair.
Bonne continuation et à bientôt sur sos-math