Vue.jsを使って量子コンピュータの並列演算を再現してみた ~その2~
はじめに
こんにちは、Yuです。
前回の続きで、量子コンピュータのお話です。
前回はとりあえず形になるものを作って終わりましたが、せっかくなので意味のある計算をしてみたいと思い、機能を追加しました。
詳しい説明は省略しますので、興味のある方はググってください。
やりたかったこと
-
状態を複素数に拡張
-
フーリエ変換 (正確には「量子離散的フーリエ変換」というらしいです)
作ったもの
実際にできたものがこちらになります。
レイアウトは特に変わっていません。手打ちで回路を入力するのが面倒になってきたので、フーリエ変換の回路を追加するボタンを実装しました。
書いたコード
GitHubにあげていますので、興味のある方はどうぞ。
追加したゲートは以下の2つです。
-
制御回転ゲート
制御ビット側に「U」または「D」、標的ビット側に数字(a)を入力します。制御側と標的側の少なくとも片方が0なら変化なし、両方とも1ならその状態に対して exp(2πi/2a) をかけます。 今は1桁の0以上の整数にしか対応していません。 -
スワップゲート
一番上のビットに「s」を、それ以外のビットに「|」を入力します。 0010→0100、0101→1010という感じに、ビットの順番を逆転させます。
動かしてみた
「10」をフーリエ変換してみました。
計算結果があっているかは分かりません。多分あってます。多分。
おわりに
中々それっぽくなったので個人的には満足しています。
次回はさらにゲートを追加し、「位相推定問題」に挑戦する予定です(あくまで予定)。
おわり