From c03f16dc4c823f7a18340a45105dd40424cbe1bf Mon Sep 17 00:00:00 2001 From: MaximSmolskiy <MaximSmolskiy@users.noreply.github.com> Date: Wed, 1 May 2024 18:58:38 +0000 Subject: [PATCH 1/4] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index f6d6cb463faa..4a053a3f1b7f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -773,6 +773,7 @@ * [Inverse Of Matrix](matrix/inverse_of_matrix.py) * [Largest Square Area In Matrix](matrix/largest_square_area_in_matrix.py) * [Matrix Class](matrix/matrix_class.py) + * [Matrix Equalization](matrix/matrix_equalization.py) * [Matrix Multiplication Recursion](matrix/matrix_multiplication_recursion.py) * [Matrix Operation](matrix/matrix_operation.py) * [Max Area Of Island](matrix/max_area_of_island.py) From b01a53b65e4d0392537ae8313a90e3661e478a67 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy <mithridatus@mail.ru> Date: Sun, 5 May 2024 01:28:17 +0300 Subject: [PATCH 2/4] Fix Gaussian elimination pivoting --- .../gaussian_elimination_pivoting.py | 34 ++++++------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py index 2a86350e9fc6..298504a33944 100644 --- a/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py +++ b/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py @@ -32,40 +32,28 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray: >>> solution = solve_linear_system(np.column_stack((A, B))) >>> np.allclose(solution, np.array([2., 3., -1.])) True - >>> solve_linear_system(np.array([[0, 0], [0, 0]], dtype=float)) - array([nan, nan]) + >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]], dtype=float)) + Traceback (most recent call last): + ... + ValueError: Matrix is not correct """ ab = np.copy(matrix) num_of_rows = ab.shape[0] num_of_columns = ab.shape[1] - 1 x_lst: list[float] = [] - # Lead element search - for column_num in range(num_of_rows): - for i in range(column_num, num_of_columns): - if abs(ab[i][column_num]) > abs(ab[column_num][column_num]): - ab[[column_num, i]] = ab[[i, column_num]] - if ab[column_num, column_num] == 0.0: - raise ValueError("Matrix is not correct") - else: - pass - if column_num != 0: - for i in range(column_num, num_of_rows): - ab[i, :] -= ( - ab[i, column_num - 1] - / ab[column_num - 1, column_num - 1] - * ab[column_num - 1, :] - ) + assert num_of_rows == num_of_columns - # Upper triangular matrix for column_num in range(num_of_rows): + # Lead element search for i in range(column_num, num_of_columns): if abs(ab[i][column_num]) > abs(ab[column_num][column_num]): ab[[column_num, i]] = ab[[i, column_num]] - if ab[column_num, column_num] == 0.0: - raise ValueError("Matrix is not correct") - else: - pass + + # Upper triangular matrix + if ab[column_num, column_num] == 0.0: + raise ValueError("Matrix is not correct") + if column_num != 0: for i in range(column_num, num_of_rows): ab[i, :] -= ( From 58d36d06a480081b80c8da1ad40ce866512b1b59 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy <mithridatus@mail.ru> Date: Sun, 22 Dec 2024 14:27:34 +0300 Subject: [PATCH 3/4] Fix review issues --- .../src/gaussian_elimination_pivoting.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/linear_algebra/src/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting.py index 027b1c6e098c..a2962c3fdbf4 100644 --- a/linear_algebra/src/gaussian_elimination_pivoting.py +++ b/linear_algebra/src/gaussian_elimination_pivoting.py @@ -22,17 +22,22 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray: >>> solution = solve_linear_system(np.column_stack((A, B))) >>> np.allclose(solution, np.array([2., 3., -1.])) True - >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]], dtype=float)) + >>> solve_linear_system(np.array([[0, 0, 0]], dtype=float)) Traceback (most recent call last): ... - ValueError: Matrix is not correct + ValueError: Matrix is not square + >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]], dtype=float)) + Traceback (most recent call last): + ... + ValueError: Matrix is singular """ ab = np.copy(matrix) num_of_rows = ab.shape[0] num_of_columns = ab.shape[1] - 1 x_lst: list[float] = [] - assert num_of_rows == num_of_columns + if num_of_rows != num_of_columns: + raise ValueError("Matrix is not square") for column_num in range(num_of_rows): # Lead element search @@ -41,8 +46,8 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray: ab[[column_num, i]] = ab[[i, column_num]] # Upper triangular matrix - if ab[column_num, column_num] == 0.0: - raise ValueError("Matrix is not correct") + if abs(ab[column_num, column_num]) < 1e-8: + raise ValueError("Matrix is singular") if column_num != 0: for i in range(column_num, num_of_rows): From f1d2a8cec9657a5f583eed4efc4daf91de135344 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 11:28:06 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- linear_algebra/src/gaussian_elimination_pivoting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linear_algebra/src/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting.py index a2962c3fdbf4..efc1ddd64a2e 100644 --- a/linear_algebra/src/gaussian_elimination_pivoting.py +++ b/linear_algebra/src/gaussian_elimination_pivoting.py @@ -37,7 +37,7 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray: x_lst: list[float] = [] if num_of_rows != num_of_columns: - raise ValueError("Matrix is not square") + raise ValueError("Matrix is not square") for column_num in range(num_of_rows): # Lead element search