Brief Example
We now provide a brief example to demonstrate the similarity between QuantumToolbox.jl and QuTiP.
Let's consider a quantum harmonic oscillator with a Hamiltonian given by:
where
using QuantumToolbox
N = 20 # cutoff of the Hilbert space dimension
ω = 1.0 # frequency of the harmonic oscillator
a = destroy(N) # annihilation operator
H = ω * a' * a
We now introduce some losses in a thermal environment, described by the Lindblad master equation:
where
We now compute the time evolution of the system using the mesolve
function, starting from the initial state
γ = 0.1 # damping rate
ψ0 = fock(N, 3) # initial state
tlist = range(0, 10, 100) # time list
c_ops = [sqrt(γ) * a]
e_ops = [a' * a]
sol = mesolve(H, ψ0, tlist, c_ops, e_ops = e_ops)
We can extract the expectation value of the number operator sol.expect
, and the states with the command sol.states
.
Support for GPU calculation
We can easily pass the computation to the GPU, by simply passing all the Qobj
s to the GPU:
using QuantumToolbox
using CUDA
CUDA.allowscalar(false) # Avoid unexpected scalar indexing
a_gpu = cu(destroy(N)) # The only difference in the code is the cu() function
H_gpu = ω * a_gpu' * a_gpu
ψ0_gpu = cu(fock(N, 3))
c_ops = [sqrt(γ) * a_gpu]
e_ops = [a_gpu' * a_gpu]
sol = mesolve(H_gpu, ψ0_gpu, tlist, c_ops, e_ops = e_ops)