Livre_silo 30 août 2013 16:32 Page 185
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
185
7 – Pivot de Gauss et résolution de systèmes
PROGRAMME 4 Pivot de Gauss
def chercher_pivot(A, i):
n = len(A) # le nombre de lignes
j = i # la ligne du maximum provisoire
for k in range(i+1, n):
if abs(A[k][i]) > abs(A[j][i]):
j = k # un nouveau maximum provisoire
return j
def transvection_ligne(A, i, j, mu):
""" L_i <- L_i + mu.L_j """
nc = len(A[0]) # le nombre de colonnes
for k in range(nc):
A[i][k] += mu * A[j][k]
def echange_lignes(A, i, j):
nc = len(A[0])
for k in range(nc):
A[i][k], A[j][k] = A[j][k], A[i][k]
def resolution(A0, Y0):
"""Résolution de A0.X=Y0; A0 doit etre inversible"""
A, Y = copie_matrice(A0), copie_matrice(Y0)
n = len(A)
assert len(A[0]) == n
# Mise sous forme triangulaire
for i in range(n):
j = chercher_pivot(A, i)
if j > i:
echange_lignes(A, i, j)
echange_lignes(Y, i, j)
for k in range(i+1, n):
x = A[k][i] / float(A[i][i])
transvection_ligne(A, k, i, -x)
transvection_ligne(Y, k, i, -x)
# Phase de remontée
X = [0.] * n
for i in range(n-1, -1, -1):
X[i] = (Y[i][0]-sum(A[i][j]*X[j] for j in range(i+1,n))) / A[i][i]
return X
7.2.3 Comparaison avec numpy
La bibliothèque numpy est très performante pour le calcul scientifique. Elle réalise des calculs
optimisés sur des tableaux (array).
Précédent

- 198/402

Suivant