量子フーリエ変換
量子フーリエ変換は、ただの量子ゲートである。特にカスタマイズポイントや、バリエーションがないので、sympy で簡単に利用できる。
>>> from sympy.physics.quantum.qft import QFT
>>> QFT2 = QFT(0,1) # QFT for 1-qubit
>>> QFT4 = QFT(0,2) # QFT for 2-qubit
>>> QFT8 = QFT(0,3) # QFT for 3-qubit
量子フーリエ変換に親しむ
Lesson1. QFT2 はアダマールゲートである
>>> from sympy.physics.quantum.qft import QFT
>>> from sympy.physics.quantum.qubit import Qubit
>>> from sympy.physics.quantum.qapply import qapply
>>> from sympy.physics.quantum.represent import represent
>>> QFT2 = QFT(0,1)
>>> qapply(QFT2 * Qubit('0'))
sqrt(2)*|0>/2 + sqrt(2)*|1>/2
>>> qapply(QFT2 * Qubit('1'))
sqrt(2)*|0>/2 - sqrt(2)*|1>/2
Lesson2. QFT は周期の逆数を導出する
周期2 の状態 (例: |0> + |4>
) を入れると周期が 4の状態 が出てくるなど。
>>> from sympy.physics.quantum.qft import QFT
>>> from sympy.physics.quantum.qubit import Qubit
>>> from sympy.physics.quantum.qapply import qapply
>>>
>>> QFT8 = QFT(0,3) # QFT for 3-qubit
>>> qapply( QFT8*(Qubit('000')))
sqrt(2)*|000>/4 + sqrt(2)*|001>/4 + sqrt(2)*|010>/4 + sqrt(2)*|011>/4 + sqrt(2)*|100>/4 + sqrt(2)*|101>/4 + sqrt(2)*|110>/4 + sqrt(2)*|111>/4
>>> qapply( QFT8*(Qubit('000')+Qubit('100')))
sqrt(2)*|000>/2 + sqrt(2)*|010>/2 + sqrt(2)*|100>/2 + sqrt(2)*|110>/2
>>> qapply( QFT8*(Qubit('000')+Qubit('010')+Qubit('100')+Qubit('110')))
sqrt(2)*|000> + sqrt(2)*|100>
Lesson3. 入力にオフセットをつけるとよく似た出力になる
オフセットの違う入力(例: |0> + |4>
と |1> + |5>
) を入れると、よく似た出力が得られる。
>>> from sympy.physics.quantum.qft import QFT
>>> from sympy.physics.quantum.qubit import Qubit
>>> from sympy.physics.quantum.qapply import qapply
>>> QFT8 = QFT(0,3) # QFT for 3-qubit
>>> qapply( QFT8*(Qubit('000')+Qubit('100')))
sqrt(2)*|000>/2 + sqrt(2)*|010>/2 + sqrt(2)*|100>/2 + sqrt(2)*|110>/2
>>> qapply( QFT8*(Qubit('001')+Qubit('101')))
sqrt(2)*|000>/2 + sqrt(2)*I*|010>/2 - sqrt(2)*|100>/2 - sqrt(2)*I*|110>/2
>>> qapply( QFT8*(Qubit('010')+Qubit('110')))
sqrt(2)*|000>/2 - sqrt(2)*|010>/2 + sqrt(2)*|100>/2 - sqrt(2)*|110>/2