ローカル量子状態シミュレーション
メモ
インストールが必要: この機能には、MATLAB Support Package for Quantum Computing が必要です。
このトピックでは、量子回路をローカルでシミューレートしてシミュレーション結果を解析する方法について説明します。量子回路を作成するには、回路設計を反復し、回路ゲートを調整して動作を確認する必要があります。また、量子ハードウェアでの測定は確率的であるため、最終状態の確率を調べて測定の最も可能性の高い結果を判別すると役立ちます。quantumCircuit
の simulate
メソッドを使用して、ローカル コンピューターで回路をシミュレートします。回路をシミュレートしたら、quantum.gate.QuantumState
のメソッドを使用して結果を検査します。
回路の作成
3 つの量子ビットと 3 つのゲートをもつ量子回路を作成します。アダマール ゲートを最初の量子ビットに適用し、CNOT ゲートを 2 番目と 3 番目の量子ビットに適用します。最初の量子ビットをコントロールとして使用します。回路をプロットし、その量子ビットとゲートを表示します。
gates = [hGate(1); cxGate(1,2); cxGate(1,3)]; C = quantumCircuit(gates); plot(C)
プロット内の各水平線は量子ビットの 1 つを表し、ゲートは適用した順に左から右に配置されます。
回路のシミュレート
simulate
メソッドを使用して量子回路をシミュレートします。既定では、すべての量子ビットは 状態から開始しますが、2 番目の入力引数を使用して量子ビットに対して別の開始状態を指定できます。各量子ビットの初期状態が になるように指定します。
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
の情報と S
の Amplitudes
プロパティを結合します。既定では、式は 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)
可能な状態のクエリ
querystates
メソッドを使用して、可能な状態およびその確率をクエリできます。このメソッドは、ヒストグラムで示されるのと同じ情報をコマンド ラインで返します。
[states,P] = querystates(S)
states = 2×1 string array "011" "100" P = 0.5000 0.5000
量子ビット状態の確率のクエリ
probability
メソッドを使用して、特定の量子ビットが特定の状態で測定される確率をクエリできます。たとえば、2 番目の量子ビットが 状態で測定される確率を判別します。
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"
参考
quantumCircuit
| quantum.gate.SimpleGate
| quantum.gate.CompositeGate
| quantum.gate.QuantumState