intégrales python

Retrouver tous les sujets résolus.
Répondre
henry

intégrales python

Message par henry » ven. 5 mai 2023 19:59

Bonjour, j'aurais besoin d'aide pour cet exercice sur python est la méthode des rectangles. Voici l'énoncé :
On donne ci-contre la courbe C de la fonction exponentielle sur [-1;0] et cinq rectangles de largeurs identiques ayant tous un sommet appartenant à C. On donne ci-dessous le script incomplet d'une fonction somme en langage Python. Celle-ci doit retourner la sommeS des aires des rectangles précédents. La variable h représente la largeur de chacun de ces rectangles.
1. Recopier et compléter cette fonction.
2. Modifier cette fonction en une fonction de paramètre n qui retourne une valeur approchée de
Int e^x dx sur [-1;0] en utilisant n
rectangles de largeurs identiques .
Voici le script :
def somme ():
S=0; x=-1; h=…
for i in range(… ):
x=x+…
S=….
return(…)


Mercii !
sos-math(21)
Messages : 10348
Enregistré le : lun. 30 août 2010 11:15

Re: intégrales python

Message par sos-math(21) » ven. 5 mai 2023 21:32

Bonjour,
ton intégrale est \(\displaystyle \int_{-1}^{0}\text{e}^x\text{d}x\) est égale à l'aire sous la courbe de la fonction exponentielle entre les abscisses \(-1\) et \(0\).
On veut approcher l'aire de cette courbe par la somme de 5 rectangles dont un sommet appartient à la courbe.
Chaque rectangle est donc de largeur \(h=0{,}2\) et de hauteur \(f(\ldots)\).
Voici un schéma pour t'aider à comprendre :
Capture d’écran . 2023-05-05 à 22.20.01.png
Ainsi dans ta fonction Python, à chaque itération tu changes d'abscisses en te décalant de \(h\) unités vers la droite donc x = x + ...
Puis tu ajoutes à la somme le rectangle de largeur \(h\) et de hauteur \(f(x)\).

Code : Tout sélectionner

from math import exp
def somme():
    S = 0; x = -1; h = ... # la largeur du rectangle est déterminée par l'amplitude de l'intervalle divisée par le nombre de rectangles
    for i in range(...): # nombre d'itérations égal au nombre de rectangles
        x = x + ... # décalage de l'abscisse d'un pas vers la droite
        S = S + ....# ajout de l'aire du rectangle de largeur h et de hauteur f(x)
    return S
Je te laisse écrire cette fonction Python.
Bonne rédaction
Henry

Re: intégrales python

Message par Henry » sam. 6 mai 2023 09:22

Merci beaucoup j’ai beaucoup mieux compris !

Cela donnerait donc :

from math import exp
def somme():
S = 0; x = -1; h =0,2
for i in range(5): # nombre d'itérations égal au nombre de rectangles
x = x +h. # décalage de l'abscisse d'un pas vers la droite
S = S +(h*e^x )
return S
Non ?

Et pour la deuxième question avec n je ne vois pas trop comment faire 😅😅 pouvez vous m’aider s’il vous plaît ?
sos-math(21)
Messages : 10348
Enregistré le : lun. 30 août 2010 11:15

Re: intégrales python

Message par sos-math(21) » sam. 6 mai 2023 09:27

Bonjour,
c'est effectivement le bon code, tu as compris le principe.
Pour la suite, il s'agit de généraliser en divisant l'intervalle d'amplitude 1 en \(n\) segments pour avoir \(n\) rectangle et faire la somme des aires de ces \(n\) rectangles à l'aide d'une boucle. Il s'agit donc de "remplacer" \(5\) par \(n\).
Essaye de refaire avec cette fonction :

Code : Tout sélectionner

from math import exp
def somme_bis(n):
    S = 0; x = -1; h = ... # la largeur du rectangle est déterminée par l'amplitude de l'intervalle divisée par le nombre de rectangles n
    for i in range(...): # nombre d'itérations égal au nombre de rectangles donc n ici
        x = x + ... # décalage de l'abscisse d'un pas vers la droite (inchangé)
        S = S + ....# ajout de l'aire du rectangle de largeur h et de hauteur f(x) (inchangé)
    return S

Bonne généralisation
henry

Re: intégrales python

Message par henry » sam. 6 mai 2023 17:47

Parfat merci!

from math import exp
def somme_bis(n):
S = 0; x = -1; h = 1/n
for i in range(n):
x = x + h # décalage de l'abscisse d'un pas vers la droite (inchangé)
S = S + (h*e^n )
return S
Non ?
J'avis un léger doute sur le fait de mettre x ou n
Merci !!
henry

Re: intégrales python

Message par henry » sam. 6 mai 2023 17:55

Okk merci !!

Cela donenrit donc :
from math import exp
def somme_bis(n):
S = 0; x = -1; h =1/n la largeur du rectangle est déterminée par l'amplitude de l'intervalle divisée par le nombre de rectangles n
for i in range(n):
x = x +h décalage de l'abscisse d'un pas vers la droite (inchangé)
S = S + (h*e^n )
return S
Non ?

J'voue avoir hésité entre e^n ou e^x sinon j'ai parfaitement compris merci !
sos-math(21)
Messages : 10348
Enregistré le : lun. 30 août 2010 11:15

Re: intégrales python

Message par sos-math(21) » sam. 6 mai 2023 18:16

Bonjour,
ta variable qui parcourt le segment est toujours \(x\) donc l'aire de ton rectangle est toujours \(h\times \text{e}^x\).
Il faut donc corriger cela.
Bonne continuation
henry

Re: intégrales python

Message par henry » sam. 6 mai 2023 18:19

Merci infiniment !!
sos-math(21)
Messages : 10348
Enregistré le : lun. 30 août 2010 11:15

Re: intégrales python

Message par sos-math(21) » sam. 6 mai 2023 18:24

Je te conseille de tester tes fonctions.
Tu dois obtenir le même résultat lorsque tu appelles somme() et somme_bis(5).
Puis si tu découpes en rectangles de plus en plus fins, tu te rapproches de la valeur exacte de l'intégrale qui vaut \(1-\text{e}^{-1}\) :

Code : Tout sélectionner

In [6]: somme()
Out[6]: 0.6974382798649739

In [7]: somme_bis(5)
Out[7]: 0.6974382798649739

In [8]: somme_bis(100)
Out[8]: 0.6352864292852449 # 2 décimales exactes

In [9]: somme_bis(1000)
Out[9]: 0.6324366717846842 # 3 décimales exactes

In [10]: somme_bis(10000)
Out[10]: 0.6321521653832243 # 4 décimales exactes

In [11]: 1-exp(-1)
Out[11]: 0.6321205588285577

Bonne conclusion
Répondre