수치적으로 행렬 해밀토니안 대각화하는 파이썬 코드
수치적으로 행렬 해밀토니안 대각화하는 파이썬 코드
아래는 대표적인 해밀토니안 행렬을 수치적으로 대각화(고유값, 고유벡터 구함)하는 파이썬 코드 예시입니다. numpy의 linalg.eig 함수를 사용하면 복잡한 양자계의 해밀토니안도 간단히 대각화할 수 있습니다.+1
pythonimport numpy as np # 예시: 2x2 해밀토니안 행렬 (예: 양자 2레벨 시스템) H = np.array([[1, 0.5], [0.5, 2]]) # 고유값(에너지 고유준위)과 고유벡터(파동함수)를 계산 eigenvalues, eigenvectors = np.linalg.eig(H) print("고유값(에너지 준위):", eigenvalues) print("고유벡터(파동함수):\n", eigenvectors) # 실제로 대각행렬로 변환하는 과정 (PDP^{-1}) P = eigenvectors # D는 대각행렬로 구성 D = np.diag(eigenvalues) # P의 역행렬 P_inv = np.linalg.inv(P) # 원래 행렬 복원 테스트 H_diag = np.matmul(np.matmul(P, D), P_inv) print("복원된 행렬:\n", H_diag)
H는 해밀토니안 행렬, 실제 물리계(양자 시스템, 스핀, 입자 등)에 맞게 자유롭게 바꿀 수 있습니다.
numpy의
eig함수로 고유값(에너지 준위)과 고유벡터(파동함수 형태)를 즉시 얻고, 대각행렬(D), 고유벡터 행렬(P) 조합을 통해 실제 대각화도 가능합니다.코드 실행 결과로 에너지 고유값, 대응하는 상태벡터, 그리고 대각화된 행렬 확인이 가능합니다.+1
복잡한 해밀토니안(예: 100x100 이상의 희소 행렬, 양자 스핀, 입자 수송, 타이트 바인딩 등)은 SciPy의 scipy.linalg.eigh 또는 scipy.sparse.linalg 등의 함수로 확장 가능합니다.
참고: