Retour à la page Algèbre Ipython      Retour à la page Ipython                          Télécharger le notebook

FORMAV votre partenaire Formation http://formav.eu

Résolution d'un système d'équations de n équations à n inconnues

$\large \begin{cases}& a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1\\& a_{21}x_1+a_{22}x_2+...+a_{2n}x_n=b_2\\& \ddots \qquad \qquad\ddots \qquad \qquad\ddots\\& a_{n1}x_1+a_{n2}x_2+...+a_{nn}x_n=b_n\end{cases}$

-------------------- Méthode Mathématique --------------------

Méthode matricielle de résolution d'un système de n équations à n inconnues

$\begin{bmatrix} a_{11}& \dots & a_{1n}\\ \vdots& \ddots& \vdots \\ a_{n1} & \dots&a_{nn} \end{bmatrix}\begin{bmatrix} x_{1}\\ \vdots\\ x_{n} \end{bmatrix}=\begin{bmatrix} b_{1}\\ \vdots\\ b_{n} \end{bmatrix}$

On pose:

$ \quad A=\begin{bmatrix} a_{11}& \dots & a_{1n}\\ \vdots& \ddots& \vdots \\ a_{n1} & \dots&a_{nn} \end{bmatrix}\qquad X=\begin{bmatrix} x_{1}\\ \vdots\\ x_{n} \end{bmatrix} \qquad B=\begin{bmatrix} b_{1}\\ \vdots\\ b_{n} \end{bmatrix}$

$\quad AX=B$

  • On calcule le déterminant de $A$
  • Si le déterminant de A n'est pas nul on résout le système en calculant l'inverse de la matrice :

$\qquad X=A^{-1}B$

  • Si le déterminant est nul on ne peut pas résoudre le système de cette façon.

-------------------------------------------------

-------------------- Résolution en Python --------------------

La bibliothèque numpy et le package linalg de numpy permettent de résoudre un système de n équations à n inconnues

On utilisera la fonction numpy.linalg.solve

Attention pour utiliser numpy.linalg.solve il faut que la matrice $A$ soit inversible

Déclaration des bibliothèques à importer

In [591]:
#-*- coding: utf-8 -*-
#Résolution d'un système d'équations de façon matricielle
#Programme créé par Martine Arrou-Vignod 11 Juin 2015
%matplotlib inline
from math import * 
import numpy as np
import numpy.linalg as la
import matplotlib.pyplot as plt
In [592]:
#précision pour écriture des nombres réels dans les matrices et vecteurs 
np.set_printoptions(precision=2)

Programme1: Résolution rapide

In [593]:
#définition de la fonction de résolution rapide
def res_rapide(A,B):
#vérification de la taille des matrices
    if ( A.size==A[1].size**2) and  (A[1].size==B.size):
        deta=la.det(A)
        print('le déterminant de la matrice a est:',deta)
        if deta != 0 :
            print('On peut résoudre le système en utilisant la fonction solve')
            X= la.solve(A, B)
            print(X)
        else:
            print('On ne peut pas résoudre pas le système en utilisant la fonction solve')
    else:
         print('le système n\'est pas un système de n équations à n inconnues')
In [594]:
#Exemple p1_1     
A1 = np.array([[2,3,3,1], [-1,1,1,1], [-1,0,0,1], [-2,-1,1,1]])
B1= np.array([4,1,5,1])
res_rapide(A1,B1)
le déterminant de la matrice a est: -6.0
On peut résoudre le système en utilisant la fonction solve
[ 3.67 -1.83 -2.17  8.67]
In [595]:
#Exemple p1_2 
A2 = np.array([[2,3,3,1], [-1,1,1,1], [-1,1,1,1], [-2,-1,1,1]])
B2= np.array([4,1,5,1])
res_rapide(A2,B2)
le déterminant de la matrice a est: 0.0
On ne peut pas résoudre pas le système en utilisant la fonction solve
In [596]:
#Exemple p2_3 
A3 =  np.array([[2,3,3,1], [-1,1,1,1], [-1,0,0,1], [-2,-1,1,1]])
B3= np.array([4,1,5])
res_rapide(A3,B3)
le système n'est pas un système de n équations à n inconnues

Programme 2: Résolution avec mise en page

Fonctions utiles pour le programme

In [597]:
###Définition des fonctions du programme
In [598]:
#Fonction pour afficher le systeme
def affichsystem(A,B):
    ch=""
    for i in range(1,A[1].size+1):
        ch=""
        for k in range(1,A[1].size):
            if A[i-1][k] >=0 :
                ch+=chr(ord("+"))
            else:
                ch+=chr(ord("-"))
        if A[1].size==3:
            print(A[i-1][0],'x '+ch[0],np.abs(A[i-1][1]),'y '+ch[1],np.abs(A[i-1][2]),'z =',B[i-1][0]) 
        if A[1].size==4:
             print(A[i-1][0],'x '+ch[0],np.abs(A[i-1][1]),'y '+ch[1],np.abs(A[i-1][2]),'z '+ch[2],np.abs(A[i-1][3]),'t=',B[i-1][0]) 
        if A[1].size==5:
             print(A[i-1][0],'x '+ch[0],np.abs(A[i-1][1]),'y '+ch[1],np.abs(A[i-1][2]),'z '+ch[2],np.abs(A[i-1][3]),'z '+ch[3],np.abs(A[i-1][4]),'u=',B[i-1][0]) 
        
