def gaussian_elimination(coefficient_matrix, result_matrix): augmented_matrix = coefficient_matrix.copy() augmented_matrix.append_column(result_matrix.copy()) augmented_matrix = lu_decomposition(augmented_matrix).U result_column_index = augmented_matrix.size.width; solution_matrix = create_matrix(coefficient_matrix.size.height, 1) # Backward substitution for i in range(0, coefficient_matrix.size.height): solution_index = augmented_matrix.size.height - i right_side = augmented_matrix.get(solution_index, result_column_index) left_side_coefficient = augmented_matrix.get(solution_index, solution_index) subtraction = 0 for n in range(solution_index, coefficient_matrix.size.width): subtraction += augmented_matrix.get(solution_index, n + 1) * solution_matrix.get(n + 1, 1) solution = (right_side - subtraction) / left_side_coefficient solution_matrix.set(solution_index, 1, solution) return solution_matrix
def test_multiply_decomposed_values(self): a = parse_matrix("2 12;1 4") lu = lu_decomposition(a) self.assertEqual(a, lu.L * lu.U)
def test_lower_triangular_matrix(self): a = parse_matrix("1 4;2 12") lu = lu_decomposition(a) self.assertEqual(parse_matrix("1 0;0.5 1"), lu.L)
def test_upper_triangular_matrix(self): a = parse_matrix("1 4;2 12") lu = lu_decomposition(a) self.assertEqual(parse_matrix("2 12;0 -2"), lu.U)