치트시트

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 = 항등 게이트 (아무 동작도 수행하지 않음)

회전 게이트는 두 개의 인수를 받는 단일 큐비트 게이트입니다. 첫 번째 인수는 게이트를 적용할 큐비트의 인덱스이고, 두 번째 인수는 라디안 단위의 회전 각도 또는 위상(θ)입니다.

파라미터화된 단일 큐비트 게이트

설명

rxGate(1,pi/2)

rxGate = x축 회전 게이트

ryGate(1,pi/2)

ryGate = y축 회전 게이트

rzGate(1,pi/2)

rzGate = z축 회전 게이트

r1Gate(1,pi/2)

r1Gate = 전역 위상을 포함하는 z축 회전 게이트

제어 큐비트가 하나인 게이트

제어 큐비트가 하나인 게이트를 양자 회로에 적용합니다. 이러한 게이트는 괄호 () 안에 두 개의 인수를 가지며, 첫 번째 인수는 제어 큐비트이고 두 번째 인수는 대상 큐비트입니다. 제어 큐비트가 |0> 상태이면 게이트는 아무 동작도 수행하지 않습니다. 제어 큐비트가 |1> 상태이면 지정된 게이트가 대상 큐비트에 적용됩니다. >> cxGate(control,target)

두 큐비트에 적용된 제어 X 게이트로 구성된 양자 회로의 플롯

큐비트 인덱스 1: 제어 큐비트
큐비트 인덱스 2: 대상 큐비트

제어 회전 게이트는 세 개의 인수를 받는 2-큐비트 게이트입니다. 첫 번째 인수는 제어 큐비트이고 두 번째 인수는 대상 큐비트이며 세 번째 인수는 라디안 단위의 회전 각도 또는 위상(θ)입니다.

2-큐비트 게이트

설명

cxGate(1,2)

cxGate 또는 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 또는 토폴리 게이트)

mcxGate(1:3,4,5)

다중 제어 X 게이트

첫 번째 인수는 세 개의 제어 큐비트(1,2,3)이고, 두 번째 인수는 하나의 대상 큐비트(4)이며, 세 번째 인수는 하나의 보조 큐비트(5)입니다. 이 게이트는 제어 큐비트들의 상태에 따라 단일 대상 큐비트에 작용하며, 보조 큐비트의 수에 따라 필요한 단순 게이트 수가 결정됩니다.

qftGate(1:3)

QFT(양자 푸리에 변환) 게이트

아래 게이트들에서 인수가 두 개인 swapGate를 제외하고 첫 번째 및 두 번째 인수는 큐비트 인덱스이고 세 번째 인수는 위상(θ)입니다. 아래 게이트들은 두 대상 큐비트의 순서를 서로 바꾸어도 게이트 연산이 달라지지 않습니다.

게이트

설명

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> 상태로, 두 번째 큐비트를 |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
임의의 샷(Shot) 수를 사용하여 양자 상태를 무작위 샘플링

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=QuantumDeviceAWS("SV1", Region=reg, S3Path=bucketPath)

디바이스 이름, 리전 및 결과 저장용 S3 버킷 경로를 지정해 Amazon Braket 디바이스에 연결

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

디바이스 이름 및 계정 자격 증명을 지정해 IBM Quantum 디바이스에 연결

fetchDetails(device)

디바이스에 대한 추가 정보 가져오기

task=run(circuit, dev);

디바이스에서 회로를 실행하기 위한 작업 생성

wait(task)

작업 상태 확인

meas=fetchOutput(task);

회로 실행 결과 가져오기

>> 시각화

|0> 상태의 행렬 표현은

[1;0]입니다. >> plotBlochSphere([1;0])

>> plot(qftGate(1:3))

>> histogram(states)

>> GitHub 예제