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:
| Description | Function call | Synonyms |
|---|---|---|
| zero-like array | zero(Q) | qzero_like(Q) |
| identity-like matrix | one(Q) | qeye_like(Q) |
| conjugate | conj(Q) | - |
| transpose | transpose(Q) | trans(Q) |
| conjugate transposition | adjoint(Q) | Q', dag(Q) |
| partial transpose | partial_transpose(Q, mask) | - |
| dot product | dot(Q1, Q2) | - |
| generalized dot product | dot(Q1, Q2, Q3) | matrix_element(Q1, Q2, Q3) |
| trace | tr(Q) | - |
| partial trace | ptrace(Q, sel) | - |
| singular values | svdvals(Q) | - |
standard vector p-norm or Schatten p-norm | norm(Q, p) | - |
| normalization | normalize(Q, p) | unit(Q, p) |
| normalization (in-place) | normalize!(Q, p) | - |
| matrix inverse | inv(Q) | - |
| matrix square root | sqrt(Q) | √(Q), sqrtm(Q) |
| matrix logarithm | log(Q) | logm(Q) |
| matrix exponential | exp(Q) | expm(Q) |
| matrix sine | sin(Q) | sinm(Q) |
| matrix cosine | cos(Q) | cosm(Q) |
| diagonal elements | diag(Q) | - |
| projector | proj(Q) | - |
| purity | purity(Q) | - |
| permute | permute(Q, order) | - |
| remove small elements | tidyup(Q, tol) | - |
| remove small elements (in-place) | tidyup!(Q, tol) | - |
| get data | get_data(Q) | - |
| get coherence | get_coherence(Q) | - |
Eigenvalue decomposition
eigenenergies: return eigenenergies (eigenvalues)eigenstates: returnEigsolveResult(contains eigenvalues and eigenvectors)eigsolve: using sparse eigen solver and returnEigsolveResult(contains eigenvalues and eigenvectors)eigsolve_al: using the Arnoldi-Lindblad eigen solver and returnEigsolveResult(contains eigenvalues and eigenvectors)
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.0imjulia
ψ'
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.0imjulia
ρ = 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.0imjulia
diag(ρ)5-element Vector{ComplexF64}:
0.3679111729923387 + 0.0im
0.3675770456232403 + 0.0im
0.18523331233838003 + 0.0im
0.05810197190350208 + 0.0im
0.021176497142538265 + 0.0imjulia
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.0imjulia
norm(ρ)0.9999999999999996julia
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.0imjulia
tr(ρ)0.9999999999999993 + 0.0imjulia
eigenenergies(ρ)5-element Vector{Float64}:
-3.188562758433179e-17
-7.70881124130806e-18
2.0684351320241445e-17
1.0235138990670176e-16
0.9999999999999996julia
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.0imjulia
λ, ψ = result
λ # eigenvalues5-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.0imjulia
ψ # eigenvectors5-element Vector{QuantumObject{Ket, 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.0imjulia
λ, ψ, T = result
T # transformation matrix5×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