Skip to content

Functions operating on Qobj

QuantumToolbox also provide functions (methods) that operates on QuantumObject.

You can click the function links and see the corresponding docstring for more information.

Linear algebra and attributes

Here is a table that summarizes all the supported linear algebra functions and attribute functions operating on a given QuantumObject Q:

DescriptionFunction callSynonyms
zero-like arrayzero(Q)-
identity-like matrixone(Q)-
conjugateconj(Q)-
transposetranspose(Q)trans(Q)
conjugate transpositionadjoint(Q)Q', dag(Q)
partial transposepartial_transpose(Q, mask)-
dot productdot(Q1, Q2)-
generalized dot productdot(Q1, Q2, Q3)matrix_element(Q1, Q2, Q3)
tracetr(Q)-
partial traceptrace(Q, sel)-
singular valuessvdvals(Q)-
standard vector p-norm or Schatten p-normnorm(Q, p)-
normalizationnormalize(Q, p)unit(Q, p)
normalization (in-place)normalize!(Q, p)-
matrix inverseinv(Q)-
matrix square rootsqrt(Q)√(Q), sqrtm(Q)
matrix logarithmlog(Q)logm(Q)
matrix exponentialexp(Q)expm(Q)
matrix sinesin(Q)sinm(Q)
matrix cosinecos(Q)cosm(Q)
diagonal elementsdiag(Q)-
projectorproj(Q)-
puritypurity(Q)-
permutepermute(Q, order)-
remove small elementstidyup(Q, tol)-
remove small elements (in-place)tidyup!(Q, tol)-
get dataget_data(Q)-
get coherenceget_coherence(Q)-

Eigenvalue decomposition

Examples

julia
ψ = normalize(basis(4, 1) + basis(4, 2))

Quantum Object:   type=Ket   dims=[4]   size=(4,)
4-element Vector{ComplexF64}:
                0.0 + 0.0im
 0.7071067811865475 + 0.0im
 0.7071067811865475 + 0.0im
                0.0 + 0.0im
julia
ψ'

Quantum Object:   type=Bra   dims=[4]   size=(1, 4)
1×4 adjoint(::Vector{ComplexF64}) with eltype ComplexF64:
 0.0-0.0im  0.707107-0.0im  0.707107-0.0im  0.0-0.0im
julia
ρ = coherent_dm(5, 1)

Quantum Object:   type=Operator   dims=[5]   size=(5, 5)   ishermitian=true
5×5 Matrix{ComplexF64}:
 0.367911+0.0im   0.367744+0.0im  …  0.146207+0.0im   0.088267+0.0im
 0.367744+0.0im   0.367577+0.0im      0.14614+0.0im  0.0882269+0.0im
 0.261054+0.0im   0.260936+0.0im     0.103742+0.0im  0.0626306+0.0im
 0.146207+0.0im    0.14614+0.0im     0.058102+0.0im   0.035077+0.0im
 0.088267+0.0im  0.0882269+0.0im     0.035077+0.0im  0.0211765+0.0im
julia
diag(ρ)
5-element Vector{ComplexF64}:
   0.3679111729923387 + 0.0im
   0.3675770456232403 + 0.0im
  0.18523331233838003 + 0.0im
  0.05810197190350208 + 0.0im
 0.021176497142538265 + 0.0im
julia
get_data(ρ)
5×5 Matrix{ComplexF64}:
 0.367911+0.0im   0.367744+0.0im  …  0.146207+0.0im   0.088267+0.0im
 0.367744+0.0im   0.367577+0.0im      0.14614+0.0im  0.0882269+0.0im
 0.261054+0.0im   0.260936+0.0im     0.103742+0.0im  0.0626306+0.0im
 0.146207+0.0im    0.14614+0.0im     0.058102+0.0im   0.035077+0.0im
 0.088267+0.0im  0.0882269+0.0im     0.035077+0.0im  0.0211765+0.0im
julia
norm(ρ)
0.9999999999999996
julia
sqrtm(ρ)

