コード例 #1
0
ファイル: solvers.py プロジェクト: vl0w/MathTools
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
コード例 #2
0
ファイル: test_matrix_tools.py プロジェクト: vl0w/MathTools
 def test_multiply_decomposed_values(self):
     a = parse_matrix("2 12;1 4")
     lu = lu_decomposition(a)
     self.assertEqual(a, lu.L * lu.U)
コード例 #3
0
ファイル: test_matrix_tools.py プロジェクト: vl0w/MathTools
 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)
コード例 #4
0
ファイル: test_matrix_tools.py プロジェクト: vl0w/MathTools
 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)