Adloun

Un balayage qui rate le minimum

Exercice d'entraînement · niveau 3 (difficile) · mathématiques approfondies (ECG 2e année), chapitre 13 — Travaux pratiques avec Python · Fonctions de plusieurs variables sur machine

Énoncé

On veut le minimum de sous la contrainte . Le calculer exactement, puis dire ce que rend le programme suivant et pourquoi il ne donne pas la même chose.

import numpy as np
f = lambda x, y: x**2 + 2*y**2
xs = np.linspace(-2, 6, 10)
v = f(xs, 3 - xs)
i = v.argmin()
print(round(xs[i], 4), round(v[i], 4))

Corrigé

Le calcul exact. On substitue : C'est un polynôme de degré de coefficient dominant : son minimum global est atteint là où s'annule, soit . Alors et

Ce que rend le programme. np.linspace(-2, 6, 10) produit dix points régulièrement espacés de à , donc de pas . La valeur n'en fait pas partie : les deux points qui l'encadrent sont Par symétrie de la parabole autour de , ces deux points donnent la même valeur : Le programme affiche donc et (argmin rend le premier indice en cas d'égalité), au lieu de et .

Pourquoi ce n'est pas une erreur de programmation. Le code est juste ; c'est la méthode qui est limitée. Un balayage ne visite qu'une grille finie : il rend le meilleur des points visités, jamais le minimum de la fonction. Ici l'erreur sur atteint , et rien dans la sortie ne l'annonce.

Ce qu'il faut en conclure. Un balayage corrobore un calcul, il ne le remplace pas. Augmenter le nombre de points réduit l'écart — avec np.linspace(-2, 6, 100001) on retrouve et — mais aucune finesse de grille ne démontre que le minimum est atteint : c'est la dérivée qui le garantit.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.