PiecewisePolynomialPauliRotations
class qiskit.circuit.library.PiecewisePolynomialPauliRotations(num_state_qubits=None, breakpoints=None, coeffs=None, basis='Y', name='pw_poly')
断片的に多項式に制御されたパウリ回転。
このクラスは、量子ビットの振幅に関する区分的多項式(連続である必要はない)関数 を実装している。 ブレークポイント が のサブセットであるとする。 は状態量子ビットの数である。 さらに、対応する係数を とする。 はすべての多項式の中で最も次数の高いものである。
そして、 は次のように定義される:
ここで、多項式と同じ数のブレークポイントが与えられた場合、暗黙のうちに を仮定する。
これは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
クラス 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