Trinôme du second degré et Python

trinomes second degré python poo

Trinôme du second degré et Python

Nous allons aborder ici la notion de trinôme du second degré en Python sous un angle POO (Programmation Orientée Objet). J’avais en effet envie de construire une classe Python représentant un tel trinôme et pouvant effectuer toutes les opérations classiques du lycée.

Trinôme du second degré et Python: préliminaires mathématiques

Un trinôme du second degré est un polynôme de la forme:$$P(x)=ax^2+bx+c,\quad a\neq0.$$

À ce polynôme, on peut lui attribuer le nombre:$$\Delta=b^2-4ac$$qui est son discriminant.

Si \(\Delta > 0\) alors il existe deux valeurs distinctes \(x_1\) et \(x_2\) de x telles que P(x) = 0: ce sont les racines de P. Dans ce sas, P(x) peut se factoriser sous la forme \( P(x) = a(x-x_1)(x-x_2) \).

Si \(\Delta = 0\) alors il existe une unique valeur (x_0\) pour laquelle \(P(x_0) = 0\): c’est sa racine double. Sans ce cas, \( P(x)=a(x-x_0)^2\).

Si \(\Delta < 0\) alors l’équation P(x) = 0 n’admet aucune racine réelle, et P(x) ne se factorise pas dans l’ensemble des nombres réels.

À l’aide de la forme factorisée de P(x), si elle existe, on peut déduire le signe de P(x).

Je vous invite à regarder la fiche de cours sur le second degré sur cette page.

Trinôme du second degré et Python: préliminaires informatiques

J’avais d’abord publié un article dans lequel j’exposais des méthodes plutôt longues… Et puis, après quelques recherches, j’ai découvert que je pouvais utiliser Xcas avec Python ! Cela tombe bien car cela facilite beaucoup la construction des méthodes.

Python et giac Xcas

En ligne de commande, il faut avant tout installer les modules Python suivants. Sous windows:

python.exe -m pip install wheel
python.exe -m pip install giacpy

Pour les autres plateformes (MacOS et Linux), allez sur la page suivante pour plus d’informations:

https://www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html

Maintenant, on peut importer les fonctions nécessaires du module giacpy:

from giacpy import latex, solve, simplifier, evalf, factoriser

Ce qu’il y a d’intéressant avec ce module, c’est que l’on va pouvoir effectuer des calculs algébriques. Par exemple:

>>> solve('x*x-3*x+2=0')

est une liste contenant toutes les solution de l’équation \(x^2-3x+2=0\).

Trinôme du second degré et Python: la classe

Le constructeur

class Trinome:
    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
        self.delta = self.b**2 - 4*self.a*self.c
        self.giac_equation = '{}*x*x+{}*x+{}=0'.format(a,b,c)
        self.giac_trinome = '{}*x*x+{}*x+{}'.format(a,b,c)

J’ai opté pour définir le discriminant dès le constructeur car il ne m’a pas semblé utile d’écrire une méthode rien que pour cela.

Les variables self.giac_… me serviront pour trouver les racines et la factorisation.

Les méthodes

La plupart des méthodes comporte un argument booléen optionnel tex qui permet un retour au format \(\LaTeX\).

  • __str__ : pour afficher le polynôme
  • racines(tex,approx) : pour calculer les racines (en valeur exacte ou approchée)
  • factorise(tex) : pour factoriser le trinôme
  • canonique(tex) : pour avoir la forme canonique du trinome
  • signe(tex) pour avoir un tableau de signes
  • draw(tex,e,namepic) pour dessiner la parabole sur l’intervalle \(\left[-\frac{b}{2a}-e~;~-\frac{b}{2a}+e\right]\) (si tex=True, cela enregistre l’image avec le nom namepic qui, par défaut, est “parabole.png”)
  • export_latex(filename) : pour créer un fichier \(\LaTeX\) avec toutes les informations, et qui sera compilé via pdflatex.

Exemples

>>> P = Trinome(-2,3,4)
>>> P.racines()
('(-sqrt(41)+3)/4', '(sqrt(41)+3)/4')
>>> print(P)
-2x²+3x+4
>>> P.canonique()
'-2(x-3/4)² + 41/8'
>>> print(P.signe())
--------------------------------
|  x   |-∞     x₁     x₂     +∞|
--------------------------------
| P(x) |    -   0  +   0  -    |
--------------------------------
>>> P.draw()
trinome second degré python
>>> P.export_latex()

qui crée un document .tex et qui génère le PDF suivant:

Téléchargement de la classe

Cette partie est réservée aux abonné.e.s de ce site.
Si vous êtes abonné·e·s, merci de vous identifier pour visualiser le contenu dans son intégralité.
Stéphane Pasquet
Stéphane Pasquet

1 réflexion au sujet de « Trinôme du second degré et Python »

Philippe

Philippe RackettePublié le  11:44 - Mai 23, 2021

On pourrait ajouter des méthodes “forme_canonique” et “graphique” pour compléter le programme.

Stéphane Pasquet

Stéphane PasquetPublié le  2:52 - Mai 23, 2021

En effet, c’est intéressant d’ajouter ces deux méthodes. Je vais même ajouter une exportation \(\LaTeX\).

Philippe

Philippe RackettePublié le  11:02 - Mai 24, 2021

Je n’arrive à installer le module giacpy requis, ni sur MacOS 11.3.1 ni sur Ubuntu 21.04.
La commande “sudo python -m pop install giacpy” produit des erreurs que je n’arrive pas à résoudre.

Philippe

Philippe RackettePublié le  11:21 - Mai 24, 2021

Il semblerait que le fichier giac/giac.h soit manquant dans le dépôt Gitlab.

    Stéphane Pasquet

    Stéphane PasquetPublié le  9:58 - Mai 25, 2021

    Je suis sous Windows, et cela a bien fonctionné pour moi. Tout ceci n’est pas de mon ressort, mais quand-même… je pense que depuis le temps, s’il y avait une erreur, l’auteur l’aurait rectifiée. Moi, je ne peux rien à ce niveau malheureusement.

Philippe

Philippe RackettePublié le  12:33 - Mai 25, 2021

J’ai pu faire fonctionner le programme sous Windows 10 en remplaçant ‘nom fichier.tex’ par ‘nomfichier.tex’ ligne 254. Lorsque qu’on génère deux études à la suite, le graphique de la précédente étude reste dans le fichier PDF nouvellement généré.

    Stéphane Pasquet

    Stéphane PasquetPublié le  1:39 - Mai 25, 2021

    Il allait de soit que quand je marque “nom fichier”, il ne fallait pas laisser ça comme ça 🙂 En général, les noms de fichiers ne doivent pas comporter d’espace pour éviter les problèmes. Pour générer plusieurs fichiers, il faut changer les noms à chaque fois (construire par exemple une boucle et numéroter les fichiers en fonction de l’itération).

Laissez votre message