Lyc´ee Thiers - MPSI-3

publicité
Lycée Thiers
TP PYTHON - 06
Deuxième round avec sympy ...
1 - Dériver, intégrer et obtenir une limite
Le module sympy comporte une fonction qui permet de dériver une expression suivant une ou
plusieurs variables. Il s’agit de la fonction diff. Saisir ce qui suit dans une cellule et l’exécuter :
from sympy import *
var (’x’)
print (diff(sin(x),x ,2))
var(’y’)
print (diff(sin(x*y), x, 2, y ,1))
[Qu. 1]
1) En utilisant un script, calculer la dérivée n-ième de x 7→ xn−1 exp − 1x pour n, prenant les valeurs
2, 4 et 5.
2) Conjecturer une formule générale et la démontrer mathématiquement.
Pour calculer une intégrale, le module sympy de Python s’en sort plutôt pas mal. Essayer dans une
deuxième cellule :
print ( integrate (x*(1 -x), (x ,0 ,1)))
print ( integrate (tan(x)**2 , (x,0,pi /4))
[Qu. 2]
1
Z
x(1 − x)n dx lorsque n est un entier naturel, puis
1) Conjecturer l’expression en fonction de n de
démontrer la mathématiquement.
0
1
Z
(ln(t))n dt. Cette intégrale vous
2) En utilisant un script python, conjecturer une formule pour
parait-elle singulière ?
0
Enfin, on peut aussi déterminer certaines limites d’expressions. Voici quelques exemples à saisir dans
une cellule et à exécuter :
TP PYTHON - 06
2
print ( limit (x*log(x), x, 0))
print ( limit (1/x -1/ sin(x), x, 0)))
print ( limit ( (x**3+x **2+1) **(1/3) -(x **2+1) **(1/2) , x, oo))
[Qu. 3]
1) Soit a et b deux réels positifs. Déterminer mathématiquement lim
x→+∞
avec l’aide de Python, ou faites l’inverse si vous préférez.
x+a
x+b
x
et vérifier votre résultat
ln(1 + sin(x)) − sin(ln(1 + x))
soit finie et non nulle.
xn
Z n
x n
3) Conjecturer la limite, quand n → +∞, de
1−a
dx, suivant les valeurs de a > 0. Quelle est
n
0
Z
2) Déterminer l’entier n tel que lim
x→0
n
la limite quand n → +∞ de
exp(−ax)dx ? Que remarquez-vous ? Est-ce surprenant ?
0
2 - quelques tracés de courbes
sympy peut utiliser le module matplotlib pour créer des figures, mais (au moins pour les quelques
manipulations simples que nous avons en vue) il n’est pas nécessaire de connaître matplotlib pour
comprendre ce qui va suivre (on peut même ignorer jusqu’à son existence).
Mise en garde : à ce jour (décembre 2013), le module sympy est encore en phase de développement. Les
fonctionnalités prévues, relatives au tracé de courbes et surfaces, ne sont pas encore toutes disponibles
ni même pleinement fonctionnelles ...
On suppose que l’on a préalablement saisi les commandes :
>>> from sympy import *
>>> var(’x’)
Pour tracer le graphe de x 7→ x2 sur [0, 1] , rien de plus simple :
>>> plot(x**2, (x,0,1))
Pour sauvegarder l’image dans un fichier (remplacer le chemin d’accès par quelque chose d’approprié !) :
>>> img = plot(x**2, (x,0,1))
>>> img.save(’/Users/moi/mes_images/graphique.png’)
On peut ajouter des options (couleur, titre) :
>>> plot(x**2, (x,0,1), line_color = red, title = ’Carré’)
TP PYTHON - 06
3
L’option line_color permet de spécifier une couleur (voir section suivante pour plus de détails sur
ce point). Si un tuple de couleurs est donné plutôt qu’une seule couleur, chaque couleur est utilisée
tour à tour pour donner un tracé en “pointillés colorés” :
>>> plot(sqrt(x), (x,0,1), line_color = (’black’, ’white’), title = ’Racine Carrée’)
[Qu. 4] Construire le graphe de [2, 3] → R, x 7→
résultat observé ?
p
(x − 2) (3 − x). Comment pouvait-on prévoir le
√
1
[Qu. 5] On pose f : −∞,
→ R, x 7→ ln 1 + 4x2 + 1 − 4x − e−2 sin(x) . Tracer le graphe de f sur
4
1
−1, . Que peut-on penser du signe de f (x) sur cet intervalle ?
4
3 - tracé simultané de plusieurs graphes
Pour obtenir, dans une même figure, les graphes de x 7→ x2 et x 7→ x1/2 sur [0, 1] :
>>> plot(x**2, sqrt(x), (x,0,1))
Mais les intervalles de définition ne sont pas nécessairement identiques pour les différentes fonctions !
Pour obtenir, dans une même figure, le graphe de x 7→ x2 sur [0, 1] et de x 7→ x1/2 sur [0, 2] :
TP PYTHON - 06
4
>>> plot((x**2, (x,0,1)), (sqrt(x), (x,0,2)))
Imaginons maintenant que l’on veuille tracer, sur un même domaine [xMin , xMax ] , les graphes de
plusieurs fonctions, avec une couleur spécifique pour chaque. Voici une solution :
def multiPlot(xMin, xMax, exprList, colorList):
L = [e for e in exprList] + [(x, xMin, xMax)]
p = plot(*L, show = False)
for i, c in enumerate(p):
c.line_color = colorList[i]
p.show()
Dans la définition ci-dessus, la fonction plot reçoit n + 1 arguments, où n désigne la longueur de la
liste L. Le dernier argument est visiblement une option qui inhibe l’affichage.
Le symbole * permet de “dégrouper” (to unpack, en anglais) la liste L de manière à ce que chacun de
ses termes devienne un argument pour plot.
La fonction plot renvoie un objet p dont la structure précise est un peu compliquée, mais qui consiste
en gros en une séquence de graphiques. La fonction enumerate permet de récupérer, un à un, ces
divers graphiques. On peut alors, sélectivement, modifier la couleur de tracé pour chacun d’eux.
Enfin, la méthode show appliquée à l’objet p déclenche l’affichage.
Les couleurs sont représentées par des triplets [r,g,b] de nombres compris entre 0 et 1. La fonction
grey ci-dessous renvoie donc un triplet représentant un niveau de gris (greylevel en anglais) : lorsque
les trois composantes sont nulles, c’est noir et lorsqu’elles valent toutes 1, c’est blanc.
def grey(level):
return [level for k in range(3)]
On peut aussi utiliser une chaîne de caractères pour spécifier une couleur parmi quelques valeurs
prédéfinies (red, green, blue, yellow, cyan, magenta, black, white).
Voyons un premier exemple :
L = [sin(x), cos(x), sin(2*x), cos(2*x), pi - x]
cols = [’red’, ’green’, ’blue’, ’magenta’, grey(0.5)]
multiPlot(0, pi, L, cols)
[Qu. 6] Tracer, dans un même repère, les graphes des fk : [0, 1] → R, x 7→ xk pour 1 6 k 6 10, en
utilisant deux couleurs (une lorsque k est pair, une autre lorsque k est impair).
[Qu. 7] Tracer, dans un même repère, les graphes de x 7→ e−x , x 7→ −e−x et x 7→ e−x sin (3x) sur [0, 10] .
Quels sont les coordonnées des points de contact entre ces courbes ?
π
→ R, t 7→ sink (t) . Tracer, dans un même repère, les
[Qu. 8] On pose pour tout k ∈ N, sk : 0,
2
graphes des s10k pour 1 6 k 6 50, en utilisant un dégradé du bleu (pour k = 1) au rouge (pour k = 50).
R π/2
Que peut-on alors conjecturer concernant la nature de la suite de terme général Wn = 0 sinn (t) dt ?
Démontrer rigoureusement le résultat conjecturé, en essayant de suivre de près ce que suggère la
figure.
[Qu. 9] Modifier la fonction multiPlot pour écrire une fonction multiPlot2(rangeList, exprList,
colorList) qui dessine les graphes de plusieurs fonctions définies sur divers intervalles. La syntaxe,
dans le cas de trois fonctions, sera de la forme :
>>> multiPlot2([[a0, a1], [b0, b1], [c0, c1]], [f, g, h], [colorf, colorg, colorh])
TP PYTHON - 06
5
En déduire une fonction grapheEtTangentes(f, xMin, xMax, n, h) qui dessine :
• le graphe de f sur [xMin , xMax ]
• les tangentes aux points d’abscisses formant une subdivision régulière d’extrémités xMin et xMax et
de longueur n + 1, chaque tangente étant représentée par un segment dont les abscisses des extrémités
diffèrent de 2h.
4 - sommes partielles d’une série de Taylor
Etant donnée f : R → R indéfiniment dérivable, on pose pour tout (x, n) ∈ R × N :
n
X
f (k) (0) k
x
Tn (x) =
k!
k=0
Tn est appelée le n−ème polynôme de Taylor de f en 0. On peut démontrer (formule de Taylor avec
reste intégral) que :
Z x
(x − t)n (n+1)
(t) dt
f (x) = Tn (x) + Rn (x)
avec Rn (x) =
f
n!
0
On peut avoir dans certains cas lim Rn (x) = 0, mais cela n’a rien d’automatique. Si, pour un certain
n→∞
r > 0, cette condition est remplie pour tout x ∈ [−r, r], alors on peut écrire :
∞
X
f (k) (0) k
∀x ∈ [−r, r] , f (x) =
x
k!
k=0
On dit alors que f est, sur [−r, r] , la somme de sa série de Taylor à l’origine.
[Qu. 10] Ecrire une fonction taylorPoly(f, n) qui renvoie l’expression développée du n−ème polynôme de Taylor de f. Attention ! Pour le matheux, f est une fonction ; tandis que pour le Pythoneux,
f est une expression dépendant du symbole x. On aura donc, par exemple :
>>> taylorPoly(exp(x), 4)
x**4/24 + x**3/6 + x**2/2 + x + 1
[Qu. 11] Ecrire une fonction taylorGraph(f, nList, xMin, xMax) qui dessine simultanément les
graphes sur [xMin , xMax ] de f et de ses polynômes de Taylor Tk pour les k présents dans la liste nList.
On utilisera une couleur (bleu, par exemple) pour le graphe de f et un dégradé (du vert au rouge,
par exemple) pour les Tk .
[Qu. 12] En utilisant la fonction taylorGraph, illustrer les deux cas particuliers suivants :
1) f : x 7→ sin (x) sur [−π, π]
2) f : x 7→ ln 1 + 2x2 sur [−1, 1] .
Que peut-on conjecturer quant à la convergence de la série de Taylor, dans chacun de ces deux cas ?
Téléchargement