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

Basen: FunctionalPauliRotations

Stückweise polynomial gesteuerte Pauli-Drehungen.

Diese Klasse implementiert eine stückweise polynomiale (nicht notwendigerweise kontinuierliche) Funktion, f(x)f(x), auf Qubit-Amplituden, die durch Haltepunkte und Koeffizienten wie folgt definiert ist. Angenommen, die Haltepunkte (x0,...,xJ)(x_0, ..., x_J) sind eine Teilmenge von [0,2n−1][0, 2^n-1], wobei nn die Anzahl der Status-Qubits ist. Bezeichnen Sie die entsprechenden Koeffizienten mit [aj,1,...,aj,d][a_{j,1},...,a_{j,d}], wobei dd der höchste Grad aller Polynome ist.

Dann ist f(x)f(x) definiert als:

f(x)={0,x<x0∑i=0i=daj,i/2xi,xj≤x<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}

wobei wir bei gleicher Anzahl von Haltepunkten wie bei Polynomen implizit von xJ+1=2nx_{J+1} = 2^n ausgehen.

Anmerkung

Man beachte den Faktor 1/21/2 in den Koeffizienten von f(x)f(x). Dies steht im Einklang mit den Pauli-Drehungen von Qiskit.

Beispiele

>>> 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         ├
          └──────────┘

Quellenangaben:

[1] Haener, T., Roetteler, M., & Svore, K. M. (2018). Optimierung von Quantenschaltungen für arithmetische Operationen. arXiv:1805.12445

[2] Carrera Vazquez, A., Hiptmair, R., & Woerner, S. (2022). Verbesserung des Algorithmus für lineare Quantensysteme durch Richardson-Extrapolation. ACM Transactions on Quantum Computing 3, 1, Artikel 2

Veraltet seit Version 2.2

Die Klasse qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations.PiecewisePolynomialPauliRotations ist ab Qiskit 2.2 veraltet. Sie wird in Qiskit 3.0 entfernt. Verwenden Sie stattdessen die Klasse PiecewisePolynomialPauliRotationsGate.

Parameter

  • num_state_qubits (int | None) – Die Anzahl der Qubits, die den Zustand darstellen.
  • breakpoints (list[int] | None) – Die Kontrollpunkte zur Definition der stückweise linearen Funktion. Der Standardwert ist [0].
  • coeffs (list[list[float]] | None) – Die Koeffizienten der Polynome für die verschiedenen Abschnitte der stückweise linearen Funktion. coeffs[j][i] ist der Koeffizient der i-ten Potenz von x für das j-te Polynom. Standardmäßig linear: [[1]].
  • basis (str) – Die Art der Pauli-Drehung ('X', 'Y', 'Z').
  • name (str) – Der Name des Stromkreises.

Attribute

breakpoints

Die Haltepunkte der stückweisen Polynomfunktion.

Die Funktion ist polynomial in den Intervallen [point_i, point_{i+1}] , wobei der letzte Punkt implizit 2**(num_state_qubits + 1) ist.

Rückgabe

Die Liste der Haltepunkte.

coeffs

Die Koeffizienten der Polynome.

Rückgabe

Die Polynomkoeffizienten pro Intervall als verschachtelte Listen.

contains_zero_breakpoint

Ob 0 der erste Haltepunkt ist.

Rückgabe

True, wenn 0 der erste Haltepunkt ist, sonst False.

mapped_coeffs

Die Koeffizienten werden auf die interne Darstellung abgebildet, da wir nur x>=Bruchpunkt vergleichen.

Rückgabe

Die zugeordneten Koeffizienten.

name

Typ: str

Ein von Menschen lesbarer Name für den Stromkreis.

Beispiel

from qiskit import QuantumCircuit

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

Methoden

evaluate

evaluate(x)

GitHub

Bewerten Sie die stückweise polynomiale Drehung auf klassische Weise.

Parameter

x (float) – Zu bewertender Wert.

Rückgabe

Wert der stückweisen Polynomfunktion bei x.

Rückgabetyp

Gleitkomma

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.