common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


autoQAOA
Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

Juliaで量子回路入門編

Yuichiro Minato

2020/12/10 03:40

#量子ゲート #Julia

こんにちは、Juliaです。量子計算を手で確認するの大変なので入門編として量子ビットと量子ゲート計算をJuliaで基礎的なところをやります。

量子ビットの作成

量子ビットは状態ベクトルのテンソル積が取れますので、

q = [1,0]

このように単体の量子ビットを準備します。

2-element Array{Int64,1}:
1
0

量子ビットを増やしたい場合には、

kron(q,q)

こうすることで、

4-element Array{Int64,1}:
1
0
0
0

これをループで回すと、

function svq(N)
  q = [1,0]
  sv = q
  for i=2:N
    sv = kron(sv,q)
  end
  return sv
end

のような関数になります。3量子ビットの状態ベクトルを作るには、

svq(3)

8-element Array{Int64,1}:
1
0
0
0
0
0
0
0

できました。

ゲートの作成

次に量子ゲートです。行列として作ります。まずはXゲート

x = [0 1;1 0]

2×2 Array{Int64,2}:
0 1
1 0

単位行列も使います。

i = [1 0;0 1]

2×2 Array{Int64,2}:
1 0
0 1

アダマールゲート

h = 1/sqrt(2)*[1 1;1 -1]

2×2 Array{Float64,2}:
0.707107 0.707107
0.707107 -0.707107

できました。2量子ビットゲートのCXは、

cx = [1 0 0 0;0 1 0 0;0 0 0 1;0 0 1 0]

4×4 Array{Int64,2}:
1 0 0 0
0 1 0 0
0 0 0 1
0 0 1 0

準備が整いました。

量子ゲートのテンソル積

今回は愚直に量子回路を計算します。まずは、同時に計算する量子ゲートのテンソル積を取ります。量子ゲートのないところには単位行列を採用します。

function svg(gates)
  sv = gates[1]
  for i=2:length(gates)
    sv = kron(sv,gates[i])
  end
  return sv
end

できました。早速Xゲートを片方にかけた回路のテンソル積を見てみましょう。

svg([i,x])

これは、

4×4 Array{Int64,2}:
0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0

こんな感じです。早速計算してみましょう。

計算

あとは状態ベクトルにゲートをかけるだけです。

svg([i,x,i])*svq(3)

8-element Array{Int64,1}:
0
0
1
0
0
0
0
0

あとは、

svg([h,i,i])*svq(3)

重ね合わせ回路です。

8-element Array{Float64,1}:
0.7071067811865475
0.0
0.0
0.0
0.7071067811865475
0.0
0.0
0.0

うまくできました。最後に量子回路を計算してみます。

量子もつれ

もつれ回路です。hの後にcxをかけます。

svg([cx])*svg([h,i])*svq(2)

こうすると、、、

4-element Array{Float64,1}:
0.7071067811865475
0.0
0.0
0.7071067811865475

綺麗にもつれましたね!以上です!

© 2025, blueqat Inc. All rights reserved