💬
MPS形式でAx=bを解く(随時更新)
A,bがそれぞれMPO,MPSで与えられている時、
のxについて解く
MPSをMPOに直す
都合上、Cがb、xをBだと思ってください。
binary coding
AのMPS表現
AをMPOに直す(デルタ関数を各コアにかける)
ここで
図で表現すると
クリノフ部分空間法
例として、全ての要素が2のMPOと全ての要素が1のMPSをそれぞれA,bとする。
この時、
Aを定義
using Quantics
R = 5
sites = siteinds("Qubit", R)
A_mps = 2 .* Quantics.onemps(ComplexF64, sites)
A = MPO(A_mps)
bを定義
b = Quantics.onemps(ComplexF64, sites)
x0 = b
Ax=bを解く.ここでは、ITensorTDVPを用いた。
コードは、こちら
論文は、Time Dependent Variational Principle with Ancillary Krylov Subspace
Time-dependent variational principle with ancillary Krylov subspace
using ITensorTDVP
x = linsolve(A, b, x0; cutoff=1e-30, maxdim=100, nsweeps=10, solver_maxiter=1000, solver_krylovdim=30)
test
_reconst(x) = vec(Array(reduce(*, x), reverse(sites)))
@show maximum(abs, _reconst(apply(A, x)) .- ones(2^R)) # 1.0e-15
@show _reconst(apply(A, x)) #全て1
Discussion