User:Sueco Viejo/sandbox
Appearance
Galileo prime number gravity stuff
[edit]
Drafts
[edit]QuTip
[edit]History
[edit]The idea for the QuTip project was conceived in 2010 by PhD student Paul Nation, who decided to create a python package similar to the quantum optics toolbox for MATLAB. As a postdoctoral fellow, at the RIKEN Institute in Japan, he met Robert Johansson and the two worked together on the package[1]. In contrast to its predecessor qotoolbox, which relies on the proprietary MATLAB environment, it was published under an open source license and is continually updated by a large community of contributors.
Examples
[edit]Creating quantum objects
[edit]>>> import qutip
>>> import numpy as np
>>> psi=qutip.Qobj([[0.6],[0.8]]) # create quantum state from a list
>>> psi
Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
Qobj data =
[[0.6]
[0.8]]
>>> phi=qutip.Qobj(np.array([0.8,-0.6])) # create quantum state from a numpy-array
>>> phi
Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
Qobj data =
[[ 0.8]
[-0.6]]
>>> e0=qutip.basis(2,0) # create a basis vector
>>> e0
Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
Qobj data =
[[1.]
[0.]]
>>> A=qutip.Qobj(np.array([[1,2j],[-2j,1]])) # create quantum operator from numpy array
>>> A
Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True
Qobj data =
[[1.+0.j 0.+2.j]
[0.-2.j 1.+0.j]]
>>> qutip.sigmay() # some common quantum objects, like pauli matrices, are predefined in the qutip package
Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True
Qobj data =
[[0.+0.j 0.-1.j]
[0.+1.j 0.+0.j]]
Basic operations
[edit]>>> A*qutip.sigmax()+qutip.sigmay() # we can add and multiply quantum objects of compatible shape and dimension
Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = False
Qobj data =
[[0.+2.j 1.-1.j]
[1.+1.j 0.-2.j]]
>>> psi.dag() # hermitian conjugate
Quantum object: dims = [[1], [2]], shape = (1, 2), type = bra
Qobj data =
[[0.6 0.8]]
>>> psi.proj() # projector onto a quantum state
Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = True
Qobj data =
[[0.36 0.48]
[0.48 0.64]]
>>> A.tr() # trace of operator
2.0
>>> A.eigenstates() # diagonalize an operator
(array([-1., 3.]), array([Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
Qobj data =
[[-0.70710678+0.j ]
[ 0. -0.70710678j]] ,
Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
Qobj data =
[[-0.70710678+0.j ]
[ 0. +0.70710678j]] ],
dtype=object))
>>> (1j*A).expm() # matrix exponential of an operator
Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = False
Qobj data =
[[-0.2248451-0.35017549j -0.4912955-0.7651474j ]
[ 0.4912955+0.7651474j -0.2248451-0.35017549j]]
>>> qutip.tensor(qutip.sigmaz(),qutip.sigmay()) # tensor product
Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = True
Qobj data =
[[0.+0.j 0.-1.j 0.+0.j 0.+0.j]
[0.+1.j 0.+0.j 0.+0.j 0.+0.j]
[0.+0.j 0.+0.j 0.+0.j 0.+1.j]
[0.+0.j 0.+0.j 0.-1.j 0.+0.j]]
Time evolution
[edit]>>> Hamiltonian=qutip.sigmay()
>>> times=np.linspace(0,2,10)
>>> result=qutip.sesolve(Hamiltonian,psi,times,[psi.proj(),phi.proj()]) # unitary time evolution of a system according to schroedinger equation
>>> expectpsi,expectphi=result.expect # expectation values of projectors onto psi and phi
>>> plt.figure(dpi=200)
>>> plt.plot(times,expectpsi)
>>> plt.plot(times,expectphi)
>>> plt.legend([r"$\psi$",r"$\phi$"])
>>> plt.show()
Simulating a non-unitary time evolution according to the Lindblad Master Equation is possible with the qutip.mesolve
function [2]
References
[edit]- ^ Tobias Macey (24 September 2017). "QuTiP with Paul Nation - Episode 128" (Podcast). Podcast.__init__. Event occurs at 6:15. Retrieved 10 August 2022.
- ^ "Lindblad Master Equation Solver". Retrieved 2022-07-24.