def back_substitution(R): "R là ma trận bậc thang của ma trận bổ sung của hệ phương trình Ax = b" m, n = len(R), len(R[0]) sol = [None for _ in range(n - 1)] row = m - 1 while row >= 0 and all(is_zero(R[row][j]) for j in range(n)): row -= 1 if row >= 0 and [not is_zero(R[row][j]) for j in range(n)].index(True) == n - 1: return None last = n - 1 while row >= 0: col = [not is_zero(R[row][j]) for j in range(n)].index(True) for i in range(col, last): sol[i] = sympy.symbols(f"x{i + 1}") sol[col] = (R[row][n - 1] - sum(R[row][j]*sol[j] for j in range(col + 1, n - 1)))/R[row][col] last = col row -= 1 for i in range(0, last): sol[i] = sympy.symbols(f"x{i + 1}") return sol