0

まず、長文で申し訳ありませんが、私の問題/誤解を可能な限り説明しようとしました。

私の学生プロジェクトでは、単純な量子コンピューターのシミュレーションを実装する必要があります。私が今理解しようとしているのは、どのように異なるゲートが n-キュービットに少しずつ適用されているかということです。

たとえば、1 つの量子ビットは 2 つの複素数 (a1、a2) で表されます。

a1 |0> + a2 |1>

ここで、a1 と a2 は振幅、つまり値が測定される可能性です。すべての振幅の 2 乗と合計は、常に 1 に等しくなければなりません。

そこで、2x2 マトリゼーションで表されるアダマール ゲートを追加しました。

public void Hadamard(){
  gate.entries[0][0] = new ComplexNumber(1,0);
  gate.entries[0][1] = new ComplexNumber(1,0);
  gate.entries[1][0] = new ComplexNumber(1,0);
  gate.entries[1][1] = new ComplexNumber(-1,0);
  gate = (Matrix.scalarMultiplication(gate,Math.pow(2,-0.5)));
}

ここで、アダマール ゲートを使用して a1 と a2 を使用して行列乗算を行います。

そこで、ビットの状態を次のように表す複素数の 2 次元配列としてレジスタを設定します。

Register register = new Register(1); 

数値は量子ビットの数を表します。すべての状態を保持する行を 1 つだけ作成し、列のインデックスは状態と等しくなります。だから例えば

[0][0] = |0> and [0][1] = |1> 

a1=1+0i および a2=0+0i と言うと、乗算は次のようになります。

 cmplx1 = cmplxMultiplicate(gate.entries[0][0],a1);
 cmplx2 = cmplxMultiplicate(gate.entries[0][1],a2);
 cmplx3 = cmplxMultiplicate(gate.entries[1][0],a1);
 cmplx4 = cmplxMultiplciate(gate.entires[1][1],a2);
 register.entries[0][0] = cmplxAddition(cmplx1,cmplx2); // 0.70710678118
 register.entries[0][1] = cmplxAddition(cmplx3,cmplx4); // 0.70710678118

ここで質問です。複数の Qubit がある場合、これを行う方法がわかりません。たとえば、2 つのキュービットでは、

a1 |00> + a2 |01> + a3 |10> + a4 |11> 

4 つの異なる状態 (または任意の数に対して 2^(numberOfQubits) 状態)。しかし、どうすれば 4 つの状態すべてをアダマール ゲートに適用できますか? a2などよりもa1にすべての値を掛けた場合、すべての可能な結果を​​作成する必要がありますか? このような :

 cmplx1 = cmplxMultiplicate(gate.entries[0][0],a1);
 cmplx2 = cmplxMultiplicate(gate.entries[0][1],a2);
 cmplx3 = cmplxMultiplicate(gate.entries[1][0],a1);
 cmplx4 = cmplxMultiplciate(gate.entries[1][1],a2);
 cmplx1 = cmplxMultiplicate(gate.entries[0][0],a1);
 cmplx2 = cmplxMultiplicate(gate.entries[0][1],a3);
 cmplx3 = cmplxMultiplicate(gate.entries[1][0],a1);
 cmplx4 = cmplxMultiplciate(gate.entries[1][1],a3);

私はこれについて本当に無知であり、私のサイトには根本的な誤解があり、それが私にとって物事を非常に複雑にしていると思います.

私を正しい道/軌道に導く助けがあれば、本当に感謝しています.

どうもありがとうございました。

4

1 に答える 1