Quantum Object:   type=Operator   dims=[5]   size=(5, 5)   ishermitian=true
5×5 Matrix{ComplexF64}:
 0.367911+0.0im   0.367744+0.0im  …  0.146207+0.0im   0.088267+0.0im
 0.367744-0.0im   0.367577+0.0im      0.14614+0.0im  0.0882269+0.0im
 0.261054-0.0im   0.260936-0.0im     0.103742+0.0im  0.0626306+0.0im
 0.146207-0.0im    0.14614-0.0im     0.058102+0.0im   0.035077+0.0im
 0.088267-0.0im  0.0882269-0.0im     0.035077-0.0im  0.0211765+0.0im
julia
tr(ρ)
0.9999999999999993 + 0.0im
julia
eigenenergies(ρ)
5-element Vector{Float64}:
 -3.188562758433179e-17
 -7.70881124130806e-18
  2.0684351320241445e-17
  1.0235138990670176e-16
  0.9999999999999996
julia
result = eigenstates(ρ)
EigsolveResult:   type=Operator   dims=[5]
values:
5-element Vector{ComplexF64}:
 -2.8177392874225097e-17 + 0.0im
   3.416070845000482e-17 + 0.0im
   7.728341127110703e-17 + 0.0im
   8.881784197001252e-16 + 0.0im
      0.9999999999999994 + 0.0im
vectors:
5×5 Matrix{ComplexF64}:
  0.349081+0.0im   0.699533+0.0im  …  -0.0892167+0.0im  -0.606557+0.0im
 -0.698381+0.0im  -0.132457+0.0im     -0.0891762+0.0im  -0.606281+0.0im
  0.596321+0.0im  -0.648729+0.0im     -0.0633045+0.0im  -0.430387+0.0im
 -0.186568+0.0im  -0.268811+0.0im     -0.0354544+0.0im  -0.241044+0.0im
       0.0+0.0im        0.0+0.0im       0.989355+0.0im  -0.145521-0.0im
julia
λ, ψ = result
λ # eigenvalues
5-element Vector{ComplexF64}:
 -2.8177392874225097e-17 + 0.0im
   3.416070845000482e-17 + 0.0im
   7.728341127110703e-17 + 0.0im
   8.881784197001252e-16 + 0.0im
      0.9999999999999994 + 0.0im
julia
ψ # eigenvectors
5-element Vector{QuantumObject{KetQuantumObject, Dimensions{1, Tuple{Space}}, Vector{ComplexF64}}}:
 
Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  0.34908090726365426 + 0.0im
  -0.6983812275352181 + 0.0im
   0.5963209517322131 + 0.0im
 -0.18656769210014237 + 0.0im
                  0.0 + 0.0im
 
Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  0.6995328227558701 + 0.0im
 -0.1324572834510804 + 0.0im
 -0.6487290623177562 + 0.0im
 -0.2688112751584079 + 0.0im
                 0.0 + 0.0im
 
Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  0.11369058957774669 + 0.0im
 -0.34523801249281383 + 0.0im
 -0.18523271117272722 + 0.0im
   0.9130027422100534 + 0.0im
                  0.0 + 0.0im
 
Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  -0.08921674125585327 + 0.0im
   -0.0891762198903574 + 0.0im
  -0.06330447537681073 + 0.0im
 -0.035454413343867425 + 0.0im
    0.9893550944213416 + 0.0im
 
Quantum Object:   type=Ket   dims=[5]   size=(5,)
5-element Vector{ComplexF64}:
  -0.6065568176126116 + 0.0im
   -0.606281325477901 + 0.0im
 -0.43038739797812414 + 0.0im
 -0.24104350624628368 + 0.0im
 -0.14552146626026788 - 0.0im
julia
λ, ψ, T = result
T # transformation matrix
5×5 Matrix{ComplexF64}:
  0.349081+0.0im   0.699533+0.0im  …  -0.0892167+0.0im  -0.606557+0.0im
 -0.698381+0.0im  -0.132457+0.0im     -0.0891762+0.0im  -0.606281+0.0im
  0.596321+0.0im  -0.648729+0.0im     -0.0633045+0.0im  -0.430387+0.0im
 -0.186568+0.0im  -0.268811+0.0im     -0.0354544+0.0im  -0.241044+0.0im
       0.0+0.0im        0.0+0.0im       0.989355+0.0im  -0.145521-0.0im