Skip to main content
IBM Quantum Platform

PiecewisePolynomialPauliRotations

class qiskit.circuit.library.PiecewisePolynomialPauliRotations(num_state_qubits=None, breakpoints=None, coeffs=None, basis='Y', name='pw_poly')

GitHub

베이스: FunctionalPauliRotations

조각 단위로 다항식으로 제어되는 폴리 회전.

이 클래스는 다음과 같이 중단점과 계수를 통해 정의된 큐비트 진폭에 대해 단편적인 다항식(반드시 연속적일 필요는 없음) 함수인 f(x)f(x) 를 구현합니다. 중단점 (x0,...,xJ)(x_0, ..., x_J)[0,2n1][0, 2^n-1] 의 하위 집합이라고 가정하고 nn 은 상태 큐비트 수입니다. 또한 해당 계수를 [aj,1,...,aj,d][a_{j,1},...,a_{j,d}] 으로 나타내며, 여기서 dd 은 모든 다항식 중 가장 높은 차수입니다.

그러면 f(x)f(x) 으로 정의됩니다:

f(x)={0,x<x0i=0i=daj,i/2xi,xjx<xj+1f(x) = \begin{cases} 0, x < x_0 \\ \sum_{i=0}^{i=d}a_{j,i}/2 x^i, x_j \leq x < x_{j+1} \end{cases}

여기서 다항식과 같은 수의 중단점이 주어지면 암시적으로 xJ+1=2nx_{J+1} = 2^n 이라고 가정합니다.

참고

f(x)f(x) 계수의 1/21/2 계수에 주목하세요. 이는 키스킷의 폴리 로테이션과 일치합니다.

예제

>>> from qiskit import QuantumCircuit
>>> from qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations import\
... PiecewisePolynomialPauliRotations
>>> qubits, breakpoints, coeffs = (2, [0, 2], [[0, -1.2],[-1, 1, 3]])
>>> poly_r = PiecewisePolynomialPauliRotations(num_state_qubits=qubits,
...breakpoints=breakpoints, coeffs=coeffs)
>>>
>>> qc = QuantumCircuit(poly_r.num_qubits)
>>> qc.h(list(range(qubits)));
>>> qc.append(poly_r.to_instruction(), list(range(qc.num_qubits)));
>>> qc.draw()
     ┌───┐┌──────────┐
q_0: ┤ H ├┤0
     ├───┤│          │
q_1: ┤ H ├┤1
     └───┘│          │
q_2: ─────┤2
          │  pw_poly │
q_3: ─────┤3
          │          │
q_4: ─────┤4
          │          │
q_5: ─────┤5
          └──────────┘

참조 자료:

[1] Haener, T., 로텔러, M., & 스보어, K. M. (2018). 산술 연산을 위한 양자 회로 최적화. arXiv:1805.12445

[2] 카레라 바스케스, A., 힙트마이어, R., & 워너너, S. (2022). 리처드슨 외삽법을 사용한 양자 선형 시스템 알고리즘 개선하기. 양자 컴퓨팅에 관한 ACM 거래 3, 1, 2조 2항

버전부터 사용되지 않음 2.2

qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations.PiecewisePolynomialPauliRotations 클래스는 키스킷 2.2 에서 더 이상 사용되지 않습니다. 키스킷 3.0 에서 제거됩니다. 대신 PiecewisePolynomialPauliRotationsGate 클래스를 사용하세요.

매개변수

  • num_state_qubits (int | None) – 상태를 나타내는 큐비트의 수.
  • breakpoints (list[int] | None) – 단편선형 함수를 정의하는 분할점. 기본값은 [0].입니다.
  • coeffs (list[list[float]] | None) – 단편선형 함수의 각 구간별 다항식의 계수. coeffs[j][i] 는 j번째 다항식에서 x의 i제 승에 대한 계수이다. 기본값은 선형입니다: [[1]].
  • basis (str) – 폴리 로테이션 유형 ('X', 'Y', 'Z').
  • name (str) – 서킷의 이름입니다.

속성

breakpoints

조각 다항식 함수의 중단점입니다.

이 함수는 [point_i, point_{i+1}] 간격의 다항식이며, 마지막 지점은 암시적으로 2**(num_state_qubits + 1) 입니다.

리턴

중단점 목록입니다.

coeffs

다항식의 계수입니다.

리턴

간격별 다항식 계수를 중첩된 목록으로 표시합니다.

contains_zero_breakpoint

0이 첫 번째 중단점인지 여부.

리턴

0이 첫 번째 중단점인 경우 참, 그렇지 않으면 거짓입니다.

mapped_coeffs

X>=중단점만 비교하기 때문에 내부 표현에 매핑된 계수입니다.

리턴

매핑된 계수입니다.

name

유형: str

사람이 읽을 수 있는 회로의 이름입니다.

예제

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit

메소드

evaluate

evaluate(x)

GitHub

조각별 다항식 회전을 고전적으로 평가합니다.

매개변수

x (float) – 평가할 가치.

리턴

X에서 부분 다항식 함수의 값입니다.

리턴 유형

부동

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