Bibliothèque butinfom
Cette bibliothèque Python propose des outils pour l’enseignement des mathématiques en BUT d’informatique. Les fonctionnalités d’affichage des expressions mathématiques sont prévues pour l’environnement Jupyter Notebook.
Installation de la bibliothèque
Depuis la console système
Exécuter la commande ci-dessous pour être sûr d’avoir la version la plus récente :
Depuis une cellule de cahier Jupyter
Exécuter la commande ci-dessous pour être sûr d’avoir la version la plus récente :
Remarque
Ces deux dernières commandes fonctionnent dans les Jupyter Notebooks ouverts avec Google Colab et Visual Studio Code.
Module pivotgauss
Ce module permet d’afficher les étapes de l’algorithme du pivot de Gauss pour :
- la résolution d’un système d’équations linéraires ;
- l’inversion d’une matrice carrée.
Ce module s’appuie principalement sur le module
sympy.
Résolution d’un système d’équations linéaires
Exemple. Soit le système d’équations linéaires suivant à trois inconnues :
On peut représenter le système précédent par le tableau de nombres suivant :
Pour obtenir la représentation des étapes de résolution du système, exécuter les instructions suivantes dans la cellule d’un cahier Jupyter :
from butinfom import PivotGaussSysteme
piv1 = PivotGaussSysteme([
[1, -2, -3, 0],
[3, -6, -1, -8],
[1, 0, -4, 5]
])
piv1 # à placer en dernière ligne de cellule pour obtenir l'affichage naturel
Affichage obtenu
Remarque. Types de nombres du tableau 2D
Le constructeur de la classe PivotGaussSysteme s’appelle avec un tableau
2D représenté par une instance du type prédéfini list comme dans
l’exemple ci-dessus ou par une instance de la classe Matrix du module
sympy.
Les éléments de ce tableau 2D sont :
- des nombres des types prédéfinis (
int,float) ou - des instances de la classe
Fractiondu modulefractionsou - des instances de toute classe de nombres du module
sympyou - des instances de la classe
Symboldesympy
Voici un exemple montrant comment utiliser la classe Symbol de sympy.
Considérons le système suivant d’inconnues x, y et z avec a, b et c trois constantes réelles :
Voilà comment résoudre ce système à l’aide du module pivot_gauss :
from butinfom import PivotGaussSysteme
from sympy import symbols # importation à ajouter
a, b, c = symbols('a b c') # déclaration des constantes a, b et c
piv1 = PivotGaussSysteme([
[1, 1, 1, a],
[1, -1, -2, b],
[ 1, 5, 7, c]
])
piv1 # à placer en dernière ligne pour obtenir l'affichage naturel
Affichage obtenu
Pour obtenir le code \LaTeX correspondant, on réalise l’affichage avec la
fonction print comme présenté ci-dessous :
from butinfom import PivotGaussSysteme
piv1 = PivotGaussSysteme([
[1, -2, -3, 0],
[3, -6, -1, -8],
[1, 0, -4, 5]
])
print(piv1) # affichage du code LaTeX
Affichage obtenu
\begin{cases}
x - 2y - 3z = 0 \\
3x - 6y - z = -8 \\
x - 4z = 5 \\
\end{cases} \\
\begin{array}{l|ccc|c|}
\hline
L_{1} & 1 & -2 & -3 & 0 \\
L_{2} & 3 & -6 & -1 & -8 \\
L_{3} & 1 & 0 & -4 & 5 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & -2 & -3 & 0 \\
L_{2} \leftarrow L_{2} - 3L_{1} & 0 & 0 & 8 & -8 \\
L_{3} \leftarrow L_{3} - L_{1} & 0 & 2 & -1 & 5 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & -2 & -3 & 0 \\
L_{2} \leftarrow L_{3} & 0 & 2 & -1 & 5 \\
L_{3} \leftarrow L_{2} & 0 & 0 & 8 & -8 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & -2 & -3 & 0 \\
L_{2} \leftarrow \frac{1}{2}L_{2} & 0 & 1 & - \frac{1}{2} & \frac{5}{2} \\
L_{3} \leftarrow L_{3} & 0 & 0 & 8 & -8 \\
\hline
\hline
L_{1} \leftarrow L_{1} + 2L_{2} & 1 & 0 & -4 & 5 \\
L_{2} \leftarrow L_{2} & 0 & 1 & - \frac{1}{2} & \frac{5}{2} \\
L_{3} \leftarrow L_{3} & 0 & 0 & 8 & -8 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & 0 & -4 & 5 \\
L_{2} \leftarrow L_{2} & 0 & 1 & - \frac{1}{2} & \frac{5}{2} \\
L_{3} \leftarrow \frac{1}{8}L_{3} & 0 & 0 & 1 & -1 \\
\hline
\hline
L_{1} \leftarrow L_{1} + 4L_{3} & 1 & 0 & 0 & 1 \\
L_{2} \leftarrow L_{2} + \frac{1}{2}L_{3} & 0 & 1 & 0 & 2 \\
L_{3} \leftarrow L_{3} & 0 & 0 & 1 & -1 \\
\hline
\end{array} \\
\begin{cases}
x = 1 \\
y = 2 \\
z = -1 \\
\end{cases} \\
Remarque
- La classe
PivotGaussSystemeprend en charge tous les systèmes linéaires en particulier ceux pour lesquels le nombre d’équations n’est pas égal au nombre d’inconnues. - Au dessus de trois inconnues, les inconnues sont nommées x_1, x_2, x_3, x_4 etc.
Inversion d’une matrice carrée
La classe PivotGaussInverseMatrice prend en charge toute matrice carré qu’elle
soit inversible ou non. Si la matrice n’est pas inversible, l’algorithme du
pivot n’aboutit pas mais les étapes avant le blocage sont tout de même
affichées.
Exemple. Cas d’une matrice inversible
On considère la matrice inversible suivante :
Pour obtenir la représentation des étapes d’inversion de la matrice, exécuter les instructions suivantes dans la cellule d’un cahier Jupyter :
from butinfom import PivotGaussInverseMatrice
piv2 = PivotGaussInverseMatrice([
[ 1, -1, 0],
[ 0, 3, -2],
[-1, 2, -1]
])
piv2 # à placer en dernière ligne de cellule pour obtenir l'affichage naturel
Afffichage obtenu
Remarque. Types de nombre pris en charge
Le constructeur de la classe PivotGaussInverseMatrice s’appelle avec un
tableau 2D représenté par une instance du type prédéfini list comme dans
l’exemple ci-dessus ou par une instance de la classe Matrix du module
sympy.
Les éléments de ce tableau 2D sont des nombres :
- des types prédéfinis (
int,float) ou - des instances de la classe
Fractiondu modulefractionsou - de toute classe de nombres du module
sympy.
Pour obtenir le code \LaTeX correspondant, on réalise l’affichage avec la
fonction print comme présenté ci-dessous :
from butinfom import PivotGaussInverseMatrice
piv2 = PivotGaussInverseMatrice([
[ 1, -1, 0],
[ 0, 3, -2],
[-1, 2, -1]
])
print(piv2) # affichage du code LaTeX
Affichage obtenu
\begin{array}{l|ccc|ccc|}
\hline
L_{1} & 1 & -1 & 0 & 1 & 0 & 0 \\
L_{2} & 0 & 3 & -2 & 0 & 1 & 0 \\
L_{3} & -1 & 2 & -1 & 0 & 0 & 1 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & -1 & 0 & 1 & 0 & 0 \\
L_{2} \leftarrow L_{2} & 0 & 3 & -2 & 0 & 1 & 0 \\
L_{3} \leftarrow L_{3} + L_{1} & 0 & 1 & -1 & 1 & 0 & 1 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & -1 & 0 & 1 & 0 & 0 \\
L_{2} \leftarrow \frac{1}{3}L_{2} & 0 & 1 & - \frac{2}{3} & 0 & \frac{1}{3} & 0 \\
L_{3} \leftarrow L_{3} & 0 & 1 & -1 & 1 & 0 & 1 \\
\hline
\hline
L_{1} \leftarrow L_{1} + L_{2} & 1 & 0 & - \frac{2}{3} & 1 & \frac{1}{3} & 0 \\
L_{2} \leftarrow L_{2} & 0 & 1 & - \frac{2}{3} & 0 & \frac{1}{3} & 0 \\
L_{3} \leftarrow L_{3} - L_{2} & 0 & 0 & - \frac{1}{3} & 1 & - \frac{1}{3} & 1 \\
\hline
\hline
L_{1} \leftarrow L_{1} & 1 & 0 & - \frac{2}{3} & 1 & \frac{1}{3} & 0 \\
L_{2} \leftarrow L_{2} & 0 & 1 & - \frac{2}{3} & 0 & \frac{1}{3} & 0 \\
L_{3} \leftarrow -3L_{3} & 0 & 0 & 1 & -3 & 1 & -3 \\
\hline
\hline
L_{1} \leftarrow L_{1} + \frac{2}{3}L_{3} & 1 & 0 & 0 & -1 & 1 & -2 \\
L_{2} \leftarrow L_{2} + \frac{2}{3}L_{3} & 0 & 1 & 0 & -2 & 1 & -2 \\
L_{3} \leftarrow L_{3} & 0 & 0 & 1 & -3 & 1 & -3 \\
\hline
\end{array} \\