Python en mathématiques - Niveau 2

Balayage

Un algorithme de balayage a pour but de déterminer une valeur approchée (ou un encadrement) permettant de répondre au problème posé. Ce type d’algorithme consiste à subdiviser l’intervalle de recherche $[a ; b]$ en $N$ intervalles de même longueur, la longueur $\frac{b-a}{N}$ appelée pas. On recherche alors dans quel sous-intervalle de $[a ; b]$ se situe la valeur approchée la plus pertinente selon le problème posé.

Méthode d'Euler

Principe : la dérivée $f'$ d'une fonction $f$ est connue, mais pas cette fonction $f$. On connaît aussi une image d’un réel $x_0$ par cette fonction $f$, c'est-à-dire les coordonnées d'un point $M_0$ appartenant à la courbe $C_f$.

  • Dans un repère, on place le point $M_0$ connu, de coordonnées $x_0$ et $y_0 = f(x_0)$.
  • Puisque la dérivée $f'$ est connue, on peut déterminer l'équation de la tangente que la courbe $C_f$ devrait avoir en $M_0$, c'est-à-dire $y = f'(x_0)(x – x_0) + y_0$. On trace alors cette droite dans le repère :
  • Un point de cette tangente « proche » de $M_0$ appartient presque à la courbe $C_f$. On désigne par $h$ le pas qui correspond à l'écart entre ce point $M_1$ et le point $M_0$ :
  • Ainsi, l'abscisse de $M_1$ est $x_1 = x_0 + h$.
    Comme $M_1$ est un point de la droite d'équation $y = f'(x_0)(x – x_0) + y_0$, son ordonnée est : $$\begin{array}{ccl} y_1 & = & f'(x_0)(x_1 – x_0) + y_0 \\ & = & f'(x_0)(x_0 + h – x_0) + y_0 \\ & = & f'(x_0) \times h + y_0 \end{array}$$
  • Le segment $[M_0 M_1]$ est donc proche de la courbe $C_f$ sur l'intervalle $[x_0 ; x_1]$ et $M_1(x_1 ; y_1)$ est « presque » sur la courbe $C_f$.
    On trace alors la droite passant par $M_1$ d'équation $y = f'(x_1)(x – x_1) + y_1$ :
  • On place sur cette droite le point $M_2$ d'abscisse $x_2 = x_1 + h$. Par construction, l'ordonnée de $M_2$ est : $$\begin{array}{ccl} y_2 & = & f'(x_1)(x_2 – x_1) + y_1 \\ & = & f'(x_1)(x_1 + h – x_1) + y_1 \\ & = & f'(x_1) \times h + y_1 \end{array}$$
  • Le segment $[M_1 M_2]$ est donc proche de la courbe $C_f$ sur l'intervalle $[x_1 ; x_2]$ et $M_2(x_2 ; y_2)$ est « presque » sur la courbe $C_f$.
    Selon ce principe, le point suivant sera $M_3$ d'abscisse $x_3 = x_2 + h$ et d'ordonnée $y_3 = f'(x_2) \times h + y_2$.
  • Le segment $[M_2 M_3]$ est donc proche de la courbe $C_f$ sur l'intervalle $[x_2 ; x_3]$ et $M_3(x_3 ; y_3)$ est « presque » sur la courbe $C_f$.
    Le point suivant sera $M_4$ d'abscisse $x_4 = x_3 + h$ et d'ordonnée $y_4 = f'(x_3) × h + y_3$.
  • etc...

La méthode d'Euler consiste ainsi à construire ces points de proche en proche, avec un pas $h$ suffisamment petit pour visualiser une courbe de plus en plus précise pouvant représenter la fonction $f$.

