TD 2 : Recherche de racines
Transcription
TD 2 : Recherche de racines
TD 2 : Recherche de racines PC/PC* - Lycée Thiers Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Exercice 1 : Extraction de racine n-ième par la méthode de Newton Enoncé Corrigé Exercice 2 : Fonction définie de manière récursive Enoncé Corrigé Exercice 3 : D’après Mines-Ponts 2016 Enoncé Corrigé Exercice 4 : Fractale de Newton Enoncé Correction Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 1 Exercice 1. Ecrire une fonction racine(a,n,e) prenant en paramètre un nombre a > 0 et un entier n et qui applique √ la méthode de Newton pour retourner une valeur approchée à e près de n a (on prendra pour point initial u0 = a). Quel critère d’arrêt peut-on considérer ici ? PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 1 1) On cherche une racine de f (x) = x n − a. On a f ′ (x) = nx n−1 , donc la méthode de Newton produit une suite vérifiant : uk+1 = uk − f (uk ) un − a = uk − k n−1 ′ f (uk ) nuk Une étude mathématique montrerait que quelque soit u0 > 0, la suite un est √ convergente vers n a (la suite est décroissante à partir du rang 1, et minorée). def racine(a,n,e): f = lambda x: x**n-a u = a while f(max(0,u-e)) * f(u+e) > 0: u = u-f(u)/(n*u**(n-1)) return u Ici la fonction considérée f n’étant strictement monotone que sur R∗+ (sur R lorsque n est impair) on peut prendre comme critère d’arrêt que f (max(0, u − e)) et f (u + e) soient de signes opposés. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 2 Exercice 2. (Sujet 0 Banque PT) Etude d’une fonction définie de manière récursive PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 2 : Fonction définie de manière récursive 1) def g(x): assert 0 <= x < 2 if x<1: return x else: return 1 ● La fonction étant définie par disjonction de cas, il est utile de la ”vectoriser” (à l’aide de np.vectorize() afin de pouvoir l’appliquer à un tableau numpy en vue du tracé. g v = np.vectorize(g) X = np.arange(0,2,0.01) plt.figure("Exercice 4.1 : Courbe de $g$") plt.clf() Y = g v(X) plt.plot(X,Y) plt.axis([0,2,0,1.5]) plt.title(’Courbe représentative de $g$’) plt.show() ● Aussi le graphe de la fonction étant ”par pallier”, mieux vaut définir la fenêtre à afficher à l’aide de plt.axis() pour une bonne lisibilité. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 2 : Fonction définie de manière récursive Ce qui produit : PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 2 : Fonction définie de manière récursive 2) Définition de f de manière récursive : def f(x): assert x >= 0 if x < 2: return g(x) return x**0.5 * f(x-2) 3) Ici encore pour faciliter l’obtention de l’échantillonnage de l’image de f on ”vectorise” la fonction : f v = np.vectorize(f) X = np.linspace(0,6,1000) Y = f v(X) plt.figure("Exercice 4.2 : Courbe de $f$") plt.title(’Courbe représentative de $f$ sur $[0,6]$’) plt.plot(X,Y) plt.show() PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 2 : Fonction définie de manière récursive Ce qui produit : PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 2 : Fonction définie de manière récursive On remarque que la fonction f est continue et croissante sur [4.5; 5.5] avec f (4.5) < 4 et f (5.5) > 4. On applique donc une recherche par dichotomie à f − 4 et l’on retournera un encadrement à 10−2 près d’une racine. Le majorant dans l’encadrement nous donnera donc une valeur approchée à 10−2 près (par excès) du plus entier réel x pour lequel f (x) > 4. def dichotomie(f,a,b,e): assert f(a)*f(b) <=0 while (b-a) > e: m = (a+b)/2 if f(a)*f(m) <= 0: a, b = a, m else: a, b = m, b return a,b a,b = dichotomie(lambda x:f(x)-4, 4.5, 5.5, 0.01) In[1] : print(b) Out[1] : 5.125 In[3] : f(5.125) Out[3] : 4.001952648395531 In[4] : f(5.12) Out[4] : 3.9967987189749747 PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 3 : D’après Écrit Mines-Ponts 2016 Dans la simulation numérique de la propagation d’une pandémie on a tracé pour plusieurs valeurs de : p2, probabilité qu’une personne saine en contact avec la maladie soit infectée, La proportion x atteinte de la population atteinte par l’épidémie au cours de la simulation. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 3 : D’après Écrit Mines-Ponts 2016 On appelle seuil critique de pandémie la valeur de p2 à partir de laquelle plus de la moitié de la population a été atteinte par la maladie durant la simulation. On suppose que les valeurs de p2 et x atteinte utilisées pour tracer la courbe de la figure 3 ont été stockées dans deux listes de même longueur Lp2 et Lxa. Écrire en Python une fonction seuil(Lp2, Lxa) qui détermine par dichotomie un encadrement [p2cmin, p2cmax] du seuil critique de pandémie avec la plus grande précision possible. On supposera que la liste Lp2 est croissante de 0 à 1 et que la liste Lxa des valeurs correspondantes est croissante. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 3 : D’après Écrit Mines-Ponts 2016 def seuil(Lp2,Lxa): a, b = 0, len(Lp2)-1 while b-a>1: m = (a+b)//2 if (Lxa[a]-0.5)*(Lxa[m]-0.5) <= 0: b = m else: a = m return [Lp2[a], Lp2[b]] PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton La convergence d’une suite définie par la méthode Newton est un problème très difficile. L’ensemble des points u0 pour laquelle la suite (un ) converge est un ensemble très complexe. On peut s’en convaincre en étendant la suite au plan complexe (c’est possible notamment lorsque f est un polynôme et f ′ son polynôme dérivée) : ⎧ u ∈C ⎪ ⎪ ⎪ 0 f (un ) (un ) ∶ ⎨ un+1 = un − ′ ⎪ ⎪ ⎪ f (un ) ⎩ Illustrons le phénomène en prenant pour f le polynôme z ↦ z 3 − 1 (et donc f ′ ∶ z ↦ 3z 2 ) : u0 ∈ C ∀n ∈ N un+1 = un − 2un3 + 1 un3 − 1 = = un+1 3un2 3un2 La fonction f a 3 racines dans C : 1, j = exp(2iπ/3), j = exp(4iπ/3). Nous allons représenter dans un domaine carré du plan complexe l’ensemble des points initiaux u0 ∈ C pour lesquels cette suite converge : D = {u0 ∈ C ∣ (un )converge} La méthode de Newton se généralise très bien au plan complexe, et si (un ) converge, alors nécessairement c’est vers l’une des 3 racines de f : 1, j, j. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton Il faut choisir un critère approximatif de convergence. Prenons par exemple : Donné u0 ∈ C, u30 est à distance < tol = 0.01 de l’une des 3 racines. √ 3 , z2 = j : C’est à dire, en notant les racines z0 = 1, z1 = j = −1+i. 2 min(∣u30 − z0 ∣, ∣u30 − z1 ∣, ∣u30 − z2 ∣) < 0.01 1. Importer les modules numpy et matplotlib.pyplot. Définir les constantes z0 , z1 , z2 et la 2z 3 + 1 fonction F (z) = . 3z 2 2. Définir deux variables globales N = 30 et tol = 0.01. Ecrire une fonction g prenant en paramètre un complexe z et qui retourne : – S’il existe, le plus petit rang k ∈ [[1, N − 1]] tel que, si (un ) désigne la suite obtenue par la méthode de Newton avec u0 = z : min(∣uk − z0 ∣, ∣uk − z1 ∣, ∣uk − z2 ∣) < tol – Sinon, retourne N. 3. Définir une variable globale K=500. Créer un tableau T d’un maillage de K × K points du plan complexe régulièrement espacés dans le domaine carré {z ∈ C ∣∣Re(z)∣ ⩽ 2, ∣Im(z)∣ ⩽ 2}. 4. Créer le tableau des images des éléments de T par la fonction g . Puis le représenter graphiquement à l’aide de la fonction imshow de matplotlib.pyplot. Interpréter le graphique obtenu. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton Indications. Le nombre complexe i s’obtient par l’expression 1j, le module par la fonction abs. 3) On conseille d’utiliser les fonctions linspace et meshgrid du module numpy. Exemple d’utilisation de meshgrid : >>> x = [-1,-2] ; y = [1,2,3] >>> X, Y = np.meshgrid(x,y) >>> X, Y array([[-1,-2], [-1,-2], [-1,-2]]) array([[1, 1], [2, 2], [3, 3]] 4) : on conseille de vectoriser la fonction g : gv = np.vectorize(g) pour l’appliquer à T. # Création de la grille x = np.linspace(-2,2,K) y = np.linspace(2,-2,K) X,Y = np.meshgrid(x,y) T = X + Y * 1j # Vectorisation de g pour l’appliquer à un tableau et tracé : gv = np.vectorize(g) Tab = gv(T) plt.imshow(Tab, extent=[-2,2,-2,2]) plt.show() PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton 1) Code : # Importation des modules nécessaires : import numpy as np import matplotlib.pyplot as plt # Les 3 racines complexes de f : z0 = 1 z1 = -0.5+((3**0.5) / 2)*1j z2 = -0.5-((3**0.5) / 2)*1j # Fonction F de récurrence : u(n+1) = F(u(n)) : F = lambda z: (2*z**3 +1)/(3*z**2) PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton 2) Définition des variables globales N et tol et de la fonction g : N = 30 # Profondeur d’itération tol = 0.01 # Tolérance # Fonction estimant la convergence de (un) et sa rapidité pour u0 = z : def g(z): for i in range(N): z = F(z) m = min(abs(z-z0),abs(z-z1),abs(z-z2)) if m < tol: return i return N PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton 3) Création du tableau T du maillage : # Constante pour la précision du tracé K = 500 # Création du maillage pour le tracé : x = np.linspace(-2,2,K) y = np.linspace(2,-2,K) X,Y = np.meshgrid(x,y) T = X + Y * 1j 4) Tracé de la fractale de Newton : # Vectorisation de g pour l’appliquer à un tableau : gv = np.vectorize(g) # Tableau à convertir en image : Tab = gv(T) # Tracé : plt.clf() # Effacement de la fen^ etre graphique (optionnel) plt.imshow(Tab, extent=[-2,2,-2,2]) # Création de l’image # l’option extent définit les plages de valeurs des 2 axes PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Correction Exercice 4. Fractale de Newton Les points ”de divergence” sont en rouge foncé. Tous les autres points convergent vers l’une des 3 racines (en bleu foncé), à une vitesse d’autant plus grande qu’il apparaı̂t plus bleuté. En fait les frontières des bassins d’attraction (en bleu) sont des points divergents. PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 5 : Fractale de Mandelbrot Exercice 3. (Sujet 0 - Banque PT) Fractale de Mandelbrot PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 5 : Fractale de Mandelbrot (1) def f(c): u = 0 result = m for k in range(m+1): u = u**2 + c if abs(u) > M: result = k break return result PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 5 : Fractale de Mandelbrot (2) import numpy as np import matplotlib.pyplot as plt LX = np.linspace(-2,2,401) f v = np.vectorize(f) LY = f v(LX) # ou LY = [f(x) for x in LX] plt.plot(LX,LY) plt.grid() plt.xlabel(’c’) plt.ylabel(’f (c)’) plt.title(’graphe de f’) plt.axis([0,2,0,50]) plt.show() PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 5 : Fractale de Mandelbrot PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 5 : Fractale de Mandelbrot (3) et (4) (pour un tracé précis on a pris M = 70, m = 50 et K = 500). M=70 m=50 K=500 x = np.linspace(-2,0.5,K) y = np.linspace(-1.1,1.1,K) X, Y = np.meshgrid(x,y) Tab = f v(X+1j*Y) plt.imshow(Tab, extent = [-2,0.5,-1,1]) plt.show() PC/PC* - Lycée Thiers TD 2 : Recherche de racines Exercice 1 : Extraction de racine n-ième par la méthode de Newton Exercice 2 : Fonction définie de manière récursive Exercice 3 : D’après Mines-Ponts 2016 Exercice 4 : Fractale de Newton Exercice supplémentaire : Fractale de Mandelbrot Enoncé Corrigé Exercice 5 : Fractale de Mandelbrot PC/PC* - Lycée Thiers TD 2 : Recherche de racines