MPS & MPO Algebra

The algebra operations for MPS and MPO.

LinearAlgebra.mul!Method
mul!(C::DenseMPS, A::SparseMPO, B::DenseMPS, α::Number, β::Number; kwargs...)

Compute C = α A*B + β C variationally via 2-site update, where A is a sparse MPO, B and C are dense MPS/MPO. Note 'B' cannot reference to the same MPS/MPO with C.

mul!(C::DenseMPS, A::SparseMPO, B::DenseMPS; kwargs...)

Compute C = A*B by letting α = 1 and β = 0.

Kwargs

 trunc::TruncationScheme = truncbelow(MPSDefault.tol) & truncdim(MPSDefault.D)
 GCstep::Bool = false
 GCsweep::Bool = false
 maxiter::Int64 = 8
 disk::Bool = false
 tol::Float64 = 1e-8
 verbose::Int64 = 0
 CBEAlg::CBEAlgorithm = NoCBE()
 lsnoise::AbstractVector{Float64} = Float64[]

Note CBE can only be used when α ≠ 0.

source
LinearAlgebra.axpby!Function
 axpby!(α::Number, x::DenseMPS, β::Number, y::DenseMPS; kwargs...)

Compute y = α*x + β*y variationally via 2-site update, where x and y are dense MPS/MPO. Note 'x' cannot reference to the same MPS/MPO with y.

Kwargs

 trunc::TruncationScheme = truncbelow(MPSDefault.tol) & truncdim(MPSDefault.D)
 GCstep::Bool = false
 GCsweep::Bool = false
 maxiter::Int64 = 8
 disk::Bool = false
 tol::Float64 = 1e-8
 verbose::Int64 = 0
 lsnoise::AbstractVector{Float64} = Float64[]
source