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) | - |
| identity-like matrix | one(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{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.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