I made the following program:
import numpy as np
def rayleigh_quot(A,X):
D = X.T @ A @ X
Q = norme_euclid(X)**2
return D/Q
def norme_euclid(M):
M = np.array(M)
return np.sqrt(np.max(np.linalg.eig(M@M.T)[0]))
def X_iter(A,X):
D = A @ X
Q = norme_euclid(A @ X)
return (D/Q).reshape(3,1)
def is_invert(M):
print(M)
print(f"\ndeterminant : {np.linalg.det(M)}")
if np.linalg.det(M) == 0:
return False
return True
def rayleigh_iter(A,B):
X = B
n = 0
while(True):
n += 1;
print(n)
v = rayleigh_quot(A,X)[0]
Y = A-v*np.identity(A.shape[0])
if not is_invert(Y):
return v, Y
M = np.linalg.inv(Y)
X = X_iter(M,X)
A = np.array([[1,2,3],[1,2,1],[3,2,1]])
B = np.array([[1],[1],[1]])
v,Y = rayleigh_iter(A,B)
In the exection you get this : (only showing the relvent part)
iter 7
matrix M :
[[-4.23606798 2. 3. ]
[ 1. -3.23606798 1. ]
[ 3. 2. -4.23606798]]
determinant of M : -8.997687189537842e-14
iter 8
matrix M :
[[-4.23606798 2. 3. ]
[ 1. -3.23606798 1. ]
[ 3. 2. -4.23606798]]
determinant of M : 0.0
so as you can see it's returning a different value For appearently the same Matrix, so what's going on, is it not printing all the decimal values ?
source https://stackoverflow.com/questions/74436781/numpy-linalg-det-not-returning-the-same-value-for-the-same-matrix
Comments
Post a Comment