Open3

ITensors.jl

ultimatileultimatile

randomMPO

In src/mps/mpo.jl

4 methods for generic function "randomMPO":
  [1] randomMPO(sites::Vector{<:Index})
  [2] randomMPO(sites::Vector{<:Index}, m::Int64)
  [3] randomMPO(rng::Random.AbstractRNG, sites::Vector{<:Index}) 
  [4] randomMPO(rng::Random.AbstractRNG, sites::Vector{<:Index}, m::Int64)
ultimatileultimatile

MPSで時間発展を計算する際に肝となる部分はMPO-MPS積でapply(A::MPO, x::MPS; kwargs...)のところである.
applycontractを利用したaliasになっていてdocumentが分かりくかったので若干補足.

MPO-MPS積計算

apply(A::MPO, x::MPS; kwargs...)
  • apply(A::MPO, x::MPS; kwargs...)= replaceprime(contract(A, x; kwargs...), 2 => 1)
  • 説明のため返り値のMPSをyと呼ぶ.すなわちy = apply(A::MPO, x::MPS; kwargs...)
  • kwargsは可変長引数で指定しなくても実行が可能で,指定しない場合は以下のdefault値が適用される.
apply(A, x, cutoff=1e-14, maxdim=maxlinkdim(A) * maxlinkdim(x), mindim=1, alg="zipup", truncate=true)
  • kwargsにはcutoff, maxdim, mindim, alg, trunctate がある.
    • cutoff:無視する特異値の大きさ.default値1e-14はほぼ無視しないことに対応しているので,これより大きい何らかの値を指定することが推奨されている.
    • maxdim:考慮するMPSyのbond次元の最大値.default値はyが取りうるbond次元の最大値に対応しているので,これは最大bond次元に実質制限がないことを意味する.
    • mindim:考慮するMPSyのbond次元の最小値.基本的にdefault値の1で問題ない.
    • alg: MPO-MPS計算を実行する際に使われるalgorithm.default値は"zipup".その名の通り,zipup algorithmで,他の選択肢にはnaiveがある.

https://itensor.github.io/ITensors.jl/stable/MPSandMPO.html#ITensors.apply-Tuple{MPO, MPS}