givens_decomposition_slater
givens_decomposition_slater(orbital_coeffs)
슬레이터 행렬식의 점유된 궤도를 기븐스 회전으로 분해합니다.
이는 의 직사각형 형태에 해당하며 givens_decomposition(), 슬레이터 결정자 상태 준비에 특화되어 있습니다. 슬레이터 행렬식의 점유 궤도 계수 행렬이 주어지면, 이 함수는 기준 구성 (첫 번째 궤도가 점유된 상태)에 적용하여 슬레이터 행렬식을 생성하는 일련의 기븐스 회전 연산들을 반환합니다. 다음은 행이 공간 궤도( ) 기저로 표현된 점유 궤도인 행렬입니다 orbital_coeffs . 이 행렬의 행들은 직교 정규화되어 있다고 가정합니다.
와 달리 givens_decomposition(), 이 분해는 의 완전한 궤도 회전 대신 의 점유 궤로만 구현하면 되므로, 다이아몬드 모양으로 배열된 최대 기븐스 회전을 사용합니다(반면 정사각형 분해의 경우 와 같이 벽돌담처럼 나란히 배열된 형태입니다). 이 분해에는 대각 위상이 포함되어 있지 않은데, 이는 전체 위상과 점유 공간 내의 어떤 회전도 준비된 슬레이터 행렬식을 변하지 않게 하기 때문이다.
각 기븐스 회전(Givens rotation)은 4-튜플, 로 정의되며 (c, s, i, j), 그 내용은 다음과 같습니다:
c: 실수 값을 갖는 코사인s: 복소수 값을 갖는 사인 함수i: 첫 번째 지수j: 두 번째 (인접한) 인덱스
그 결과 다음과 같은 형태의 행렬이 얻어집니다:
매개변수
orbital_coeffs – 점유 궤도 계수의 ‘ ’ 행렬.
리턴
앞서 설명한 바와 같이, 4-튜플로 표현된 기븐스 회전 순서.
점유된 궤도는 참조 자료( )의 각 열에 반환된 회전 연산을 순서대로 적용하여 복원되며, 이때 인덱스 및 에 작용하는 각 회전 연산은
이 결과는 ( orbital_coeffs 동일한 슬레이터 결정자를 정의하므로) 동일한 점유 공간을 포괄하므로, 재구성된 궤도 와 대상 궤도 간의 중첩 제곱 은 1이다.
>>> import numpy as np
>>> from qiskit_fermions.linalg import givens_decomposition_slater
>>> # two occupied orbitals in a basis of three, with orthonormal rows
>>> base = np.array([[0.8, 0.6, 0.0], [-0.48, 0.64, 0.6]])
>>> orbital_coeffs = (base * np.array([[1.0], [1j]])).astype(complex)
>>> rotations = givens_decomposition_slater(orbital_coeffs)
>>> m, n = orbital_coeffs.shape
>>> reconstructed = np.eye(m, n, dtype=complex)
>>> for c, s, i, j in rotations:
... col_i, col_j = reconstructed[:, i].copy(), reconstructed[:, j].copy()
... reconstructed[:, i] = c * col_i + s.conjugate() * col_j
... reconstructed[:, j] = c * col_j - s * col_i
>>> overlap = abs(np.linalg.det(reconstructed @ orbital_coeffs.conj().T)) ** 2
>>> bool(np.isclose(overlap, 1.0))
True
givens_decomposition() 제곱(전체 궤도 회전) 분해를 위해.