Hello,
I am trying to understand truncation via cutoff
.
Let’s say I have an MPS that is representing some function y
that is defined on a grid of size 2^{6}. Given that, I expect an exact MPS representation will require \chi = 8 and any less than that will be an approximation of y
. Let’s also assume that the exact representation of y
actually does require \chi=8 (I know there are cases where exact representations of certain functions like \text{sin}(x) require less than the \chi you’d get from construction of MPS via SVD).
I would expect then that I if I specified essentially zero truncation error, which I thought would be something like cutoff=1E-16
, that the resulting MPS should have maxlinkdim(mps) = 8
. But I am finding that is not the case. I need to use cutoff
of even less than 1E-16
to produce \chi=8.
I’m questioning why is that? I am only using Float64
so I didn’t think any number smaller than 1E-16
could be represented and should give basically the same answer as 1E-16
. Is that wrong?
Below is an MWE demonstrating what I am observing.
On my laptop, I don’t get \chi=8 until cutoff=1E-24
. I expected to get it at cutoff=1E-16
(effectively zero truncation error? or so I thought).
using ITensors, LinearAlgebra
begin
N = 6
d = 2
n = d^N
x = LinRange(0, 1, n)
y = @. x * sin(2π * x) + x^(1 / 3)
sinds = siteinds(d, N)
m = MPS(y, sinds)
end
cutoffs = [1E-8, 1E-12, 1E-14, 1E-16, 1E-20, 1E-24, 1E-28]
begin
for cutoff in cutoffs
tmp = MPS(y, sinds, cutoff=cutoff)
χ = maxlinkdim(tmp)
@info "For cutoff=$(cutoff) the maxdim is $(χ)"
end
end