Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 929b7dc

Browse files
MaximSmolskiypre-commit-ci[bot]
andauthored
Fix Gaussian elimination pivoting (TheAlgorithms#11393)
* updating DIRECTORY.md * Fix Gaussian elimination pivoting * Fix review issues * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: MaximSmolskiy <MaximSmolskiy@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 1652d05 commit 929b7dc

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

‎linear_algebra/src/gaussian_elimination_pivoting.py‎

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,40 +22,33 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray:
2222
>>> solution = solve_linear_system(np.column_stack((A, B)))
2323
>>> np.allclose(solution, np.array([2., 3., -1.]))
2424
True
25-
>>> solve_linear_system(np.array([[0, 0], [0, 0]], dtype=float))
26-
array([nan, nan])
25+
>>> solve_linear_system(np.array([[0, 0, 0]], dtype=float))
26+
Traceback (most recent call last):
27+
...
28+
ValueError: Matrix is not square
29+
>>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]], dtype=float))
30+
Traceback (most recent call last):
31+
...
32+
ValueError: Matrix is singular
2733
"""
2834
ab = np.copy(matrix)
2935
num_of_rows = ab.shape[0]
3036
num_of_columns = ab.shape[1] - 1
3137
x_lst: list[float] = []
3238

33-
# Lead element search
34-
for column_num in range(num_of_rows):
35-
for i in range(column_num, num_of_columns):
36-
if abs(ab[i][column_num]) > abs(ab[column_num][column_num]):
37-
ab[[column_num, i]] = ab[[i, column_num]]
38-
if ab[column_num, column_num] == 0.0:
39-
raise ValueError("Matrix is not correct")
40-
else:
41-
pass
42-
if column_num != 0:
43-
for i in range(column_num, num_of_rows):
44-
ab[i, :] -= (
45-
ab[i, column_num - 1]
46-
/ ab[column_num - 1, column_num - 1]
47-
* ab[column_num - 1, :]
48-
)
39+
if num_of_rows != num_of_columns:
40+
raise ValueError("Matrix is not square")
4941

50-
# Upper triangular matrix
5142
for column_num in range(num_of_rows):
43+
# Lead element search
5244
for i in range(column_num, num_of_columns):
5345
if abs(ab[i][column_num]) > abs(ab[column_num][column_num]):
5446
ab[[column_num, i]] = ab[[i, column_num]]
55-
if ab[column_num, column_num] == 0.0:
56-
raise ValueError("Matrix is not correct")
57-
else:
58-
pass
47+
48+
# Upper triangular matrix
49+
if abs(ab[column_num, column_num]) < 1e-8:
50+
raise ValueError("Matrix is singular")
51+
5952
if column_num != 0:
6053
for i in range(column_num, num_of_rows):
6154
ab[i, :] -= (

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /