Hi,
A naive question here as I am hindered in my understanding of the objects in ITensors.
MPO being (a possibly more efficient representation of) a matrix, I am expecting to be able to define -A when an MPO A is defined.
Looking at eigenvalues this does not seem to be the case:
using ITensors
using Random
Random.seed!(0)
N = 2
s = siteinds("Electron", N; conserve_qns=true)
H = randomMPO(s)
A = prod(H)
ev = eigen(A)
println(ev.spec)
minus_A = prod(-H)
ev_bis = eigen(minus_A)
println(ev_bis.spec)
twice_A = prod(2*H)
ev_ter = eigen(twice_A)
print(ev_ter.spec)
outputs
Spectrum{Vector{Float64}, Float64}([0.6109978717430119, 0.550991216139776, 0.3777881680204986, 0.34068524911062964, 0.15800631098015647, 0.11889916146348563, 0.09769741847149604, 0.07351694411033347, 0.053654309944501266, 0.04963932327936461, 0.048384871461378126, 0.04476420028113693, 0.013875203130138448, 0.01283691271877742, 0.010441038760256732, 0.009659729086607635], 0.0)
Spectrum{Vector{Float64}, Float64}([0.6109978717430119, 0.550991216139776, 0.3777881680204986, 0.34068524911062964, 0.15800631098015647, 0.11889916146348563, 0.09769741847149604, 0.07351694411033347, 0.053654309944501266, 0.04963932327936461, 0.048384871461378126, 0.04476420028113693, 0.013875203130138448, 0.01283691271877742, 0.010441038760256732, 0.009659729086607635], 0.0)
Spectrum{Vector{Float64}, Float64}([1.2219957434860238, 1.101982432279552, 0.7555763360409972, 0.6813704982212593, 0.31601262196031293, 0.23779832292697126, 0.1953948369429921, 0.14703388822066693, 0.10730861988900253, 0.09927864655872921, 0.09676974292275625, 0.08952840056227386, 0.027750406260276896, 0.02567382543755484, 0.020882077520513465, 0.01931945817321527], 0.0)
We see that the ‘minus MPO’ is isospectral to the original MPO whereas the ‘twice MPO’ indeed has eigenvalues which were multiplied by 2.
How am I to understand this behaviour?
Best regards,
SpSn