ブロッホ球
グローバル位相を除いた状態ベクトルを
で表される。
それぞれの成分は
状態ベクトルとブロッホベクトルの間の変換:
import numpy as np
I = np.array([
[1, 0],
[0, 1]
])
X = np.array([
[0, 1],
[1, 0]
])
Y = np.array([
[0, -1.j],
[1.j, 0]
])
Z = np.array([
[1, 0],
[0, -1]
])
def density_matrix(state):
if len(state.shape) == 1:
state = state.reshape(-1, 1)
return state * np.conjugate(state.T)
def state2bloch(state):
rho = density_matrix(state)
x, y, z = np.trace(X @ rho), np.trace(Y @ rho), np.trace(Z @ rho)
return np.real(np.array([x, y, z]))
def bloch2state(vec, epsilon = 1e-10):
x, y, z = np.real(vec)
cos = np.sqrt((1 + z)/2)
if z > 1 - epsilon: # theta = 0
return np.array([1, 0])
elif z < -1 + epsilon: # theta = pi
return np.array([0, 1])
else:
sin = np.sqrt(x**2 + y**2) / (2*cos)
if x < 0:
sin = -sin
if abs(x) < epsilon: # phi = pi/2, 3pi/2
if y >= 0:
phi = np.pi/2
else:
phi = 3 * np.pi/2
else:
phi = np.arctan(y/x)
return np.array([cos, np.exp(1.j*phi)*sin])
を
R_X(\lambda)
とする。
x 成分の計算
となる。よって、X 軸方向の成分は変化しない。
y 成分と z 成分の計算
よって、
となっている。つまり YZ 平面内で角度
Bloch 球
パッチ
Bloch ベクトルに対応する状態ベクトルに回転ゲートを適用すると、Bloch 球上の XY, YZ, ZX 平面での回転が発生するが、これは、パッチ