print("\nMatrice U :")
print(U)
print("\nVérification L * U :")
print(np.dot(L, U))
# Résolution
y = descente(L, b)
print("\nY=",y)
x = remontee(U, y)
from fractions import Fraction
print("\nSolution : X=",x)
# Affichage en fractions
print("\nSolution : X =", [Fraction(val).limit_denominator() for val in x])
import numpy as np
def lu_pivot(A):
"""
Factorisation LU avec pivotage partiel.
Paramètres:
A : np.ndarray (n x n) - matrice régulière
Retourne:
L : np.ndarray (n x n) - triangulaire inférieure avec des 1 sur la diagonale
U : np.ndarray (n x n) - triangulaire supérieure
P : np.ndarray (n x n) - matrice de permutation telle que PA = LU
"""
n = len(A)
U = A.astype(float).copy()
L = np.eye(n, dtype=float)
P = np.eye(n, dtype=float)
for k in range(n-1):
# Recherche du pivot
p = k
for i in range(k+1, n):
if abs(U[i, k]) > abs(U[p, k]):
p = i
# Permutation si nécessaire
if p != k:
# Échanger les lignes de U
U[[k, p]] = U[[p, k]]
# Échanger les lignes de L (partie déjà calculée)
L[[k, p], :k] = L[[p, k], :k]
# Échanger les lignes de P
P[[k, p]] = P[[p, k]]
# Élimination
for i in range(k+1, n):
L[i, k] = U[i, k] / U[k, k]
for j in range(k, n):
U[i, j] -= L[i, k] * U[k, j]
return L, U, P