Matrixfrei ArnoldPython

Python-Programme
Anonymous
 Matrixfrei Arnold

Post by Anonymous »

Ich möchte mit einem Arpack-Paket eine "matrixfreie Eigenwert-Bewertung" einer einheitlichen Matrix durchführen. Die einheitliche Matrix stammt aus einer spärlichen Hermitian-Matrix, die im Problem mit vielen Körperschaften passiert.import time
import numpy as np
import scipy as sp
from scipy.sparse.linalg import LinearOperator
from scipy.sparse.linalg import expm, expm_multiply # For matrix exponentials
from scipy.sparse.linalg import eigs, eigsh
from scipy.stats import unitary_group
# Generate a random unitary matrix
N = 20 # Size of the matrix
den = 0.01

# Define Hermitian matrices H1 and H2 (only stored implicitly)
H1 = sp.sparse.random_array((N,N), density=den)
H1 = (H1 + H1.conj().T) / 2
H2 = sp.sparse.random_array((N,N), density=den)
H2 =(H2 + H2.conj().T) / 2

U= expm(-1j * H2) @ expm(-1j * H1)

start = time.time()
# Compute eigenvalues using scipy
eigenvalues,_= eigs(U,5,sigma= np.exp(1j * np.pi / 4), which = 'SR')
end = time.time()
print("The time of execution of dense matrix program is :",(end-start) * 10**3, "ms")
# Print the results
print("Eigenvalues of the unitary matrx:")
print(eigenvalues)
< /code>
Jetzt habe ich die einheitliche Matrix als $ u = e^{-i h_ {2}} e^{-i h_ {1}} $. Um es in einer matrixfreien Form zu haben, habe ich den folgenden Code geschrieben und Arpack verwendet, um die Eigenwerte zu finden. < /P>
def apply_U(v):
v= expm_multiply(-1j * H2, expm_multiply(-1j* H1,v))
return v
A = LinearOperator((N, N), matvec=apply_U)

start = time.time()
# Compute eigenvalues using scipy
eigenvalues,_= eigs(A,5,sigma= np.exp(1j * np.pi / 4), which = 'SR')
end = time.time()
print("The time of execution of matrix-free is :",(end-start) * 10**3, "ms")
# Print the results
print("Eigenvalues of the unitary matrx:")
print(eigenvalues)
< /code>
Ich habe überprüft, ob beide das gleiche Ergebnis liefern, außer dass die matrixfreie Version sehr langsam ist. Meine Erwartungen waren, dass es schneller sein würde. Bitte helfen Sie mir, den Code zu optimieren, da ich neu in Python bin (ich habe dies alles mit meiner Intuition von Mathematica, in der ich fließend bin, codiert). Ich würde gerne wissen, ob es sich um ein erwartetes Verhalten der matrixfreien Bewertungen handelt, oder es gibt ein Problem mit meinem Code, sodass es langsam ist.

Quick Reply

Change Text Case: