States
State vectors in QuantumOptics.jl are interpreted as coefficients in respect to a certain Basis
. For example the state $|\psi\rangle$ can be represented in the basis $\{|u_i\rangle\}_i$ as $\psi_i$. These quantities are connected by
\[|\psi\rangle = \sum_i \psi_i |u_i\rangle\]
and the conjugate equation
\[\langle\psi| = \sum_i \psi_i^* \langle u_i|.\]
The distinction between coefficients in respect to bra or ket states is strictly enforced which guarantees that algebraic mistakes raise an explicit error:
basis = FockBasis(2)
x = Ket(basis, [1,1,1]) # Not necessarily normalized
y = Bra(basis, [0,1,0])
# This throws an error:
# x + y
Bra(dim=3)
basis: Fock(cutoff=2)
0.0
1.0
0.0
Many of the commonly used states are already implemented in the specific quantum systems, e.g. spinup
for spins or coherentstate
for systems described by a fock basis. The basisstate
function is defined for every basis and is used to generate the i-th basis-state of this basis.
All expected arithmetic functions like *, /, +, -
are implemented:
x + x
x - x
2*x
y*x # Inner product
The hermitian conjugate is performed by the dagger
function which transforms a bra in a ket and vice versa:
dagger(x) # Bra(basis, [1,1,1])
Composite states can be created with the tensor
function or with the equivalent $\otimes$ operator:
tensor(x, x)
x ⊗ x
tensor(x, x, x)
When working with the .data
fields of composite states, please keep in mind the order of the data (see Operators
for details).
Alternatively, one can use the tensor function to create a density operator by combining a ket with a bra:
tensor(x, dagger(x))
The following functions are also available for states: