Learning Quantum Mechanics by Python — 2. Measurement and Bloch Sphere

신소영(Sophy)
7 min readAug 1, 2020

--

양자역학과 관련된 글들은 졸음을 유발하므로 5분안에 읽을 수 있는 길이를 지향합니다.

세상은 넓고 대가는 많으므로 저는 최대한 실습과 눈에 보이는 것 위주의 개념 설명에 집중하고자 합니다

측정 (Measurement)

양자 세계와 고전 세계의 아주 큰 차이점 중 하나는 “측정”이 시스템에 미치는 영향입니다.

고전 세계에서는 우리가 날아가는 공을 보는 것이 공에 아무 영향을 미치지 않습니다. 즉 측정 그 자체는 방정식이나 어떤 규칙으로 작용하지 않습니다. (우리가 공에 부딪혀 날아오는 광자를 눈으로 보는 것을 우리는 “본다"라고 합니다. “본다"는 측정에 우리는 공에 광자를 부딪히게 하는 방식을 사용합니다. 광자는 야구공에 비해 크기도, 질량도 아주 작기때문에 광자가 아무리 열심히 공에 부딪혀도 야구공의 경로는 바뀌지 않습니다. 즉 우리의 측정내지 관찰은 공의 운동 방정식에 아무런 영향을 미치지 않습니다)

하지만 양자 세계에서는 우리가 관측하고자 하는 대상과 그 대상을 관측하기 위해 사용해야 하는 것이 서로 간섭을 일으키게 되어 있기때문에 (예를들면 야구공이 광자의 크기가 되는 것입니다!! 광자로 야구공을 보려고 야구공과 광자가 부딪히면! 당구공끼리 부딪히는 것과 유사하게 야구공의 경로가 바뀌게 됩니다) 측정 그 자체도 함수나 방정식과 같은 세계의 규칙으로 정의해야 하는 필요가 생기게 됩니다.

때문에 양자세계에서 우리는 측정하고자 하는 물리량을 “연산자”로 정의합니다. 위치, 운동량등 우리가 당연히 관측할 수 있다고 여겼던 물리량은 양자 세계에서 각각 위치 연산자, 운동량 연산자 등이 각각 정의되며 이 것들은 이 양자세계의 일종의 법칙같이 존재합니다.

정리하면 양자세계에서 “상태벡터”는 모든 정보를 담고 있고 그 안에서 우리가 측정하고자 하는 양을 뽑아내야 합니다.

그렇다면 큐빗이 속한 세상에서의 측정은 무엇이 될까요? 우선 상태 벡터가 0 또는 1의 값으로 결정될 “확률”을 측정할 수 있습니다. 그리고 당연히! 큐빗이 0 또는 1로 결정되도록 큐빗의 “값”을 측정할 수 도 있습니다.

큐빗의 상태벡터에서 기저 벡터로 측정될 확률을 구하는 수학적인 식은 참고로 다음과 같습니다. 보시다 보면 갑자기 <0|, <1| 이렇게 생긴 애들이 나오는데 얘들 이름은 Bra 이고 결레복소수같이 Ket의 짝꿍입니다. 여기서는 그냥 ket 모양의 상태벡터에 기저벡터를 곱할땐 기저 벡터를 Bra 벡터로 바꿔서 쓴다고 이해하고 넘어가시길 추천합니다. 자세한 내용은 요기를 참고하세요

머리아픈 식 봤으니 우리는 Qiskit으로 눈으로 확인해 보도록 하겠습니다.

큐빗이 0이나 1로 측정될 확률은 큐빗을 생성한 후 state vector를 바로 계산하여 구현합니다.

위의 간단한 코드는 1큐빗으로 구성된 양자회로를 예제 상태벡터값으로 초기화 하여 기저벡터 값으로 측정될 확률을 출력하는 아주 간단한 코드입니다. 이 경우는 0과 1로 측정될 확률이 각각 0.5와 0.5로 동일합니다.

자 이 코드의 양자회로에 측정을 진행해 보겠습니다.

7번째 줄에 measure_all()함수가 추가 되었네요. 이제 이 코드를 실행시키면 여러분은 계속 출력값이 변하는 것을 볼 수 있습니다.

저는 앞의 포스트에서 양자 회로를 계산한 결과에서 get_count라는 명령어를 사용했었습니다. 확률을 측정하는 코드에서 이 get_count를 사용하면 계산결과를 누적하여 0과 1에 0.5의 값이 있는

이런 그래프가 그려집니다. 그렇다면 측정을 진행한 회로의 get_count는 어떤 그래프를 보여주냐구요?

이렇게 둘중에 하나가 나오게 됩니다. 계산을 반복할 수록 0에 1의 확률인 그래프, 또는 1에 1의 확률인 그래프가 보여집니다.

예제 1. 주어진 양자회로를 측정하는 것을 100번 반복하여 측정 결과를 연속해서 기록해 그래프를 그려봅시다.

정답은 여기입니다.

블로흐 구면(Bloch Sphere)

우리는 앞서 큐빗이 0또는 1로 측정될 확률과 실제 측정 결과를 확인해 보았습니다. 또한 더욱 앞서 우리는 큐빗이 힐버트 공간에 존재하는 상태 벡터로 표현될 수 있음도 보았습니다.

자. 이 힐버트 공간에 상태벡터가 있는 “모습"을 우리는 볼수 있을까요? 아쉽게도 xy 좌표에 함수 그림을 그리듯, 우리가 상태벡터를 볼수 있는 방법은 없습니다. 하지만 우리는 상상력에 한계가 있는 사람들이쟎아요? 상태 벡터를 좀 눈으로 보고 이해하는 방법은 없을까요?

있습니다! 바로 블로흐 구면이지요. 블로흐 구면은 공의 남극을 |1>에, 공의 북극을 |0>에 지정하고 상태벡터가 갖는 기저값을, 각각

로 변환하면 반지름의 크기가 1인 원의 중심에서 원의 표면으로 향하는 크기 1의 벡터들로 구성되는 동그란 원이 그려지게 됩니다.

이렇게요. 참고로 Qiskit에서는 이렇게 벡터가 없는 형태의 블로흐 구면은 그릴수 없습니다. 이 이미지는 Qutip이라는 라이브러리를 사용했습니다.

참고로 벡터 공간에서 크기 1인 벡터를 unit vector라고 부릅니다. 이 블로흐 구면에서 큐빗의 상태 벡터는 unit vector이네요.

자 그럼 이제 우리가 지금까지 열심히 계산해 보았던 상태벡터를 블로흐 구면에 한번 그려봐야 겠죠? 예상하신대로 예제입니다!

예제2번 주어진 양자회로를 각각 측정전, 측정후 블로흐 구면에 그려봅시다.

정답은 여기입니다. 이번 예제들도 공식 튜토리얼과 다른 방향으로 작성되었습니다. 비교하며 보시면 공부에 도움이 됩니다!

다음 글에서는 얽힘에 대해서 이야기 하기 위해 여러개의 큐빗으로 구성된 양자회로에 대해서 공부해 보도록 하겠습니다.

Unlisted

--

--

신소영(Sophy)

Sophy, full of curiosity. Two human sons, a dog and cat daughters, and an android developer husband. Love to teach and learn.