Class GeneralQuantumOperator¶
Defined in File general_quantum_operator.hpp
Inheritance Relationships¶
Derived Type¶
public HermitianQuantumOperator
(Struct HermitianQuantumOperator)
Class Documentation¶
-
class GeneralQuantumOperator¶
Subclassed by HermitianQuantumOperator
Public Functions
-
explicit GeneralQuantumOperator(const UINT qubit_count)¶
コンストラクタ。
空のGeneralQuantumOperatorを作成する。
- パラメータ
qubit_count -- [in] qubit数
- 戻り値
Observableのインスタンス
-
GeneralQuantumOperator(const GeneralQuantumOperator &obj)¶
コピーコンストラクタ。
与えられたGeneralQuantumOperatorのコピーを作成する。
- パラメータ
obj -- [in] コピー元のインスタンス
- 戻り値
コピーされたObservableのインスタンス
-
virtual ~GeneralQuantumOperator()¶
デストラクタ。このとき、GeneralQuantumOperatorが保持しているPauliOperatorは解放される。
-
inline virtual bool is_hermitian() const¶
オペレータがエルミートかどうかを判定する。
エルミートでないと判定されても、実際にはエルミートであることもある。 エルミートと判定された場合は必ずエルミートである。
-
virtual void add_operator(const PauliOperator *mpt)¶
PauliOperatorを内部で保持するリストの末尾に追加する。 従来通り、引数として与えられたPauliOperatorのcopyを生成し保持する。
- パラメータ
mpt -- [in] 追加するPauliOperatorのインスタンス
-
virtual void add_operator_move(PauliOperator *mpt)¶
PauliOperatorを内部で保持するリストの末尾に追加する。 引数で与えられたPauliOperatorの所有権はGeneralQuantumOperator側に譲渡(move)される。
- パラメータ
mpt -- [in] 追加するPauliOperatorのインスタンス
-
virtual void add_operator_copy(const PauliOperator *mpt)¶
PauliOperatorを内部で保持するリストの末尾に追加する。 引数で与えられたPauliOperatorはGeneralQuantumOperatorに複製(copy)される。
- パラメータ
mpt -- [in] 追加するPauliOperatorのインスタンス
-
virtual void add_operator(const CPPCTYPE coef, std::string pauli_string)¶
パウリ演算子の文字列と係数の組をGeneralQuantumOperatorに追加する。
- パラメータ
coef -- [in] pauli_stringで作られるPauliOperatorの係数
pauli_string -- [in] パウリ演算子と掛かるindexの組からなる文字列。(example: "X 1 Y 2 Z 5")
-
virtual void add_operator(const std::vector<UINT> &target_qubit_index_list, const std::vector<UINT> &target_qubit_pauli_list, CPPCTYPE coef)¶
-
inline virtual UINT get_qubit_count() const¶
GeneralQuantumOperatorが掛かるqubit数を返す。
- 戻り値
GeneralQuantumOperatorのqubit数
-
inline virtual ITYPE get_state_dim() const¶
GeneralQuantumOperatorの行列表現の次元を返す。
- 戻り値
GeneralQuantumOperatorの次元
-
inline virtual UINT get_term_count() const¶
GeneralQuantumOperatorが保持するPauliOperatorの数を返す
- 戻り値
GeneralQuantumOperatorが保持するPauliOperatorの数
-
inline virtual const PauliOperator *get_term(UINT index) const¶
GeneralQuantumOperatorの指定した添字に対応するPauliOperatorを返す
- パラメータ
index -- [in] GeneralQuantumOperatorが保持するPauliOperatorのリストの添字
- 戻り値
指定したindexにあるPauliOperator
-
inline virtual std::vector<PauliOperator*> get_terms() const¶
GeneralQuantumOperatorが保持するPauliOperatorのリストを返す
- 戻り値
GeneralQuantumOperatorが持つPauliOperatorのリスト
-
virtual GeneralQuantumOperator *get_dagger() const¶
エルミート共役を返す
-
virtual std::string to_string() const¶
文字列に変換する。
-
virtual CPPCTYPE get_expectation_value(const QuantumStateBase *state) const¶
GeneralQuantumOperatorのある量子状態に対応するエネルギー(期待値)を計算して返す
- パラメータ
state -- [in] 期待値をとるときの量子状態
- 戻り値
入力で与えた量子状態に対応するGeneralQuantumOperatorの期待値
-
virtual CPPCTYPE get_expectation_value_single_thread(const QuantumStateBase *state) const¶
-
virtual CPPCTYPE get_transition_amplitude(const QuantumStateBase *state_bra, const QuantumStateBase *state_ket) const¶
GeneralQuantumOperatorによってある状態が別の状態に移る遷移振幅を計算して返す
- パラメータ
state_bra -- [in] 遷移先の量子状態
state_ket -- [in] 遷移前の量子状態
- 戻り値
入力で与えた量子状態に対応するGeneralQuantumOperatorの遷移振幅
-
void add_random_operator(const UINT operator_count)¶
ランダムなパウリ演算子をもつ observable を生成する
- パラメータ
observable -- [in] パウリ演算子を追加する observable
operator_count -- [in] observable に追加するパウリ演算子数
seed -- [in] 乱数のシード値
- 戻り値
ランダムなパウリ演算子を operator_count 個もつ observable
-
void add_random_operator(const UINT operator_count, UINT seed)¶
-
virtual CPPCTYPE solve_ground_state_eigenvalue_by_arnoldi_method(QuantumStateBase *state, const UINT iter_count, const CPPCTYPE mu = 0.0) const¶
GeneralQuantumOperator の基底状態の固有値を arnordi method により求める. (A - I) の絶対値最大固有値を求めることで基底状態の固有値を求める.
- パラメータ
state -- [in] 固有値を求めるための量子状態
iter_count -- [in] 計算の繰り返し回数
mu -- [in] 固有値をシフトするための係数
- 戻り値
GeneralQuantumOperator の基底状態の固有値
-
virtual CPPCTYPE solve_ground_state_eigenvalue_by_power_method(QuantumStateBase *state, const UINT iter_count, const CPPCTYPE mu = 0.0) const¶
GeneralQuantumOperator の基底状態の固有値を power method により求める (A - I) の絶対値最大固有値を求めることで基底状態の固有値を求める.
- パラメータ
state -- [in] 固有値を求めるための量子状態
iter_count -- [in] 計算の繰り返し回数
mu -- [in] 固有値をシフトするための係数
- 戻り値
GeneralQuantumOperator の基底状態の固有値
-
void apply_to_state(QuantumStateBase *work_state, const QuantumStateBase &state_to_be_multiplied, QuantumStateBase *dst_state) const¶
state_to_be_multiplied に GeneralQuantumOperator を作用させる. 結果は dst_state に格納される.dst_state はすべての要素を0に初期化してから計算するため, 任意の状態を渡してよい.
- パラメータ
work_state -- [in] 作業用の状態
state_to_be_multiplied -- [in] 作用を受ける状態
dst_state -- [in] 結果を格納する状態
-
void apply_to_state(QuantumStateBase *state, QuantumStateBase *dst_state) const¶
state_to_be_multiplied に GeneralQuantumOperator を作用させる. 結果は dst_state に格納される.dst_state はすべての要素を0に初期化してから計算するため, 任意の状態を渡してよい.
- パラメータ
state_to_be_multiplied -- [in] 作用を受ける状態
dst_state -- [in] 結果を格納する状態
-
void apply_to_state_single_thread(QuantumStateBase *state, QuantumStateBase *dst_state) const¶
state_to_be_multiplied に GeneralQuantumOperator を作用させる. 結果は dst_state に格納される.dst_state はすべての要素を0に初期化してから計算するため, 任意の状態を渡してよい.
- パラメータ
state_to_be_multiplied -- [in] 作用を受ける状態
dst_state -- [in] 結果を格納する状態
-
virtual GeneralQuantumOperator *copy() const¶
-
GeneralQuantumOperator operator+(const GeneralQuantumOperator &target) const¶
-
GeneralQuantumOperator operator+(const PauliOperator &target) const¶
-
GeneralQuantumOperator &operator+=(const GeneralQuantumOperator &target)¶
-
GeneralQuantumOperator &operator+=(const PauliOperator &target)¶
-
GeneralQuantumOperator operator-(const GeneralQuantumOperator &target) const¶
-
GeneralQuantumOperator operator-(const PauliOperator &target) const¶
-
GeneralQuantumOperator &operator-=(const GeneralQuantumOperator &target)¶
-
GeneralQuantumOperator &operator-=(const PauliOperator &target)¶
-
GeneralQuantumOperator operator*(const GeneralQuantumOperator &target) const¶
-
GeneralQuantumOperator operator*(const PauliOperator &target) const¶
-
GeneralQuantumOperator operator*(CPPCTYPE target) const¶
-
GeneralQuantumOperator &operator*=(const GeneralQuantumOperator &target)¶
-
GeneralQuantumOperator &operator*=(const PauliOperator &target)¶
-
GeneralQuantumOperator &operator*=(CPPCTYPE target)¶
Protected Functions
-
void _apply_pauli_to_state(std::vector<UINT> pauli_id_list, std::vector<UINT> target_index_list, QuantumStateBase *state) const¶
state にパウリ演算子を作用させる
- パラメータ
pauli_id_list -- [in] パウリ演算子の ID
target_index_list -- [in] パウリ演算子が作用する量子ビットの番号
state -- [in] 作用を受ける状態
-
void _apply_pauli_to_state_single_thread(std::vector<UINT> pauli_id_list, std::vector<UINT> target_index_list, QuantumStateBase *state) const¶
state にパウリ演算子を作用させる
- パラメータ
pauli_id_list -- [in] パウリ演算子の ID
target_index_list -- [in] パウリ演算子が作用する量子ビットの番号
state -- [in] 作用を受ける状態
-
explicit GeneralQuantumOperator(const UINT qubit_count)¶