Open3
ITensors.jl
randomMPO
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)
m=1
しか使えない...(m
はlinkdims
に対応するはず)
MPSで時間発展を計算する際に肝となる部分はMPO-MPS積でapply(A::MPO, x::MPS; kwargs...)
のところである.
apply
がcontract
を利用した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
がある.- zip-up algorithmの詳細はarXiv:1901.05824のFig. 9などを参照.
-