Main Content

ローカル量子状態シミュレーション

メモ

インストールが必要: この機能には、MATLAB Support Package for Quantum Computing が必要です。

このトピックでは、量子回路をローカルでシミューレートしてシミュレーション結果を解析する方法について説明します。量子回路を作成するには、回路設計を反復し、回路ゲートを調整して動作を確認する必要があります。また、量子ハードウェアでの測定は確率的であるため、最終状態の確率を調べて測定の最も可能性の高い結果を判別すると役立ちます。quantumCircuitsimulate メソッドを使用して、ローカル コンピューターで回路をシミュレートします。回路をシミュレートしたら、quantum.gate.QuantumState のメソッドを使用して結果を検査します。

回路の作成

3 つの量子ビットと 3 つのゲートをもつ量子回路を作成します。アダマール ゲートを最初の量子ビットに適用し、CNOT ゲートを 2 番目と 3 番目の量子ビットに適用します。最初の量子ビットをコントロールとして使用します。回路をプロットし、その量子ビットとゲートを表示します。

gates = [hGate(1);
         cxGate(1,2);
         cxGate(1,3)];
C = quantumCircuit(gates);
plot(C)

Quantum circuit diagram with three qubits and three gates

プロット内の各水平線は量子ビットの 1 つを表し、ゲートは適用した順に左から右に配置されます。

回路のシミュレート

simulate メソッドを使用して量子回路をシミュレートします。既定では、すべての量子ビットは |0 状態から開始しますが、2 番目の入力引数を使用して量子ビットに対して別の開始状態を指定できます。各量子ビットの初期状態が |1 になるように指定します。

S = simulate(C,"111")
S = 

  QuantumState with properties:

    BasisStates: [8×1 string]
     Amplitudes: [8×1 double]
      NumQubits: 3

結果の quantum.gate.QuantumState オブジェクトのプロパティを検査して、ベース状態および対応する振幅を表示します。

S.BasisStates
ans = 

  8×1 string array

    "000"
    "001"
    "010"
    "011"
    "100"
    "101"
    "110"
    "111"
S.Amplitudes
ans =

         0
         0
         0
    0.7071
   -0.7071
         0
         0
         0

状態式の表示

formula メソッドを使用して、シミュレートした量子状態の式表現を表示します。式は、BasisStates の情報と SAmplitudes プロパティを結合します。既定では、式は Z ベースを使用します。

f = formula(S)
f = 

    "0.70711  * |011> +
     -0.70711 * |100>"

名前と値の引数 Basis を指定して、X ベースを使用した式を表示します。これで、式では |+ 状態と | 状態の線形結合が示されるようになりました。

f2 = formula(S,Basis="X")
f2 = 

    "-0.5 * |++-> +
     -0.5 * |+-+> +
     0.5  * |-++> +
     0.5  * |--->"

可能な状態のプロット

histogram を使用して、可能な状態およびその確率をプロットします。各状態の確率はその振幅の平方と等しくなります。この回路の可能な状態は 2 つだけで、各状態が測定される確率は 50% です。

histogram(S)

Histogram of possible quantum states and their probabilities

可能な状態のクエリ

querystates メソッドを使用して、可能な状態およびその確率をクエリできます。このメソッドは、ヒストグラムで示されるのと同じ情報をコマンド ラインで返します。

[states,P] = querystates(S)
states = 

  2×1 string array

    "011"
    "100"


P =

    0.5000
    0.5000

量子ビット状態の確率のクエリ

probability メソッドを使用して、特定の量子ビットが特定の状態で測定される確率をクエリできます。たとえば、2 番目の量子ビットが |1 状態で測定される確率を判別します。

p = probability(S,2,"1")
p =

    0.5000

量子状態測定のシミュレート

量子測定は確率的であるため、結果は試行間で異なることがあります。randsample メソッドは、そのような多数の測定の集計結果をシミュレートするのに役立ちます。ショット (試行) の回数を指定できます。ショットごとに単一の状態が返されます。

たとえば、回路の 50 回の量子測定をシミュレートします。

M = randsample(S,50)
M = 

  QuantumMeasurement with properties:

    MeasuredStates: [2×1 string]
            Counts: [2×1 double]
     Probabilities: [2×1 double]
         NumQubits: 3

測定された状態の数と推定確率を表示します。

T = table(M.Counts,M.Probabilities,M.MeasuredStates, ...
    VariableNames=["Counts","Probabilities","States"])
T =

  2×3 table

    Counts    Probabilities    States
    ______    _____________    ______

      21          0.42         "011" 
      29          0.58         "100" 

参考

| | |

関連するトピック