""" Ici, on implémente gauss """ import numpy as np from ex1 import resolve_up def gauss(A: np.array, b: np.array) -> (np.array, np.array): n = len(A) for k in range(n): # k = pivot for i in range(k+1, n): # i = ligne en dessous du pivot g = A[i, k] / A[k, k] # multiplication pour éliminer A[i, k] A[i, k:] -= g * A[k, k:] # row operation on A b[i] -= g * b[k] # same row operation on b return A, b # matrice triangularisé et le b modifié def cholesky(A: np.array) -> np.array: L = np.zeros(A) L = np.sqrt(A[0, 0]) m = len(A) # first column for i in range(1, m): L[i, 0] = A[i, 0] / L[0, 0] # généralisation k = 2, ..., m for k in range(1, m): # diagonale L[k, k] = np.sqrt(A[k, k] - np.sum(L[k, :k]**2)) for i in range(k+1, m): for j in range(k-1): L[i,k] = (A[i,k] - np.sum(L[i, j] * L[k, j])) / L[k, k] return L if __name__ == '__main__': A = np.array([ [1, 1, 1, 1], [1, 5, 5, 5], [1, 5, 14, 14], [1, 5, 14, 15] ], dtype=np.float64) b = np.array([1, 0, 0, 0], dtype=np.float64) A_triangle, b_gauss = gauss(A, b) print(f"A triangulsarisée:\n {A_triangle}") x = resolve_up(A, b_gauss) print(f"x={x}") L = cholesky(A) print(f"L\n {L}")