Bonsoir,
Je ne comprends pas bien la méthode derrière ce pivot de Gauss.
Je comprends mathématiquement cette méthode, mais pas numériquement.Code:import numpy as np def lu_decomposition_pivot(A): n = A.shape[0] L = np.zeros((n, n)) U = np.zeros((n, n)) P = np.identity(n) for i in range(n): # Pivotage partiel max_index = np.argmax(np.abs(A[i:, i])) + i if A[max_index, i] == 0: raise ValueError("La matrice est singulière") # Échange des lignes A[[i, max_index]] = A[[max_index, i]] P[[i, max_index]] = P[[max_index, i]] if i > 0: L[[i, max_index], :i] = L[[max_index, i], :i] L[i, i] = 1 for j in range(i, n): U[i, j] = A[i, j] - np.sum(L[i, :i] * U[:i, j]) if i != j: L[j, i] = (A[j, i] - np.sum(L[j, :i] * U[:i, i])) / U[i, i] return P, L, U # Exemple d'utilisation A = np.array([[2, 0, 2, 0.6], [3, 3, 4, -0.1], [1, 1, 1, 2], [1, 3, 3, 1]]) P, L, U = lu_decomposition_pivot(A) print("Matrice P :") print(P) print("Matrice L :") print(L) print("Matrice U :") print(U) print("Vérification PA = LU :") print(np.dot(P, A) - np.dot(L, U))
Dans l'attente de vous lire
-----