• Aucun résultat trouvé

Décomposition LU

N/A
N/A
Protected

Academic year: 2022

Partager "Décomposition LU"

Copied!
2
0
0

Texte intégral

(1)

# ================ #

# ================ #

# ALGEBRE LINEAIRE #

# Décomposition LU #

# JANVIER 2016 #

# ================ #

# ================ #

from numpy import array, identity, zeros, dot from numpy.linalg import det

def ValidLU(M):

"""

Fonction renvoyant un booléen True/False selon que la matrice M (supposée inversible) admet ou non une décomposition LU.

"""

(n,p) = M.shape

for i in range(1,n-1):

# L'un des déterminants principaux (hormis le déterminant de la # matrice) est nul.

if det(M[:i,:i]) == 0:

return(False) return(True)

def DecompoLU_Ident(M):

"""

Fonction effectuant la décomposition LU d'une matrice M supposée inversible par identification.

"""

(n,p) = M.shape

# La matrice n'est pas carrée.

if n != p:

return("La matrice n'est pas carrée !") # La matrice est carrée.

elif det(M) == 0:

# La matrice M n'est pas inversible.

return("La matrice n'est pas inversible !") # La matrice est inversible.

elif ValidLU(M):

# La matrice admet une décomposition LU (unique !).

# Initialisation de L et U L = identity(n)

U = zeros((n,n))

# Coeur de l'algorithme for i in range(n):

# Détermination de la i-ème ligne de U for j in range(i,n):

# On peut calculer la somme via un produit matriciel...

S = dot(L[i,:i],U[:i,j]) # OU de façon plus classique ! """

S = 0

for k in range(i):

S += L[i,k]*U[k,j]

"""

U[i,j] = M[i,j] - S

# Détermination de la i-ème colonne de L

# Remarque : quand i prend la valeur n-1, le for ci-dessous ne fait # ... rien !

for j in range(i+1,n):

# On peut calculer la somme via un produit matriciel...

S= dot(L[j,:i],U[:i,i])

# OU de façon plus classique ! """

S = 0

for k in range(i):

S += L[j,k]*U[k,i]

1

(2)

"""

L[j,i] = (M[j,i] - S)/U[i,i]

return(L,U) else:

return("La matrice n'admet pas de décomposition LU !")

# Matrices inversibles admettant une décomposition LU A1 = array([[1,2],[0,3]],dtype=float)

A2 = array([[3,1,1],[0,1,2],[1,1,1]],dtype=float)

A3 = array([[2,1,-1,1],[0,-1,2,2],[4,3,-3,-3],[2,3,-6,3]],dtype=float) A4 = array([[5,-1,2],[4,3,-3],[0,2,4]],dtype=float)

# Matrices inversibles n'admettant pas de décomposition LU B1 = array([[0,3],[1,2]]) # Le coefficient B1(1,1) est nul...

B2 = array([[0,0,1],[0,1,0],[0,0,1]]) # idem...

B3 = array([[1,-3,11],[2,-1,7],[-4,-3,1]]) # B3 n'est pas inversible

(L,U)=DecompoLU_Ident(A3) print("La matrice initiale") print(A3)

print("La matrice L") print(L)

print("La matrice U") print(U)

print("Check") print(dot(L,U))

2

Références

Documents relatifs

C’est pourquoi, comme cela est présenté en détail dans l’article en référence [1], même si parfois dans la littérature on trouve de nouvelles études qui pro- posent un

Afin d’explorer si les potentiels évoqués vestibulaires myogéniques oculaires (oVEMP pour ocular vesti- bular evoked myogenic potentials) peuvent être uti- lisés pour détecter

The great variety of different possible uniqueness theorems has not been exhausted and the section presents rather a few examples for constructing such theorems

Dans cette partie, on suppose que A admet une décomposition LU et on voit comment mettre en œuvre une méthode pratique de calcul des matrices L

Sous un volume réduit, l’ouvrage aborde de façon claire et complète l’apport que l’on peut attendre du scanner spiralé, de l’approche endoscopique, de la place de la

– je voudrais tout d’abord souligner l’intérêt que j’ai pris aux efforts d’Antoine Spire et de Nicolas Martin pour réaffirmer la nécessité d’une réflexion laïque

Les parents peuvent en connaissance des alternatives thérapeutiques, accepter ou refuser que leur enfant participe à une recherche biomédicale ; leur refus ne changera rien

Il permet de penser la maladie au-delà du seul patient et il ne fait pas de doute que dans les années à venir cette dimension de la prise en charge connaîtra un fort développement