In [1]:
from sympy.physics.quantum import *
from sympy.physics.quantum.cartesian import *
from sympy.physics.quantum.operator import *
from sympy.physics.quantum.state import *
from sympy import *
from sympy.core.relational import *
from sympy.abc import a, b, x, y, z, t, alpha, n, theta, h, f, lamda, i, k, w, u, d, beta, r, psi, o, l, c, gamma
In [2]:
ketU = Ket(u)
ketD = Ket(d)
braU = Bra(u)
braD = Bra(d)
In [3]:
ketUExpanded = Matrix([[1],[0]])
display(ketUExpanded)
braUExpanded = conjugate(ketUExpanded.T)
display(braUExpanded)
In [4]:
ketDExpanded = Matrix([[0],[1]])
display(ketDExpanded)
braDExpanded = conjugate(ketDExpanded.T)
display(braDExpanded)
In [5]:
kettheta = Ket(theta)
display(kettheta)
bratheta = Bra(theta)
display(bratheta)
In [6]:
ketthetaExpanded = alpha * ketUExpanded + beta * ketDExpanded
display(ketthetaExpanded)
brathetaExpanded = conjugate(ketthetaExpanded.T)
display(brathetaExpanded)
In [7]:
valOfKettheta = Eq(kettheta,
Eq(ketthetaExpanded,
ketthetaExpanded[0] * ketU + ketthetaExpanded[1] * ketD,
evaluate = False),
evaluate = False)
display(valOfKettheta)
In [8]:
P_u, P_d = symbols('P_u P_d')
In [9]:
probU = Eq(P_u, ketthetaExpanded[0] * conjugate(ketthetaExpanded[0]))
display(probU)
In [10]:
probD = Eq(P_d, ketthetaExpanded[1] * conjugate(ketthetaExpanded[1]))
display(probD)
In [11]:
totalProb = Eq(ketthetaExpanded[0] * conjugate(ketthetaExpanded[0]) + ketthetaExpanded[1] * conjugate(ketthetaExpanded[1]), 1)
display(totalProb)
In [12]:
Mul(0, ketD, evaluate = False)
Out[12]:
In [13]:
valOfKettheta = Eq(kettheta,
ketthetaExpanded[0] * ketU + ketthetaExpanded[1] * ketD,
evaluate = False)
display(valOfKettheta)
In [14]:
valOfKetU = Eq(ketU,
Add(Mul(ketUExpanded[0], ketU, evaluate = False), Mul(ketUExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetU)
In [15]:
valOfKetD = Eq(ketD,
Add(Mul(ketDExpanded[0], ketU, evaluate = False), Mul(ketDExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetD)
In [16]:
ketR = Ket(r)
ketL = Ket(l)
braR = Bra(r)
braL = Bra(l)
In [17]:
ketRExpanded = Matrix([[1/sqrt(2)],[1/sqrt(2)]])
display(ketRExpanded)
braRExpanded = conjugate(ketRExpanded.T)
display(braRExpanded)
In [18]:
ketLExpanded = Matrix([[1/sqrt(2)],[-1/sqrt(2)]])
display(ketLExpanded)
braLExpanded = conjugate(ketLExpanded.T)
display(braLExpanded)
In [19]:
valOfKetR = Eq(ketR,
Add(Mul(ketRExpanded[0], ketU, evaluate = False), Mul(ketRExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetR)
In [20]:
i = symbols('I')
In [21]:
ketI = Ket(i)
ketO = Ket(o)
braI = Bra(i)
braO = Bra(o)
In [22]:
ketIExpanded = Matrix([[1/sqrt(2)],[I/sqrt(2)]])
display(ketIExpanded)
braIExpanded = conjugate(ketIExpanded.T)
display(braIExpanded)
In [23]:
ketOExpanded = Matrix([[1/sqrt(2)],[-I/sqrt(2)]])
display(ketOExpanded)
braOExpanded = conjugate(ketOExpanded.T)
display(braOExpanded)
In [24]:
valOfKetI = Eq(ketI,
Add(Mul(ketIExpanded[0], ketU, evaluate = False), Mul(ketIExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetI)
In [25]:
HPlus = HermitianOperator('H_+')
sigma_z = HermitianOperator('sigma_z')
In [26]:
HPlusExpanded = Matrix([[1, 0],[0, -1]])
display(HPlusExpanded)
In [27]:
hermitianOpForU_D = Eq(Eq(HPlus, HPlusExpanded, evaluate = False), sigma_z, evaluate = False)
display(hermitianOpForU_D)
In [28]:
HCross = HermitianOperator(r'H_\times')
sigma_x = HermitianOperator('sigma_x')
In [29]:
HCrossExpanded = Matrix([[0, 1],[1, 0]])
display(HCrossExpanded)
In [30]:
hermitianOpForR_L = Eq(Eq(HCross, HCrossExpanded, evaluate = False), sigma_x, evaluate = False)
display(hermitianOpForR_L)
In [31]:
HCircular = HermitianOperator(r'H_\circlearrowleft')
sigma_y = HermitianOperator('sigma_y')
In [32]:
HCircularExpanded = Matrix([[0, -I],[I, 0]])
display(HCircularExpanded)
In [33]:
hermitianOpForI_O = Eq(Eq(HCircular, HCircularExpanded, evaluate = False), sigma_y, evaluate = False)
display(hermitianOpForI_O)
In [34]:
ketPsi = Ket(psi)
braPsi = Bra(psi)
In [35]:
H = HermitianOperator('H')
In [36]:
prodOfH_ketPsi = Eq(H * ketPsi, lamda * ketPsi)
display(prodOfH_ketPsi)
In [37]:
innerprodOfR_U = Eq(Eq(Abs(InnerProduct(braR, ketU), evaluate = False)**2,
Abs(MatMul(braRExpanded, ketUExpanded), evaluate = False)**2,
evaluate = False),
(Abs(braRExpanded * ketUExpanded)**2).simplify(),
evaluate = False)
display(innerprodOfR_U)
In [38]:
innerprodOfI_L = Eq(Eq(Abs(InnerProduct(braI, ketL), evaluate = False)**2,
Abs(MatMul(braIExpanded, ketLExpanded), evaluate = False)**2,
evaluate = False),
(Abs(braIExpanded * ketLExpanded)**2).simplify(),
evaluate = False)
display(innerprodOfI_L)
In [39]:
prodOfH_ketPsi = Eq(H * ketPsi, lamda * ketPsi)
display(prodOfH_ketPsi)
In [40]:
valOfKetPsi = Eq(ketPsi, alpha * ketU + beta * ketD)
display(valOfKetPsi)
In [41]:
probU = Eq(P_u, cos(theta)**2, evaluate = False)
display(probU)
In [42]:
P_uAmp = symbols('P_uAmp')
In [43]:
probAmpU = Eq(P_uAmp, cos(theta), evaluate = False)
display(probAmpU)
In [44]:
probU = Eq(P_u, cos(theta/2)**2, evaluate = False)
display(probU)
In [45]:
probAmpU = Eq(P_uAmp, cos(theta/2), evaluate = False)
display(probAmpU)
In [46]:
valOfKetTheta = Eq(kettheta, cos(theta/2) * ketU + sin(theta/2) * ketD)
display(valOfKetTheta)
In [47]:
valOfKetU = Eq(ketU,
Add(Mul(ketUExpanded[0], ketU, evaluate = False), Mul(ketUExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetU)
In [48]:
valOfKetD = Eq(ketD,
Add(Mul(ketDExpanded[0], ketU, evaluate = False), Mul(ketDExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetD)
In [49]:
valOfKetR = Eq(ketR,
Add(Mul(ketRExpanded[0], ketU, evaluate = False), Mul(ketRExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetR)
In [50]:
valOfKetL = Eq(ketL,
Add(Mul(ketLExpanded[0], ketU, evaluate = False), Mul(ketLExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetL)
In [51]:
valOfKetI = Eq(ketI,
Add(Mul(ketIExpanded[0], ketU, evaluate = False), Mul(ketIExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetI)
In [52]:
valOfKetO = Eq(ketO,
Add(Mul(ketOExpanded[0], ketU, evaluate = False), Mul(ketOExpanded[1], ketD, evaluate = False), evaluate = False),
evaluate = False)
display(valOfKetO)
In [53]:
addOfR_L = Eq((ketR + ketL)/sqrt(2), ketU)
display(addOfR_L)
In [54]:
sigma_zExpanded = Matrix([[a, b],[c, d]])
display(sigma_zExpanded)
In [55]:
valOfSigma_z = Eq(sigma_z, sigma_zExpanded, evaluate = False)
display(valOfSigma_z)
In [56]:
prodOfSigma_z_ketU = Eq(Eq(sigma_z * ketU,
MatMul(sigma_zExpanded,
ketUExpanded),
evaluate = False),
1 * ketUExpanded,
evaluate = False)
display(prodOfSigma_z_ketU)
In [57]:
prodOfSigma_z_ketD = Eq(Eq(sigma_z * ketD,
MatMul(sigma_zExpanded,
ketDExpanded),
evaluate = False),
-1 * ketDExpanded,
evaluate = False)
display(prodOfSigma_z_ketD)
In [58]:
t1 = Eq(MatMul(sigma_zExpanded, ketUExpanded), 1 * ketUExpanded, evaluate = False)
t2 = Eq(MatMul(sigma_zExpanded, ketDExpanded), -1 * ketDExpanded, evaluate = False)
solveForValues = solve((t1, t2), a, b, c, d)
display(solveForValues)
In [59]:
sigma_zExpanded = sigma_zExpanded.subs(a, solveForValues[a])\
.subs(b, solveForValues[b])\
.subs(c, solveForValues[c])\
.subs(d, solveForValues[d])
display(sigma_zExpanded)
In [60]:
sigma_xExpanded = Matrix([[a, b],[c, d]])
display(sigma_xExpanded)
In [61]:
valOfSigma_x = Eq(sigma_x, sigma_xExpanded, evaluate = False)
display(valOfSigma_x)
In [62]:
prodOfSigma_x_ketR = Eq(Eq(sigma_x * ketR,
MatMul(sigma_xExpanded,
ketRExpanded),
evaluate = False),
1 * ketRExpanded,
evaluate = False)
display(prodOfSigma_x_ketR)
In [63]:
prodOfSigma_x_ketL = Eq(Eq(sigma_x * ketL,
MatMul(sigma_xExpanded,
ketLExpanded),
evaluate = False),
-1 * ketLExpanded,
evaluate = False)
display(prodOfSigma_x_ketL)
In [64]:
t1 = Eq(MatMul(sigma_xExpanded, ketRExpanded), 1 * ketRExpanded, evaluate = False)
t2 = Eq(MatMul(sigma_xExpanded, ketLExpanded), -1 * ketLExpanded, evaluate = False)
solveForValues = solve((t1, t2), a, b, c, d)
display(solveForValues)
In [65]:
sigma_xExpanded = sigma_xExpanded.subs(a, solveForValues[a])\
.subs(b, solveForValues[b])\
.subs(c, solveForValues[c])\
.subs(d, solveForValues[d])
display(sigma_xExpanded)
In [66]:
sigma_yExpanded = Matrix([[a, b],[c, d]])
display(sigma_yExpanded)
In [67]:
valOfSigma_y = Eq(sigma_y, sigma_yExpanded, evaluate = False)
display(valOfSigma_y)
In [68]:
prodOfSigma_y_ketI = Eq(Eq(sigma_y * ketI,
MatMul(sigma_yExpanded,
ketIExpanded),
evaluate = False),
1 * ketIExpanded,
evaluate = False)
display(prodOfSigma_y_ketI)
In [69]:
prodOfSigma_y_ketO = Eq(Eq(sigma_y * ketO,
MatMul(sigma_yExpanded,
ketOExpanded),
evaluate = False),
-1 * ketOExpanded,
evaluate = False)
display(prodOfSigma_y_ketO)
In [70]:
t1 = Eq(MatMul(sigma_yExpanded, ketIExpanded), 1 * ketIExpanded, evaluate = False)
t2 = Eq(MatMul(sigma_yExpanded, ketOExpanded), -1 * ketOExpanded, evaluate = False)
solveForValues = solve((t1, t2), a, b, c, d)
display(solveForValues)
In [71]:
sigma_yExpanded = sigma_yExpanded.subs(a, solveForValues[a])\
.subs(b, solveForValues[b])\
.subs(c, solveForValues[c])\
.subs(d, solveForValues[d])
display(sigma_yExpanded)
In [72]:
n_x, n_y, n_z = symbols('n_x n_y n_z', integer = True)
display(n_x, n_y, n_z)
In [73]:
vecLength = Eq(n_x**2 + n_y**2 + n_z**2, 1)
display(vecLength)
In [74]:
sigma_n = HermitianOperator('sigma_n')
In [75]:
sigma_nExpanded = Matrix(Add(MatMul(n_x,
sigma_xExpanded,
evaluate = False),
MatMul(n_y,
sigma_yExpanded,
evaluate = False),
MatMul(n_z,
sigma_zExpanded,
evaluate = False),
evaluate = False))
display(sigma_nExpanded)
In [76]:
linearEq = Eq(n_x*sigma_x + n_y*sigma_y + n_z*sigma_z, sigma_n)
display(linearEq)
In [77]:
valOfSigma_n = Eq(sigma_n,
Add(MatMul(n_x,
sigma_xExpanded,
evaluate = False),
MatMul(n_y,
sigma_yExpanded,
evaluate = False),
MatMul(n_z,
sigma_zExpanded,
evaluate = False),
evaluate = False),
evaluate = False)
display(valOfSigma_n)
In [78]:
ketPsiExpanded = Matrix([[alpha],[beta]], evaluate = False)
display(ketPsiExpanded)
In [79]:
prodOfSigma_n_KetPsiExpanded = Eq(MatMul(Dummy('sigma_n'),
ketPsiExpanded,
evaluate = False),
MatMul(lamda,
ketPsiExpanded,
evaluate = False),
evaluate = False)
display(prodOfSigma_n_KetPsiExpanded)
In [80]:
valOfLambda = Eq(lamda, 1)
display(valOfLambda)
In [81]:
ketPsiExpanded = Matrix([[1],[gamma]])
In [82]:
prodOfSigma_nExpanded_KetPsiExpanded = Eq((sigma_nExpanded *
ketPsiExpanded),
MatMul(1,
ketPsiExpanded,
evaluate = False),
evaluate = False)
display(prodOfSigma_nExpanded_KetPsiExpanded)
In [83]:
solveForGamma = solve(Eq(prodOfSigma_nExpanded_KetPsiExpanded.lhs[0],
prodOfSigma_nExpanded_KetPsiExpanded.rhs.simplify()[0, 0]),
gamma)[0]
display(solveForGamma)
In [84]:
display(ketPsiExpanded.subs(gamma, solveForGamma))
In [85]:
braPsiExpanded = conjugate(ketPsiExpanded.T)
In [86]:
valOfKetPsi = Eq(ketPsi, ketPsiExpanded, evaluate = False)
display(valOfKetPsi)
In [87]:
InnerproductOfPsi_Psi = Eq(InnerProduct(braPsi, ketPsi), 1)
display(InnerproductOfPsi_Psi)
In [88]:
InnerproductOfPsiExpanded_PsiExpanded = Eq(MatMul(braPsiExpanded, ketPsiExpanded), 1, evaluate = False)
display(InnerproductOfPsiExpanded_PsiExpanded)
In [89]:
valOfKetPsi = Eq(ketPsi, MatMul(alpha, ketPsiExpanded), evaluate = False)
display(valOfKetPsi)
In [90]:
InnerproductOfPsi_Psi = Eq(InnerProduct(braPsi, ketPsi), 1)
display(InnerproductOfPsi_Psi)
In [91]:
InnerproductOfPsiExpanded_PsiExpanded = Eq(Mul(alpha**2,
MatMul(braPsiExpanded,
ketPsiExpanded,
evaluate = False),
evaluate = False),
1,
evaluate = False)
display(InnerproductOfPsiExpanded_PsiExpanded)
In [92]:
InnerproductOfPsiExpanded_PsiExpanded = Eq(Mul(alpha**2,
MatMul(braPsiExpanded,
ketPsiExpanded,
evaluate = False).subs(gamma,
solveForGamma),
evaluate = False).subs((n_x - I*n_y)*(n_x + I*n_y),
((n_x - I*n_y)*(n_x + I*n_y)).expand()),
1,
evaluate = False)
display(InnerproductOfPsiExpanded_PsiExpanded)
In [93]:
InnerproductOfPsiExpanded_PsiExpanded = Eq(Mul(alpha**2,
MatMul(braPsiExpanded,
ketPsiExpanded,
evaluate = False).subs(gamma,
solveForGamma),
evaluate = False).subs((n_x - I*n_y)*(n_x + I*n_y),
1 - n_z**2),
1,
evaluate = False)
display(InnerproductOfPsiExpanded_PsiExpanded)
In [94]:
InnerproductOfPsiExpanded_PsiExpanded = Eq(Mul(alpha**2,
MatMul(braPsiExpanded,
ketPsiExpanded,
evaluate = False).subs(gamma,
solveForGamma),
evaluate = False).subs((n_x - I*n_y)*(n_x + I*n_y),
1 - n_z**2).simplify(),
1,
evaluate = False)
display(InnerproductOfPsiExpanded_PsiExpanded)
In [95]:
solveOfAlpha = Eq(alpha, sqrt((1 + n_z)/2))
display(solveOfAlpha)
In [96]:
valOfKetPsi = Eq(ketPsi, MatMul(solveOfAlpha.rhs, ketPsiExpanded.subs(gamma, solveForGamma)), evaluate = False)
display(valOfKetPsi)
In [ ]: