Skip to main content
IBM Quantum Platform

OrbitalRotation

class OrbitalRotation(rotation_unitary)

베이스: FermionicGate

궤도 회전을 구현합니다.

n×nn \times n 의 유니터리 행렬 UU (rotation_unitary)가 주어졌을 때, 이 게이트는 생성 연산자를 다음과 같이 매핑하는 단일 입자 기저 변환을 구현합니다

aijUjiaj,a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j,

이는 다체 유니터리를 적용하는 것과 동일합니다

exp(ijlog(U)ijaiaj).\exp\left(\sum_{ij} \log(U)_{ij} \, a^\dagger_i a_j\right).

게이트가 작용하는 페르미온 모드의 개수는 의 차원 nn 이다 rotation_unitary.

이 게이트의 인스턴스를 초기화하려면 아래에 나열된 인수를 사용하면 됩니다.

매개변수

rotation_unitary (np.ndarray) – n×nn \times n 의 단위 행렬 UUaijUjiaja^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j 를 통해 궤도 회전을 정의합니다. 이 행렬은 정사각형이고 단위 행렬이어야 합니다. 이는 호출 측의 책임이며, 검증되지 않습니다.


속성

rotation_unitary

궤도 회전 계수를 나타내는 단일 행렬.


메소드

from_t1_amplitudes

classmethod from_t1_amplitudes(t1)

t1t_1 (단일) 진폭을 바탕으로 궤도 회전을 구성합니다.

이 회전은 유니터리 exp(t1t1)\exp(t_1 - t_1^\dagger) 이며, 여기서 nocc×nvirtn_\text{occ} \times n_\text{virt} 의 진폭 행렬 t1t_1 이 모든 n=nocc+nvirtn = n_\text{occ} + n_\text{virt} 궤도에 걸쳐 반헤르미트 생성자에 포함됩니다

G=(0t1t10),G = \begin{pmatrix} 0 & -t_1^* \\ t_1^\top & 0 \end{pmatrix},

점유된 궤도가 가상 궤도보다 먼저 나열되도록 한다. 이는 결합 클러스터 진폭으로부터 초기화될 때 (L)UCJ 가정에 도입되는 단일 여기 궤도 회전입니다. 참조: UCJ.

매개변수

t1 (ndarray) – t1t_1 의 진폭은 다음과 같은 형태를 가지며 (nocc, nvrt), 여기서 nocc 는 점유 궤도의 수이고, 는 nvrt 가상 궤도의 수이다.

리턴

n=nocc+nvirtn = n_\text{occ} + n_\text{virt} 모드에 작용하는 OrbitalRotation 연산자로, 그 값은 exp(t1t1)\exp(t_1 - t_1^\dagger)rotation_unitary 이다.

리턴 유형

OrbitalRotation

프로토콜 방법

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

벡터의 전역 모드에 배치한 후 궤도 회전을 적용합니다.

게이트의 국소 행렬( n×nn \times nrotation_unitary 행렬로, 게이트의 num_modes 모드들에 작용하는)은 먼저 전체 레지스터에 포함됩니다. 즉, 상태 벡터의 모드 수만큼의 단위원을, 가 선택한 행/열에 각각 rotation_unitary 입력한 형태입니다 freg_indices.

스핀풀(spinful)의 경우, 내장 행렬은 알파/베타 분할에 따라 블록 대각 행렬이어야 한다. 알파/베타 값이 0이 아닌 대각선 외 블록을 가진 회전은 스핀 섹터를 혼합시키며, 이는 개별 알파/베타 전자 수를 보존하지 않으므로 고정된 섹터 (n_alpha, n_beta) 밖으로 진폭을 매핑하게 되는데, 이는 고정 섹터 상태 벡터로는 표현할 수 없는 연산이다. 이러한 회전은 로 거부됩니다 ValueError.

그런 다음 내장 행렬은 다음 두 가지 방법 중 하나로 적용됩니다:

  • 빠른 경로 ( 설치된 ffsim 경우에만): 내장된 행렬은 ffsim.apply_orbital_rotation()의 기븐스 회전 커널을 통해 적용됩니다. 스핀풀 블록-스핀 규칙(모드 0..norb 는 알파 궤도, 모드 norb..2*norb 는 베타 궤도)에 따라, 두 대각선 블록은 ffsim에 로 전달되는 스핀별 회전입니다 (mat_a, mat_b).
  • 일반적인 경로 : 그 외의 경우(즉, 를 사용할 ffsim 수 없는 경우) 회전은 생성자 G=ijlog(U)ijaiajG = \sum_{ij} \log(U)_{ij} a^\dagger_i a_j 하에서 진화 연산 exp(G)\exp(G) 로 적용되며, 여기서 UU 는 내장 행렬이다. GG 는 (기본 FCI 행렬-벡터 커널을 기반으로 함) linear_operator() 를 통해 scipy``LinearOperator 로 변환된 후, 를 통해 적용된다 scipy.sparse.linalg.expm_multiply(). 이는 …을 반영합니다 Evolution._apply_unitary_placed_().

매개변수

  • vec (ndarray) – 작용을 가할 상태 벡터.
  • norb (int) – 전역 상태 벡터의 공간 궤도 수.
  • nelec (int |tuple[int, int]) – 스핀이 없는 시스템의 경우 단일 정수이거나, 스핀 알파 및 스핀 베타 페르미온의 개수를 저장하는 정수 쌍입니다. 정수는 스핀이 없는 모드 해석( norb 모드들이 궤도인 경우)을 선택하며, 쌍은 모드의 2 * norb 스핀이 있는 블록-스핀 (orb, spin) 해석을 선택한다.
  • copy (bool) – 벡터에 연산을 적용하기 전에 복사할지 여부.
  • freg_indices (list[int]) – 이 게이트의 국소 모드가 매핑되는 절대(전역) 모드 인덱스. 회전 연산은 적용되기 전에 이러한 전역 모드에 내포됩니다.

리턴

변환된 벡터.

인상

ValueError – 만약 nelec 가 스핀 쌍이고, (적용된) 회전이 알파 및 베타 스핀 부문을 혼합한다면.

리턴 유형

ndarray

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