0

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 relevent 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 ?

Rafik Bouloudene
  • 565
  • 3
  • 13
  • 1
    The printout of the matrix is not telling the full story. The matrix printed is a viewer friendly version because the actual numbers have very long decimal places and are not so easy to visually look at. If you were to print more decimal places than just 8 after the decimal, you would see they are not the same. – greenerpastures Nov 14 '22 at 21:27
  • 1
    It's also not a good idea to meaningfully compare very small numbers (i.e. in the e-14 range with 0) unless you have a specific python package designed for that kind of precision. Check this out: https://stackoverflow.com/questions/29488213/handling-very-small-numbers-in-python – greenerpastures Nov 14 '22 at 21:35

0 Answers0