2012-03-23 5 views
1

私は量子コンピューティングの基礎をよく知りたいと思います。コンピュータにキュビットのセットを実装するにはどうすればよいですか?

これに慣れるには、非常に基本的なバーチャル量子コンピュータを作成するのがよいでしょう。 私が理解できるところでは、1つのキュービットを実装する努力は、2つのキュービットシステムを実装するために単純に複製することはできません。しかし、どのようにして1つの量子ビットを実装するかはわかりません。

キュビットを実装するにはどうすればよいですか? キュビットのセットを実装するにはどうすればよいですか?

答えて

0

私は実際に答えは分かりませんが、キュビットについて読むのは興味深いところです。this articleです。これは、量子ビットがどのように動作するかもつれ詳細に説明していませんが、それが関係する複雑さを示唆:

これは物事が が複雑どのように、2つだけの量子ビットを得ることができますどのように複雑である場合、それは3または4のためになります、または100? N-キュビット量子コンピュータの 状態は、(4^N-1)次元の空間内の点としてプロットされたときにのみ、完全に定義することができることが分かる。つまり、 をシミュレートするには、4^Nの古き良き古典的な数値が必要です。

これは最大スペースの複雑さです。たとえば、15キュビットの場合、約10億(2^30 = 4^15)です。シミュレーションの時間の複雑さについては何も言わない。

0

@ Qwertieが引用している記事はとても良い紹介です。コンピュータでこれらを実装する場合は、Cライブラリで高度な量子演算を実装するlibquantumシミュレータで遊ぶことができます。 this exampleを見ると、コードの使い方を知ることができます。

0

情報は実際には異なるQビット間の相互作用に格納されるため、実装する1つのQビットは複数のものを使用することには変換されません。私はあなたが遊ぶことができ、別の方法は、あなたが単純だが働いて何かから開始する場合は周り

1

サンプルコード

を再生するためにQCLやGoogle QCP http://qcplayground.withgoogle.com/#/homeのような既存の言語を使用することだと思うだろう、あなたがプレイすることができますこの数字はbasic quantum circuit simulator on jsfiddleです(約2k行ですが、その大部分はUIの[描画とクリック]と数学のものです[複素数と行列を定義する])。

量子コンピュータの状態がamplitudesと呼ばれる複雑な重みのセットです。考えられるそれぞれの古典的な状態に対して1つの振幅があります。あなたは3つのビットを持っている場合、量子ビットの場合は、クラシカルな状態は、通常のビットをにすることができ、単に、様々な状態です。

たとえば、あなたは000のための複雑な重量、001010011を、必要とします100,101,110および111の状態である。

var threeQubitState = new Complex[8]; 

振幅は制約を満たす必要があります。振幅を2乗した場合、結果は1になります。量子状態の

操作あなたは、古典的な状態の間でそれを流すことにより、振幅を再配布しましょう、しかし流れ

threeQubitState[3] = 1; // the system is 100% in the 011 state 

操作:他の人がすべて0であるが古典状態は1つの振幅た大きさ1に対応しますあなたはを選択する必要がありますすべての場合にの二乗大小関係追加プロパティを保持します。より技術的には、操作は一部のunitary matrixに対応する必要があります。

var myOperation = state => new[] { 
    (state[1] + state[0])/sqrt(2), 
    (state[1] - state[0])/sqrt(2), 
    state[2], 
    state[3], 
    state[4], 
    state[5], 
    state[6], 
    state[7] 
}; 
var myNewState = myOperation(threeQubitState); 

...これらは基本です。状態はユニット2ノルムの複素数のリストであり、演算はユニタリ行列であり、状態を測定する確率はその2乗振幅に過ぎない。

その他、各種おそらく考慮する必要があり

他のもの:

  • 操作のどのようなあなたが含まれるようにしたいですか?
  • 1量子ビット演算は2x2行列であり、3量子ビット演算は8x8行列です。 3キュビット状態の単一キュビットに1キュビットの演算を8×8行列に変換するにはどうすればよいですか? (Kronecker Productを使用してください)
  • シミュレーションのスピードアップにはどんなトリックを使用できますか?例えば、少数の状態のみが非ゼロである場合、または量子ビットがもつれていない場合、完全な行列乗算を行う必要はない。
  • ユーザーはどのようにシミュレーションを行うのですか?どのようにユーザーのために起こっているかを表現できますか?たくさんの数字が流れています...
関連する問題