55 lines
1.0 KiB
Python
55 lines
1.0 KiB
Python
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))
|