Class GeneralQuantumOperator

Inheritance Relationships

Derived Type

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

エルミート共役を返す

戻り値

GeneralQuantumOperator

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] 作用を受ける状態

CPPCTYPE calculate_default_mu() const

solve_ground_state_eigenvalue_by_power_method の mu のデフォルト値として,各 operator の係数の絶対値の和を計算する.