クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

量子ゲートは行列のかけ算

このレッスンのあとで: 量子ビットにゲートを当てて、新しい状態を求められる。

55分のレッスンコマンド1件量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

量子ゲートは状態を変える操作

量子ゲートは、量子ビットの状態を変える操作です。ふつうの回路の NOT や AND にあたります。

ゲートは、小さな数の表(行列)を状態にかけて、新しい状態を作ります。このレッスンでは、X、Z、H の3つのゲートを、手と Python で動かします。

このレッスンのゴール

メモ

量子ビットにゲートを当てて、新しい状態を求められる。

キーワード

ことばいみれい
ゲート量子ビットの状態を変える操作
行列数を行と列に並べた表
Xゲート0と1の振幅を入れ替えるゲート
Zゲート1の振幅の符号を変えるゲート
Hゲート0と1を同じ重みで混ぜるゲートアダマールゲート
重ね合わせ0にも1にも振幅がある状態

学生が入力するセルは、このプレビューでは空白です。

ゲートは行列を状態にかける

ゲートは、2行2列の行列です。状態にかけると、新しい状態ができます。

新しい0の振幅は、1行目と状態を、成分ごとにかけて足した数です。新しい1の振幅は、2行目で同じことをします。

3つのゲートの行列

ゲート1行目2行目はたらき
X[0, 1][1, 0]0と1を入れ替える
Z[1, 0][0, -1]1の振幅の符号を変える
H[1, 1] を √2 で割る[1, -1] を √2 で割る0と1を同じ重みで混ぜる

学生が入力するセルは、このプレビューでは空白です。

行列のかけ算を手でする

コード: python
# X ゲートを [1, 0] に当てます。行列は2行2列のリストです。
gate = [[0, 1], [1, 0]]
state = [1, 0]
new_zero = gate[0][0] * state[0] + gate[0][1] * state[1]
new_one = gate[1][0] * state[0] + gate[1][1] * state[1]
print([new_zero, new_one])
# state を [0, 1] に変えて、もう一度実行してください。
# 0と1は、どうなりますか。

ラボは X と H を表示する

ラボの gates.py は、|0> に X と H を当てて、結果を表示します。

表示される言葉は英語です。X on |0> は、0の状態に X ゲートを当てたという意味です。chance of 0 and of 1 は、0と1の確率です。

X と H を当てる

コマンド
docker exec jupyter python3 steps/gates.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Z ゲートは符号だけを変える

Z ゲートは、|0> には何もしません。|1> の振幅の符号だけを、プラスからマイナスにします。

[0.6, 0.8] に当てると [0.6, -0.8] になります。2乗するとどちらも同じなので、確率は変わりません。

よくある間違い

注意

符号が変わっても確率が同じなら、Z は何もしないと考えがちです。確率はそのままでも、状態は別物です。次のゲートで混ぜると、結果の確率が変わります。第5回で見ます。

H ゲートは重ね合わせを作る

H ゲートは、|0> を [0.707, 0.707] にします。0にも1にも、同じ大きさの振幅があります。この状態を重ね合わせと呼びます。

0.707 は 1 を √2 で割った数です。2乗すると 0.5 なので、0と1の確率は半々です。

H ゲートを手で当てる

コード: python
import math

# H ゲートは、同じ大きさの重みで混ぜます。
s = 1 / math.sqrt(2)
gate = [[s, s], [s, -s]]
state = [1, 0]
new_zero = gate[0][0] * state[0] + gate[0][1] * state[1]
new_one = gate[1][0] * state[0] + gate[1][1] * state[1]
print(round(new_zero, 3), round(new_one, 3))
# state を [0, 1] に変えて、もう一度実行してください。
# 2つ目の符号は、どうなりますか。

さらに挑戦: 状態を順に追う

[1, 0] から始めて、X、H、Z の順にゲートを当てます。各段階の状態を、表に書き出してください。

最後の状態で、0と1の確率はいくつですか。Z が確率を変えなかった理由も、一文で書きましょう。

このラボとソースについて: 量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。