サンプルコード
を再生するためにQCLやGoogle QCP http://qcplayground.withgoogle.com/#/homeのような既存の言語を使用することだと思うだろう、あなたがプレイすることができますこの数字はbasic quantum circuit simulator on jsfiddleです(約2k行ですが、その大部分はUIの[描画とクリック]と数学のものです[複素数と行列を定義する])。
州
量子コンピュータの状態がamplitudesと呼ばれる複雑な重みのセットです。考えられるそれぞれの古典的な状態に対して1つの振幅があります。あなたは3つのビットを持っている場合、量子ビットの場合は、クラシカルな状態は、通常のビットをにすることができ、単に、様々な状態です。
たとえば、あなたは000
のための複雑な重量、001
、010
、011
を、必要とします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を使用してください)
- シミュレーションのスピードアップにはどんなトリックを使用できますか?例えば、少数の状態のみが非ゼロである場合、または量子ビットがもつれていない場合、完全な行列乗算を行う必要はない。
- ユーザーはどのようにシミュレーションを行うのですか?どのようにユーザーのために起こっているかを表現できますか?たくさんの数字が流れています...