Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import scipy.sparse as sp
- import scipy.sparse.linalg as spl
- denseM = [[ 0.75, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0.25, 0.5 , 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0.5 , -0.25, 0. , 0.5 , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0.25, 0. , 0.5 , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0.5 , 0. , -0.25, 0. , 0. , 0. , 0.5 ,
- 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0.5 , 0. , -0.75, 0.5 , 0. , 0. ,
- 0.5 , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0.5 , -0.25, 0. , 0. ,
- 0. , 0.5 , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.25, 0. ,
- 0. , 0. , 0.5 , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0.5 , 0. , 0. , 0. , 0.25,
- 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0.5 , 0. , 0. , 0. ,
- -0.25, 0.5 , 0. , 0. , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0.5 , 0. , 0. ,
- 0.5 , -0.75, 0. , 0.5 , 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.5 , 0. ,
- 0. , 0. , -0.25, 0. , 0.5 , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0.5 , 0. , 0.25, 0. , 0. , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0.5 , 0. , -0.25, 0.5 , 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0.5 , 0.25, 0. ],
- [ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. , 0.75]]
- denseM = np.array(denseM)
- dense_vals = np.linalg.eigh(denseM)
- sparseM = sp.csr_matrix(denseM)
- sparse_vals = spl.eigs(sparseM, 1)
- dense_eval, dense_evec = dense_vals[0][0], dense_vals[1][:, 0]
- sparse_eval, sparse_evec = sparse_vals[0][0], sparse_vals[1].ravel()
- # checks
- if not denseM.dtype == sparseM.dtype == np.float64:
- print('wrong dtypes')
- if not np.array_equal(denseM, denseM.T):
- print('not symmetric')
- if np.isclose(*dense_vals[0][:2]):
- print('degenerate ground state')
- if not (denseM == sparseM).all():
- print('dense != sparse')
- if not np.allclose(denseM @ dense_evec - dense_eval * dense_evec, 0):
- print('not a dense eigenvector')
- if not np.allclose(sparseM @ sparse_evec - sparse_eval * sparse_evec, 0):
- print('not a sparse eigenvector')
- if not np.isclose(dense_eval, sparse_eval):
- print('not the same eigenvalues')
- if not np.allclose(sparse_evec, dense_evec):
- print('not the same eigenvectors')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement