チートシート

MATLAB を使用した量子計算入門ガイド

MATLAB による量子計算を使用したデスクトップマシンの図。

MATLAB Support Package for Quantum Computing を使用すると、量子アルゴリズムを構築、シミュレーション、および実行することができます。

単一量子ビットゲート
量子回路に単一量子ビットゲートを適用します。かっこ () 内の数値は、ゲートが適用される量子ビットのインデックスです。
  量子回路オブジェクト プロット 行列
構文 >> qc=quantumCircuit (xGate(1))

>> plot(qc)

>> getMatrix(qc)
出力

NumQubits:1
Gates:[1×1 quantum.gate.SimpleGate]

単一量子ビットゲート 説明

xGate(1)

xGate = 量子ビット 1 に対する x 軸周りの π 回転

yGate(1)

yGate = 量子ビット 1 に対する y 軸周りの π 回転

zGate(1)

zGate = 量子ビット 1 に対する z 軸周りの π 回転

sGate(1)

sGate = z 軸周りの π/2 正回転

tGate(1)

tGate = z 軸周りの π/4 正回転

tiGate(1)

tiGate = z 軸周りの π/4 負回転

hGate(1)

hGate = アダマールゲート

idGate(1)

idGate = 恒等ゲート (何もしない)

回転ゲートは、2 つの引数をとる単一量子ビットゲートです。1 つ目は、ゲートが適用される量子ビットのインデックスで、2 つ目は回転角または位相 (θ、ラジアン単位) です。

パラメーター化された単一量子ビットゲート

説明

rxGate(1,pi/2)

rxGate = x 軸回転ゲート

ryGate(1,pi/2)

ryGate = y 軸回転ゲート

rzGate(1,pi/2)

rzGate = z 軸回転ゲート

r1Gate(1,pi/2)

r1Gate = グローバル位相をもつ z 軸回転ゲート

1 つのコントロール量子ビットをもつゲート

1 つのコントロール量子ビットをもつゲートを、量子回路に適用します。これらのゲートでは、2 つの引数がかっこ () に入っています。1 つ目はコントロール量子ビットで、2 つ目はターゲット量子ビットです。コントロール量子ビットが |0> の状態にあるとき、ゲートは何もしません。コントロール量子ビットが |1> の状態にあるとき、指定されたゲートはターゲット量子ビットに作用します。 >> cxGate(control,target)

2 つの量子ビットに作用する制御 X ゲートからなる量子回路のプロット

量子ビットインデックス 1: コントロール量子ビット
量子ビットインデックス 2: ターゲット量子ビット

制御回転ゲートは、3 つの引数をとる 2 量子ビットゲートです。1 つ目はコントロール量子ビット、2 つ目はターゲット量子ビット、3 つ目は回転角または位相 (θ、ラジアン単位) です。

2 量子ビットゲート

説明

cxGate(1,2)

cxGate or cnotGate = 量子ビット 1 が |1> の状態にあるとき、量子ビット 2 に対する x 軸周りの π 回転

cyGate(1,2)

cyGate = 量子ビット 1 が |1> の状態にあるとき、量子ビット 2 に対する y 軸周りの π 回転

czGate(1,2)

czGate = 量子ビット 1 が |1> の状態にあるとき、量子ビット 2 に対する z 軸周りの π 回転

chGate(1,2)

chGate = 制御アダマールゲート

パラメーター化された 2 量子ビットゲート

説明

crxGate(1,2,pi/2)

crxGate = 制御 x 軸回転ゲート

cryGate(1,2,pi/2)

cryGate = 制御 y 軸回転ゲート

crzGate(1,2,pi/2)

crzGate = 制御 z 軸回転ゲート

cr1Gate(1,2,pi/2)

cr1Gate = グローバル位相をもつ制御 z 軸回転ゲート

特殊なゲート

ゲート

説明

compositeGate (qc, [1,2])

内部量子回路から複合ゲートを構築し、CompositeGate オブジェクトを返します。qc は、例に示す内部量子回路です。

ccxGate(1,2,3)

制御された制御 X ゲート (CCNOT または Toffoli ゲート)

mcxGate(1:3,4,5)

多重制御 X ゲート

1 つ目の引数は 3 つのコントロール量子ビット (1,2,3)、2 つ目の引数は 1 つのターゲット量子ビット (4)、3 つ目の引数は 1 つの補助量子ビット (5) です。このゲートは、コントロール量子ビットの状態に基づいて単一のターゲット量子ビット上で動作します。補助量子ビットの数が、単純なゲートの数を決めます。

qftGate(1:3)

量子フーリエ変換 (QFT) ゲート

以下のゲートでは、1 つ目と 2 つ目の引数が量子ビットのインデックス、3 つ目が位相 (θ) です (ただし、swapGate は 2 つの引数のみをとります)。以下のすべてのゲートについて、2 つのターゲット量子ビットを入れ替えても、ゲートの動作は変わりません。

ゲート

説明

rxxGate(1,2,pi/2)

イジング XX カップリングゲート

ryyGate(1,2,pi/2)

イジング YY カップリングゲート

rzzGate(1,2,pi/2)

イジング ZZ カップリングゲート

swapGate(1,2)

量子ビットの値を入れ替えます。

量子回路の操作

操作

例

出力

plot = 量子回路を描画

>> gates=[hGate(1); cxGate(1,2)];

>> bell=quantumCircuit(gates, name="bell"); % circuit

>> plot(bell) %plot

inv = 量子回路またはゲートの逆

>> bell_inverted=inv(bell);

plot(bell_inverted)

getMatrix = 量子回路またはゲートの行列表現 >> getMatrix(bell)
量子回路またはゲートの行列表現
generateQASM = QASM コードの生成 >> generateQASM(bell)

"OPENQASM 3.0;
include "stdgates.inc"; qubit[2] q; bit[2] c; h q[0]; cx q[0],q[1];
c=measure q;"

simulate(circuit, inputState), 回路の初期量子状態を指定してシミュレーションを行い、QuantumState オブジェクトを返す >> simulate(bell)

BasisStates: [4×1 string]
Amplitudes: [4×1 double]
NumQubits:2

unpack = 量子回路内の複合ゲートを展開

>> not_custom=[cxGate(1,2)];

>> qc_inner=quantumCircuit(cnot_custom);

>> gates_appended=[hGate(1) compositeGate(qc_inner,[1 2]) compositeGate(qc_inner,[2 3])];

>> circ=quantumCircuit(gates_appended);

>> plot(circ) %packed composite gate

>> plot(unpack(circ, "recursive"))

シミュレーションされた量子回路の操作

操作

例

出力

量子ビット 1 (回路プロットの最上位量子ビット) を |1>、量子ビット 2 を |0> に設定した回路の量子状態を初期化

S=simulate(bell,"10")

QuantumState with properties:
BasisStates: [4×1 string]
Amplitudes: [4×1 double]
NumQubits:2

出力の基底状態とその振幅を示す

S.BasisStates
S.Amplitudes

BasisStates:"00" "01" "10" "11"
Amplitudes:0.7071 0 0 -0.7071

各量子ビットを表す基底など、回路の最終状態を示す

f=formula(S)

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

ans = "0.70711 * |00> + -0.70711
* |11>"
ans = "0.70711 * |+-> + 0.70711 *
|-+>"

とりうる状態と、各状態を測定する確率を示す

[states,P]=querystates(S)

states = "00"   P= 0.5
    "11"          0.5
任意の数のショットを使用して、回路の量子状態をランダムにサンプリング

M=randsample(S,50);
T=table(M.Counts,M.Probabilities,M.MeasuredStates,

VariableNames= ["Counts",
"\{*}Probabilities\{*}", "States"])

ans =
2×3 table
Counts Probabilities States
28        0.56         "00"
22        0.44         "11"

関数

説明

dev=uantumDeviceAWS("SV1", Region=reg, S3Path=bucketPath)

デバイス名、リージョン、結果を格納する S3 バケットパスを指定して、Amazon Braket デバイスに接続

dev=QuantumDeviceIBM("ibmq_qasm_simulator", ...AccountName=myAccountName, FileName=myFileName);

デバイス名とアカウント認証情報を指定して IBM 量子デバイスに接続

fetchDetails(device)

デバイスに関する追加情報を取得

task=run(circuit, dev);

回路をデバイス上で実行するタスクを作成

wait(task)

タスクのステータスをチェック

meas=fetchOutput(task);

回路実行の結果を取得

>> 可視化

|0> の行列表現

is [1;0] >> plotBlochSphere([1;0])

>> plot(qftGate(1:3))

>> histogram(states)

>> サンプルを含む GitHub リポジトリ