몇 가지 양자 역학 시뮬레이션을 위해 포트란 95에 집중하고 있습니다. 솔직히 옥타브에 의해 망쳐 졌으므로 당연히 행렬 지수를 취했습니다. 크기가 인 (작고 ) skew- Hermitian 행렬이 주어지면 LAPACK을 사용하여이 문제를 해결하는 가장 효율적인 방법은 무엇입니까? LAPACK95 래퍼를 사용하지 않고 LAPACK을 직접 호출합니다.
몇 가지 양자 역학 시뮬레이션을 위해 포트란 95에 집중하고 있습니다. 솔직히 옥타브에 의해 망쳐 졌으므로 당연히 행렬 지수를 취했습니다. 크기가 인 (작고 ) skew- Hermitian 행렬이 주어지면 LAPACK을 사용하여이 문제를 해결하는 가장 효율적인 방법은 무엇입니까? LAPACK95 래퍼를 사용하지 않고 LAPACK을 직접 호출합니다.
답변:
스큐-헤르 미트 (Skeh-Hermitian) 행렬의 행렬 지수는 계산하기가 저렴합니다.
가정 당신의 스큐 - 에르 미트 행렬, 다음입니다 난 A는 에르 미트, 그리고를 통해 zheevd 과 친구 당신은 분해를 얻을 수 있습니다
여기서 는 단일 고유 벡터 행렬이고 Λ 는 실수와 대각선입니다. 그리고 사소하게
당신은 일단 와 Λ를 , 그것은 계산에 용이
먼저 고유 값을 지수화하고 zcopy 를 통해 를 설정 하고 지수 고유 값으로 각 열에 대해 zscal 을 실행 하여 B : = B exp ( − i Λ ) 를 수행 하고 결과를
zgemm을 통해 .
전화를 사용 중이므로 쉽게 연결할 수 없으며 나중에 링크를 추가합니다. 아마도 "19 매트릭스 지수를 계산하는 모호한 방법 19", Fortran 라이브러리 EXPOKIT, 매트릭스 지수를 계산하기위한 Krylov 방법에 대한 Jitse Niesen의 논문, 그리고 매트릭스 지수에 대한 Nick Higham의 최근 논문 중 일부를보고 싶을 것입니다. 행렬 지수보다 행렬 지수와 벡터의 곱이 필요한 것이 더 일반적이며, Krylov 방법이 도움이 될 수 있습니다. 설명 한 것과 같은 작고 밀도가 높은 행렬의 경우 Padé 방법이 더 좋을 수 있지만 ODE의 수치 적분을 위해 지수 방법 내에서 Krylov 방법을 사용하면 많은 성공을 거두었습니다.
복잡한 고유 해법은 수학적으로 정확하지만 필요한 것보다 많은 작업을 수행합니다. 불행히도, 내가 설명하려는 개선 된 접근법은 LAPACK 호출로 구현할 수 없습니다.
RC Ward와 LJ Grey, ACM Trans를보십시오. 수학. 부드러운. 4, 278, (1978). TOMS 알고리즘 530에서 사용할 수 있고 netlib에서 다운로드 할 수있는 소프트웨어에 대해 설명합니다. 스큐 대칭 행렬 과 같이 인수 분해하는 방법을 설명합니다.
여기서 는 실제 직교하고 D 는 실제 비대칭이며 블록 대각선입니다. 대각선 서브 블록은 2 × 2 또는 1 × 1 입니다. 블록 대각선이므로 각 서브 블록을 개별적으로 지수화 할 수 있습니다. 1 × 1 블록 제로되어 EXP ( 0 ) = 1, 그 사소한 그래서. 2 × 2 서브 블록으로 완료
원하는 지수 행렬은 다음과 같습니다.
나는이 방법을 양자 화학 코드에서 수십 년 동안 사용해 왔으며 관련된 소프트웨어에 전혀 문제가 없었습니다.
행렬 지수에 벡터를 곱한 값만 있으면이 포트란 서브 루틴을 사용할 수 있습니다. 다음을 계산합니다.
여기서 v는 벡터이고 A는 규칙적인 은자 행렬입니다. EXPOKIT 라이브러리 의 서브 루틴입니다.
그렇지 않으면 이 서브 루틴 을 고려할 수 있습니다. 이 서브 루틴은 일반적인 복잡한 행렬 A에서 작동합니다.