#Fonction pour résoudre le système
def resolsystem(A,B):
    det=la.det(A)
    print('Résolution du système')
    print('Matrice A')
    print(A)
    print('Vecteur B')
    print(B)
    print('Le déterminant de la matrice A est : ',det)

    if det != 0 :
        print('le système a une solution unique ')
        sol=la.solve(A,B)
        print('la solution est: x=',"%1.2f"%sol[0][0], '\t y=',"%1.2f"%sol[1][0],'\t z=',"%1.2f"%sol[2][0])
    if det==0:
        print('Le système n\'a pas de solution ou une infinité de solutions')

#Fonction pour afficher et résoudre le system 
def affchresolsystem(A,B):
    if ( A.size==A[1].size**2) and  (A[1].size==B.size):
        affichsystem(A,B)
        resolsystem(A,B)
    else:
        print('le système n\'est pas un système de n équations à n inconnues')
    
In [599]:
#Exemple p2_1 
A=np.array([[3,-1,1],[1,1,1],[1,2,4]])
B=np.array([[-1],[4],[3]])
affchresolsystem(A,B)
3 x - 1 y + 1 z = -1
1 x + 1 y + 1 z = 4
1 x + 2 y + 4 z = 3
Résolution du système
Matrice A
[[ 3 -1  1]
 [ 1  1  1]
 [ 1  2  4]]
Vecteur B
[[-1]
 [ 4]
 [ 3]]
Le déterminant de la matrice A est :  10.0
le système a une solution unique 
la solution est: x= 1.60 	 y= 4.10 	 z= -1.70
In [600]:
#Exemple p2_2 
A=np.array([[1,-1,1],[1,-1,1],[1,2,4]])
B=np.array([[-1],[4],[3]])
affchresolsystem(A,B)
1 x - 1 y + 1 z = -1
1 x - 1 y + 1 z = 4
1 x + 2 y + 4 z = 3
Résolution du système
Matrice A
[[ 1 -1  1]
 [ 1 -1  1]
 [ 1  2  4]]
Vecteur B
[[-1]
 [ 4]
 [ 3]]
Le déterminant de la matrice A est :  0.0
Le système n'a pas de solution ou une infinité de solutions
In [601]:
#Exemple p2_3 
A=np.array([[3,-1,1,2],[1,1,1,1],[1,2,4,5],[1,2,0,5]])
B=np.array([[-1],[4],[3],[0]])
affchresolsystem(A,B)
3 x - 1 y + 1 z + 2 t= -1
1 x + 1 y + 1 z + 1 t= 4
1 x + 2 y + 4 z + 5 t= 3
1 x + 2 y + 0 z + 5 t= 0
Résolution du système
Matrice A
[[ 3 -1  1  2]
 [ 1  1  1  1]
 [ 1  2  4  5]
 [ 1  2  0  5]]
Vecteur B
[[-1]
 [ 4]
 [ 3]
 [ 0]]
Le déterminant de la matrice A est :  60.0
le système a une solution unique 
la solution est: x= 1.60 	 y= 3.28 	 z= 0.75
In [602]:
#Exemple p2_4 
A=np.array([[0,-1,1,2,1],[1,1,1,1,1],[1,2,4,5,1],[1,2,0,5,1],[1,2,1,5,2]])
B=np.array([[-1],[4],[3],[0],[0]])
affchresolsystem(A,B)
0 x - 1 y + 1 z + 2 z + 1 u= -1
1 x + 1 y + 1 z + 1 z + 1 u= 4
1 x + 2 y + 4 z + 5 z + 1 u= 3
1 x + 2 y + 0 z + 5 z + 1 u= 0
1 x + 2 y + 1 z + 5 z + 2 u= 0
Résolution du système
Matrice A
[[ 0 -1  1  2  1]
 [ 1  1  1  1  1]
 [ 1  2  4  5  1]
 [ 1  2  0  5  1]
 [ 1  2  1  5  2]]
Vecteur B
[[-1]
 [ 4]
 [ 3]
 [ 0]
 [ 0]]
Le déterminant de la matrice A est :  24.0
le système a une solution unique 
la solution est: x= 5.12 	 y= -0.42 	 z= 0.75
In [603]:
#Exemple p2_5
A=np.array([[3,-1,1,2],[1,1,1,1],[1,2,4,5],[1,2,0,5],[1,2,1,5]])
B=np.array([[-1],[4],[3],[0],[0]])
affchresolsystem(A,B)
le système n'est pas un système de n équations à n inconnues
In [604]:
#Exemple p2_6 
A=np.array([[3,-1,1,2,1],[1,1,1,1,1],[1,2,4,5,1],[1,2,0,5,1],[1,2,1,5,2]])
B=np.array([[-1],[4],[3],[0]])
affchresolsystem(A,B)
le système n'est pas un système de n équations à n inconnues
Pour toute question envoyer un mail à Martine Arrou-Vignod
FORMAV Votre partenaire formation