Skip to main content
IBM Quantum Platform

givens_decomposition_slater

givens_decomposition_slater(orbital_coeffs)

슬레이터 행렬식의 점유된 궤도를 기븐스 회전으로 분해합니다.

이는 의 직사각형 형태에 해당하며 givens_decomposition(), 슬레이터 결정자 상태 준비에 특화되어 있습니다. 슬레이터 행렬식의 점유 궤도 계수 행렬이 주어지면, 이 함수는 기준 구성 1100\lvert 1 \cdots 1 0 \cdots 0 \rangle (첫 번째 mm 궤도가 점유된 상태)에 적용하여 슬레이터 행렬식을 생성하는 일련의 기븐스 회전 연산들을 반환합니다. 다음은 행이 nn 공간 궤도( mnm \le n ) 기저로 표현된 mm 점유 궤도인 m×nm \times n 행렬입니다 orbital_coeffs . 이 행렬의 행들은 직교 정규화되어 있다고 가정합니다.

와 달리 givens_decomposition(), 이 분해는 n×nn \times n 의 완전한 궤도 회전 대신 mm 의 점유 궤로만 구현하면 되므로, 다이아몬드 모양으로 배열된 최대 m(nm)m (n - m) 기븐스 회전을 사용합니다(반면 정사각형 분해의 경우 n(n1)/2n (n - 1) / 2 와 같이 벽돌담처럼 나란히 배열된 형태입니다). 이 분해에는 대각 위상이 포함되어 있지 않은데, 이는 전체 위상과 점유 공간 내의 어떤 회전도 준비된 슬레이터 행렬식을 변하지 않게 하기 때문이다.

각 기븐스 회전(Givens rotation)은 4-튜플, 로 정의되며 (c, s, i, j), 그 내용은 다음과 같습니다:

  • c: 실수 값을 갖는 코사인
  • s: 복소수 값을 갖는 사인 함수
  • i: 첫 번째 지수
  • j: 두 번째 (인접한) 인덱스

그 결과 다음과 같은 형태의 행렬이 얻어집니다:

(cssc)\begin{pmatrix} c & s \\ -s^\dagger & c \end{pmatrix}

매개변수

orbital_coeffs – 점유 궤도 계수의 ‘ m×nm \times n ’ 행렬.

리턴

앞서 설명한 바와 같이, 4-튜플로 표현된 기븐스 회전 순서.

점유된 궤도는 m×nm \times n 참조 자료( (Im0)\begin{pmatrix} I_m & 0 \end{pmatrix} )의 각 열에 반환된 회전 연산을 순서대로 적용하여 복원되며, 이때 인덱스 iijj 에 작용하는 각 회전 연산은

vicvi+svj,vjcvjsvi.v_i \mapsto c \, v_i + s^\dagger v_j, \qquad v_j \mapsto c \, v_j - s \, v_i.

이 결과는 ( orbital_coeffs 동일한 슬레이터 결정자를 정의하므로) 동일한 점유 공간을 포괄하므로, 재구성된 궤도 AA 와 대상 궤도 BB 간의 중첩 제곱 det(AB)2\lvert \det(A B^\dagger) \rvert^2 은 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() 제곱(전체 궤도 회전) 분해를 위해.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.