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 を仮定する。

1/21/2 f(x)f(x) これはQiskitのパウリ回転と一致する。

>>> 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] ヘーナー, T., ロエテラー, M. および スヴォア, K. M. (2018). 算術演算のための量子回路の最適化。 arXiv:1805.12445

[2] カレラ・バスケス、A、 Hiptmair, R., & Woerner, S. (2022). リチャードソン外挿を用いた量子線形システムアルゴリズムの強化。 ACM Transactions on Quantum Computing 3, 1, Article 2

バージョンから非推奨 2.2

クラス qiskit.circuit.library.arithmetic.piecewise_polynomial_pauli_rotations.PiecewisePolynomialPauliRotations は Qiskit 2.2 で非推奨となりました。 Qiskit 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>=breakpointのみを比較するため、内部表現にマッピングされた係数。

戻り値

マッピングされた係数。

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で行ってください。