fixing issue: Determinant issue inside of LU_decomp

This commit is contained in:
sonntagsgesicht
2020-06-22 13:21:58 +02:00
parent 556f34b47f
commit 1868261e8b
2 changed files with 15 additions and 3 deletions
+3 -2
View File
@@ -134,6 +134,9 @@ class LinearAlgebraMethods:
if current > biggest: # TODO: what if equal?
biggest = current
p[j] = k
# without pivot LU fails
if p[j] is None:
raise ZeroDivisionError('matrix is numerically singular')
# swap rows according to p
ctx.swap_row(A, j, p[j])
if ctx.absmin(A[j,j]) <= tol:
@@ -539,8 +542,6 @@ class LinearAlgebraMethods:
try:
# do not overwrite A
A = ctx.matrix(A).copy()
if any(all(ctx.almosteq(0, x) for x in A[:, c]) for c in range(A.cols)):
return 0 * A[0, 0]
# use LU factorization to calculate determinant
try:
R, p = ctx.LU_decomp(A)
+12 -1
View File
@@ -69,10 +69,15 @@ A10 = matrix([[1.0 + 1.0j, 2.0, 2.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]])
b10 = [1.0, 1.0 + 1.0j, 1.0]
A11 = matrix([[4, 0, -2],
[2, 0, -4],
[2, 0, 5.5]])
A12 = matrix([[1,0,0],
[0,1,0],
[0,0,1.0j]])
def test_LU_decomp():
A = A3.copy()
@@ -96,6 +101,12 @@ def test_LU_decomp():
LU_decomp(A, overwrite=1)
assert A != bak
try:
LU_decomp(A11)
assert False
except ZeroDivisionError:
assert True
def test_inverse():
for A in [A1, A2, A5]:
inv = inverse(A)
@@ -197,7 +208,7 @@ def test_det():
assert round(det(A6)) == 78356463
assert det(zeros(3)) == 0
assert det(A11) == 0
assert absmin(det(A12*1e-30) - 1e-30) < eps
def test_cond():
A = matrix([[1.2969, 0.8648], [0.2161, 0.1441]])