Les polynômes de degré 2


Nous allons voir quelques algorithmes gravitant autour des polynômes de degré 2. Nous explorerons en parallèle les outils python qui nous seront utiles à cet effet.

Calculer le discriminant

Un calcul direct

Connaissant les coefficients ‘a’, ‘b’ et ‘c’ dun polynôme \(p(x)= ax^2 + bx + c\), il est extrêmement aisé de calculer son discriminant: il suffit décrire la formule bien connue et daffecter le résultat à une variable, que lon appellera par exemple delta:

>>> a = 1
>>> b = 5
>>> c = 6
>>> delta = b**2 - 4*a*c
>>> delta
1

Que constate-t-on:

  • Il est indispensable décrire explicitement les multiplications, on ne pourrait pas écrire b**2-4ac car le nombre 4 suivi directement de la variable ac déclencherait une erreur de syntaxe.
  • Les puissances sécrivent en python à laide de lopérateur ‘**’.

Utiliser une fonction

En informatique, il est souvent plus judicieux dutiliser une fonction lorsque lon a un algorithme (un calcul comme \(\Delta = b^2 - 4ac\) est un algorithme, même sil est extrêmement simple). Lintérêt est de pouvoir à tout moment appeler la fonction pour en connaître le résultat.

La manière la plus simple de réaliser cela en python est:

def discriminant(a, b, c):
   return b**2 - 4*a*c

Cela suffit à définir une fonction en python. Le mot clé def est suivi du nom de la fonction, puis de la liste des paramètres.

Le corps de la fonction peut contenir autant de ligne que nécessaire. Une fois que lon est parvenu à calculer le résultat recherché, on spécifie la valeur de retour de la fonction à laide du mot clé return, qui est en général (mais pas toujours) dans la dernière ligne de la fonction.

Comment utiliser cette fonction ? En utilisant la même notation quen mathématiques:

>>> delta = discriminant(1, 5, 6)
>>> delta
1

Ici, on appelle la fonction avec les valeurs de paramètres a == 1, b == 5 et c == 6, puis on affecte le résultat de la fonction à la variable delta, que lon affiche ensuite.

Pour bien comprendre ce mécanisme, je vous invite à visiter le site python tutor sur lequel vous pourrez exécuter le programme précédent pas à pas, en examinant le contenu de la mémoire en temps réel.

Déterminer les racines dun polynôme

Un script direct

Le théorème étudié en classe (nombre et calcul des racines en fonction du signe du discriminant) nest ni plus ni moins quun algorithme décrivant précisément comment déterminer les racines dun polynôme de degré 2.

On peut quasiment le suivre à la lettre pour limplémenter en python:

from math import sqrt # Pour calculer des racines carrées (square root)

a = 1
b = 5
c = 6
# On réutilise évidemment la fonction discriminant:
delta = discriminant(a, b, c)

if delta < 0:
   print("Ce polynôme n'a aucune racine")
elif delta == 0:
   alpha = -b / (2*a)
   print("Ce polynôme a une racine double:", alpha)
else:
   # Ici on sait que delta > 0 nécessairement
   x1 = (-b - sqrt(delta)) / (2*a)
   x2 = (-b + sqrt(delta)) / (2*a)
   print("Ce polynôme a deux racines distinctes:", x1, "et", x2)

Utiliser une fonction

Il est tout à fait envisageable décrire une fonction renvoyant les éventuelles racines dun polynôme. Mais nous aurons une difficulté supplémentaire: le nombre de racines peut être 0, 1 ou 2. Peut-on renvoyer un nombre variable de résultats ?

Cest possible, à condition de renvoyer la liste des racines.

  • Sil ny a pas de racines, on pourra renvoyer la liste vide []
  • Sil y a une racine double, on renverra une liste contenant un seul élément [alpha]
  • Sil y a deux racines, on renverra une liste à deux éléments [x1, x2]

Voici une implémentation possible:

def racines_polynôme_degré_2(a, b, c):
   delta = discriminant(a, b, c)

   if delta < 0:
      print("Ce polynôme n'a aucune racine")
   elif delta == 0:
      alpha = -b / (2*a)
      print("Ce polynôme a une racine double:", alpha)
   else:
      # Ici on sait que delta > 0 nécessairement
      x1 = (-b - sqrt(delta)) / (2*a)
      x2 = (-b + sqrt(delta)) / (2*a)
      print("Ce polynôme a deux racines distinctes:", x1, "et", x2)