43 lines
928 B
Python
43 lines
928 B
Python
import numpy as np
|
|
|
|
|
|
def resolve_up(A: np.array, b: np.array) -> np.array:
|
|
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: np.array, b: np.array) -> np.array:
|
|
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))
|