+ 2
Numpy zero determinant precision
When computing determinant using numpy.linalg.det() and expecting zero result, result is different. >> import numpy as np >> sigma = np.matrix('1 2 3; 4 5 6; 7 8 9', dtype=np.float64) >> print(np.linalg.det(sigma)) -9.51619735393e-16 Is there some way to change algorithm for small matrices, which is more precise ? Or how can it be solved in more precise way ?
1 Resposta
0
the result of np. linalg.det(sigma) is a 'numerical zero', due to the np.float number format. Even if you change dtype to np.int16, the result will be a floating number.
If you want to work only with integers, you can rewrite a det function.
Here is a recursive one for very small matrixes :
import numpy as np
def det(A) :
n, p=np.shape(A)
if n== 1:
return A[0,0]
else:
S=0
for i in range(n):
L = [x for x in range(n) if x ! = i]
S += (-1)**i *A[0,i]*det(A[1:,L])
return S
A=np.matrix(' .... ', dtype=np.int16)
print(det(A),np.linalg.det(A)) #to compare results