Feat: Add tp5
This commit is contained in:
54
ex2.py
Normal file
54
ex2.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
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}")
|
||||
Reference in New Issue
Block a user