import numpy as np def resolve_up(A, b) -> list[float]: """ :param A: Une matrice :param b: Un vecteur :return: """ x = np.zeros(len(b)) for i in range(len(A) - 1, -1, -1): right_of_diagonal = 0.0 for k in range(i + 1, len(A)): right_of_diagonal += A[i, k] * x[k] x[i] = (b[i] - right_of_diagonal) / A[i, i] return x def resolve_down(A, b) -> list[float]: """ :param A: Une matrice :param b: Un vecteur :return: """ x = np.zeros(len(b)) for i in range(len(A)): sum = 0.0 for k in range(i): sum += A[i, k] * x[k] x[i] = (b[i] - sum) / A[i, i] return x if __name__ == '__main__': A = np.array([ [2, 4, -6], [0, -1, 1], [0, 0, -2], ], dtype=float) b = np.array([2, 3, -7], dtype=float) A_down = np.array([ [2, 0, 0], [4, -1, 0], [-6, 1, -2], ]) b_down = np.array([2, 3, -7]) print(resolve_up(A, b)) print(resolve_down(A_down, b_down))