Page 1 sur 3
Python
Posté : sam. 19 déc. 2020 15:09
par Invité
Bonjour
j'ai un TP de python à faire il est ici :
https://www.cjoint.com/data/JLtohHnNoql_python.pdf
on doit programmer les différentes lméthodes exposées, et j'ai mis dans un lien dans le doc ce que j'ai fait.
Est-ce correct ? Je n'arrive pas à compléter les endroits où c'est écrit TODO.
Merci de l'aide bonnes vacances !!
Re: Python
Posté : sam. 19 déc. 2020 17:55
par SoS-Math(25)
Bonjour,
Commence par la méthode de Simpson. Il suffit de renvoyer le calcul en fonction de a, b et f donnée par la formule de ton document.
Un point de départ que tu peux modifier puis tester (avec la fonction f(x)=x^2):
https://trinket.io/python/884ef7e167
Bon courage
Re: Python
Posté : sam. 19 déc. 2020 19:20
par Invité
Je suis sur mobile et je n'arrive pas à voir le code sur trinket : comment faire ? Merci
Re: Python
Posté : sam. 19 déc. 2020 19:24
par sos-math(21)
Bonjour
Sinon, tu peux essayer avec replit :
https://repl.it/.
Bonne continuation
Re: Python
Posté : sam. 19 déc. 2020 19:29
par Invité
D'accord merci et pour voir le code envoyé par SOS 25 comment puis-je faire ?
Re: Python
Posté : sam. 19 déc. 2020 20:07
par SoS-Math(25)
As-tu essayé de tourner ton écran sur trinket ? (mode paysage)
A bientôt
Re: Python
Posté : jeu. 31 déc. 2020 03:07
par Invité
Alors je reprends ce que j'ai fait.
Voici ici :
https://py3.codeskulptor.org/index.html ... aaqcd_0.py
Mon prof a validé la structure des fonctions simpsonComposite et gaussLegendre, mais il me manque les lignes 33 et 49.
Pourriez-vous m'aider à les compléter svp ?
Merci bien
Re: Python
Posté : jeu. 31 déc. 2020 10:30
par sos-math(21)
Bonjour,
il te reste à traduire la formule de Simpson sur chaque intervalle de ta subdivision :
\(S=\dfrac{b-a}{6}\left(f(a)+4f\left(\dfrac{a+b}{2}\right)+f(b)\right)\).
Il te reste à voir lors du parcours de ta boucle, ce que valent \(a\) et \(b\) : cela correspond à ta subdivision \(xi\) dont on prend les valeurs deux par deux : (xi[0],xi[1],xi[2]), puis (xi[2],xi[3],xi[4]) et ainsi de suite jusqu'à la fin...
Bonne traduction
Re: Python
Posté : jeu. 31 déc. 2020 14:04
par Invité
bonjou et merci !
j'ai reçu ce matin une aide de mon prof, il m'a dit que ce programme était une implémentation de la méthode trouvée dans un livre de Python.
Code : Tout sélectionner
def Simpson (f,a,b,n):
n2=2*n # nombre pair de points
s ,h =0 ,(b-a)/n2 # initialisation
x1 = a # abscisses d'ordre pair
for i in range (0,n):
s += 2* f (x1)+4*f(x1+h)
x1=x1 +2*h
s+= f(b)-f(a)
return s*h/3
Mais il y a quelque chose que je ne comprends pas : ce programme correspond à la fonction "Simpson" ou à la fonction "simpsonComposite" qui est dans ce lien
https://py3.codeskulptor.org/index.html ... aaqcd_0.py ?
Comprenez-vous à quoi la fonction envoyée par le prof fait référence ? Simspon ou simpsonComposite ? Quelle est la différence entre les 2 méthodes ?
Re: Python
Posté : jeu. 31 déc. 2020 15:47
par sos-math(21)
Bonjour,
ce programme correspond à la méthode de Simpson globale, c'est-à-dire le principe de Simpson appliqué à une série de subdivisions de l'intervalle.
Dans ton exercice, cela correspond à Simpson composite.
Bonne continuation
Re: Python
Posté : jeu. 31 déc. 2020 16:00
par Invité
D'accord, merci beaucoup !
J'ai compris.
Et dans mon premier message j'ai mis un document PDF où est explicitée la méthode Gauss Legendre.
Comment programmer cette méthode en Python ?
Puis-je m'inspirer de newtoncomposite ? J'ai essayé mais sans succès (pour l'isntant)....
Re: Python
Posté : dim. 3 janv. 2021 13:47
par Invité
Bonjour avez-vous reçu mon message posté jeudi 31 décembre 2020 en fin d'après-midi ?
Il apparaît pas.....
Re: Python
Posté : dim. 3 janv. 2021 13:56
par sos-math(21)
Bonjour,
lorsqu'un message n'apparaît pas dans le forum, c'est qu'il n'a pas encore été traité par un modérateur.
Pour la méthode de Gauss-Legendre, il faut d'abord obtenir les racines des polynômes d'interpolation de Legendre.
As-tu un cours là-dessus ? C'est loin d'être élémentaire...
Si tu n'as aucune référence, tu peux consulter ce document :
http://userpages.irap.omp.eu/~rbelmont/ ... ration.pdf
Bonne continuation
Re: Python
Posté : lun. 4 janv. 2021 13:38
par Invité
on a eu quelques infos là dessus, mais c'était très bref
Donc il faut créer un programme Python pour obtenir les racines des polynômes d'interpolation de Legendre ?
Comment peut-on faire ça en Python ?
Je n'en ai aucune idée.....
Merci de l'aide
Re: Python
Posté : lun. 4 janv. 2021 19:55
par sos-math(21)
Bonjour,
les poids \(w_i\) et les racines \(x_i\) associées aux polynômes de Legendre peuvent être calculés avec la bibliothèque numpy :
https://numpy.org/doc/stable/reference/ ... gauss.html
Je te laisse consulter les dernières pages de ce diaporama pour trouver la formule reliant ces nombres à l'intégrale d'une fonction f :
https://team.inria.fr/airsea/files/2013 ... ration.pdf
Un exemple de construction :
Code : Tout sélectionner
import numpy
def calc_int_gauss_legendre(f,a,b,n):
X = list(numpy.polynomial.legendre.leggauss(n)[0])
W = list(numpy.polynomial.legendre.leggauss(n)[1])
subd = [((b-a)/2)*X[i]+(a+b)/2 for i in range(len(X))]
somme = 0
for i in range(len(X)):
somme = somme + W[i]*f(subd[i])
return ((b-a)/2) * somme
et un appel pour vérifier :
Code : Tout sélectionner
>>> import math
>>> calc_int_gauss_legendre(lambda x:(x**2)*math.exp(3*x+5),-3,0,10)
10.925053283216421
Alors que la valeur par calcul exact est \( \dfrac{2}{27} \text{e}^{5} - \dfrac{101}{27\text{e}^{4}}\approx 10,93\).
En revanche, s'il faut construire "à la main" les \(w_i\) et les racines \(x_i\), c'est bien plus compliqué...
Bonne compréhension