En utilisant cette méthode, on souhaite tracer sur l’intervalle $[0 ; 1]$ la courbe $C_f$ représentative d’une fonction $f$ telle que $f(0) = 1$ et $f’(x) = f(x)$.

  1. Recopier et compléter le code de la fonction coordonnees() de paramètres x0 et y0 (les coordonnées de $M_0$), la valeur h du pas entre deux abscisses successives et un réel borne. Cette fonction renvoie les listes des abscisses et des ordonnées successives obtenues par l’algorithme décrit précédemment sur l’intervalle [x0 ; borne].
    
    			
    			
  2. Écrire le code d’une fonction nommée tracer(), de même paramètres que la fonction coordonnees() et qui renvoie la courbe obtenue à l’aide du module matplotlib sur l’intervalle [-borne ; borne] tel que x0 appartienne à cet intervalle. Voici trois exemples d'appels pour cette fonction :
    • Question 1°/
    • Question 2°/
    
    			
    			
    import matplotlib.pyplot as plt
    
    def coordonnees(x0, y0, h, borne):
        liste_x = [x0]
        liste_y = [y0]
        while x0 < borne :
            x1 = x0+h
            y1 = y0*(h+1)
            liste_x.append(x1)
            liste_y.append(y1)
            x0 = x1
            y0 = y1
        return (liste_x, liste_y)
    
    def coordonnees_bis(x0, y0, h, borne):
        liste_x = [x0]
        liste_y = [y0]
        while x0 > -borne :
            x1 = x0-h
            y1 = y0*(1-h)
            liste_x = [x1] + liste_x
            liste_y = [y1] + liste_y
            x0 = x1
            y0 = y1
        return (liste_x, liste_y)
    
    def tracer(x0, y0, h, borne):
        (liste_x1, liste_y1) = coordonnees(x0, y0, h, borne)
        (liste_x2, liste_y2) = coordonnees_bis(x0, y0, h, borne)
        liste_x = liste_x2 + liste_x1
        liste_y = liste_y2 + liste_y1
        plt.plot(liste_x, liste_y, linestyle = '-', linewidth = 2)
        plt.grid()
        plt.show()
    
        

Encadrement de $\sqrt{2}$

Écrire le code d'une fonction nommée encadre_racine() qui respecte la spécification suivante :

Paramètres un entier naturel n
un nombre depart qui correspond à la borne inférieure de la recherche par balayage
Valeur renvoyée un couple de nombres encadrant $\sqrt{2}$ avec une amplitude de $10^{-n}.$

Vérifier que l'appel encadre_racine(3,1) renvoie le couple (1.414, 1.415).

  • Une solution

			
			

Autres algorithmes au programme

Programme de 1ère technologique 2019

Analyse Exemples d’algorithme
Fonctions de la variable réelle Calculer une valeur approchée d’une solution d’une équation par balayage

Programme de Tale technologique 2020

Analyse Exemples d’algorithme
Fonctions exponentielles Intercaler entre deux points déjà construits un troisième point ayant pour abscisse (respectivement pour ordonnée) la moyenne arithmétique (respectivement géométrique) des abscisses (respectivement des ordonnées) des deux points initiaux.
Statistique et probabilités Exemples d’algorithme
Séries statistiques à deux variables quantitatives Rechercher un couple $(a, b)$ minimisant l’expression $\sum_i ( y_i – (a x_i + b))^2$ parmi un ensemble fini de couples proposés par les élèves ou générés par balayage, tirage aléatoire...

Programme de 1ère spécialité 2019

Analyse Exemples d’algorithme
Dérivation Écrire la liste des coefficients directeurs des sécantes pour un pas donné.
Fonction exponentielle Construction de l'exponentielle par la méthode d'Euler
Fonctions trigonométriques Approximation de $\pi$ par la méthode d'Archimède

Programme de Tale spécialité 2020

Analyse Exemples d’algorithme
Continuité des fonctions d’une variable réelle Résolution par la méthode d’Euler de $y’ = ƒ,$ de $y’ = ay + b.$
Primitives et équations différentielles Méthodes des rectangles, des milieux, des trapèzes
Calcul intégral Méthode des rectangles, des trapèzes.
Algorithme de Brouncker pour le calcul de $\ln(2)$

Programme de Tale complémentaire 2020

Analyse Exemples d’algorithme
Fonctions : continuité, dérivabilité, limites, représentation graphique Méthodes de recherche de valeurs approchées d’une solution d’équation du type $ƒ(x) = k$ : balayage, méthode de Newton
Primitives et équations différentielles Sur des exemples, résolution approchée d’une équation différentielle par la méthode d’Euler.
Intégration Méthode des rectangles, des trapèzes.