Examples
Partial differential equations
Let's consider the following 2D partial differential equation
\[\Delta u(x,y) = f(x,y),\]
where $\Delta$ is the Laplacian operator, $u(x,y)$ is the unknown function, and $f(x,y)$ is a given function. In this example we assume $f(x,y)=0$ using Dirichlet-Dirichlet boundary conditions given by $u(0,y) = \cos(\pi y)$, $u(1,y) = \sin(y)$.
We want to solve this equation using quantics tensor trains (QTTs). We start by defining the dimensions and the resolution of the grid. Lets say we want $2^{10}$ points in each dimension, which gives us a grid of $1024 \times 1024$ points on a $[0,1]\times [0,1]$ grid.
using TensorTrainNumerics
using CairoMakie
cores = 10
a = 0.0
b = 1.0
1.0
We follow the same convention as in this paper where we define the finite difference operator using the following inputs
h = (b-a)/(2^cores)
p = 1.0
s = 0.0
v = 0.0
α = h^2*v-2*p
β = p + h*s/2
γ = p-h*s/2
Δ = toeplitz_to_qtto(α, β, γ, cores)
TToperator{Float64, 10}(10, [[1.0 0.0; 0.0 1.0;;;; 0.0 0.0; 1.0 0.0;;;; 0.0 1.0; 0.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [-2.0 1.0; 1.0 -2.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;;;]], (2, 2, 2, 2, 2, 2, 2, 2, 2, 2), [1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
To get the 2D Laplacian operator, we need to take the Kronecker product of the 1D Laplacian operator with the identity.
A = Δ ⊗ id_tto(cores) + id_tto(cores) ⊗ Δ
TToperator{Float64, 20}(20, [[1.0 0.0; 0.0 1.0;;;; 0.0 0.0; 1.0 0.0;;;; 0.0 1.0; 0.0 0.0;;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [-2.0 1.0; 1.0 -2.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 1.0 0.0; 0.0 1.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;;; 0.0 0.0; 0.0 0.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0], [1.0 0.0; 0.0 1.0;;; -2.0 1.0; 1.0 -2.0;;; 0.0 1.0; 0.0 0.0;;; 0.0 0.0; 1.0 0.0;;;;]], (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), [1, 4, 4, 4, 4, 4, 4, 4, 4, 4 … 4, 4, 4, 4, 4, 4, 4, 4, 4, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
To build the boundary vector we take the Kronecker product with the QTT basis vectors and define some random initial guess for the solution.
b = qtt_cos(cores) ⊗ qtt_basis_vector(cores, 1) + qtt_sin(cores) ⊗ qtt_basis_vector(cores, 2^cores)
initial_guess = rand_tt(b.ttv_dims, b.ttv_rks)
TTvector{Float64, 20}(20, [[-1.3068748448925214; -0.05860606952522715;;; 0.9307247391472059; 0.0810194713691914;;; 0.8875584702557205; 0.4989957495831991;;; -0.2503177494148563; -0.011242913337357866], [0.6591851852747405 -1.1234788451905564 -0.42336658831143864 -1.600065960868221; 0.167404325204573 -0.9005010322405455 -0.46541737139123196 -0.41277642532621767;;; 1.6149785515101998 -0.44098292739821704 -0.8515936280895996 0.7650517011866605; -0.7639692266194342 1.0330523849118785 -0.17058737996740808 0.7215382453692442;;; -1.3611210814849852 -0.11640715878135015 0.9327450613451204 -0.5302478539526122; -0.6221207806159756 -0.9603927028401423 -0.7077473006458824 0.49201063461378025;;; 0.12803697029706043 -0.07677045622199469 -0.306034113278485 0.9918475624762048; -0.22345590144489466 0.6026762735791237 0.5453182272538503 0.1299586615818743], [-0.3022344052975696 0.08524736075443246 -1.524445517781313 0.004516378332865016; -0.05184766219081393 -0.5191481868635125 -0.18050556580175295 -1.2195721168523193;;; 0.125641215716426 -0.6316507124961666 -0.547424175831757 0.08751207610712115; 1.986060425511894 -0.5506277702657342 -0.4110885936978945 0.7706863682101712;;; 1.3098643980810383 -0.8014564656770672 -1.250947988120645 -1.5096813666899915; 0.1356273658867086 -0.11750322658601814 -1.17146704957152 2.424170024039988;;; -0.004623444589109873 1.6701243879129883 -1.205048929013107 1.0443911411468334; 1.274813484487595 -0.1874834024470065 -1.3612575670774605 2.007009968248779], [-0.31499517206317 -0.3668475729016974 1.1739712280227335 -2.703493032845142; 0.36158548908781973 -1.158681842683639 1.644479239485255 1.1407344956709329;;; 0.864694049608145 -0.8946484325515596 -1.097410196013899 -0.6370646359001008; 1.714277026248039 0.8365063871505962 -0.8277201752976971 -0.4757628958304671;;; -2.1250278320564298 0.13316670036357905 -0.5764124297800585 -1.9308806930535551; -1.0420740173031091 0.27116061674788156 0.44750309984185127 0.021144302311001197;;; 1.0582054462669146 1.6648580738018628 -0.49380381838979953 -0.7015844342275477; -1.3390377515930993 0.8758151629958111 0.1070326373573767 0.23847016166942184], [-0.4832835670238042 0.10581439954047445 0.07091956842956194 0.5817882766607619; -0.5451100214676085 0.2840116775385268 0.11076211104795189 0.34436602396495575;;; -0.41440944364379706 -1.2029903737665584 -0.16845139362473446 0.25486073200332676; -0.33934912929416916 0.6852373084685358 -1.2089718948108459 -1.3889185105536388;;; -0.1814016350075834 0.5760014433037909 -0.7161595060028267 0.08133258685588615; -0.47468487964137906 -0.09259024284075211 0.685678230455435 0.8610544262588065;;; 0.5592492734688169 0.7377299421039853 1.200476332420108 1.041079335816502; 1.564059117910599 -0.36000069072367114 -0.6196571821508277 -1.306108622035351], [0.11714688820247973 -1.822876081990484 -0.04828618026413475 0.03246322799241604; 1.4353605357820292 1.0927943093330315 0.5639232955374645 0.04489079255179542;;; 0.9448781081977664 -0.3139478260697499 0.8646980631781305 0.4260708066697374; 0.11561757944659343 -0.9638499044790669 -0.5346217466562745 0.34136771687880985;;; -1.5085688937705042 -0.2378080769587283 1.7050192161055577 0.1559211509067198; -0.716871836085547 -2.3507859218018443 0.4688920343215004 1.7861857955657654;;; -0.18369712472710178 -0.5079732215445393 1.737896514860146 0.18515438503405093; 0.25137656418298865 0.9500448895220572 0.646036411015232 1.7062830517392946], [-0.46118251723652715 -1.6615413033312414 -1.6092986517782102 0.9181524271399442; 1.4313973578572396 -1.3277295172791799 -1.2424895300326055 0.3830227401904089;;; 1.5567944519540085 -0.9040480730611355 0.12777684956968796 1.1376003836438942; 0.44570884800466626 -0.08103457628577118 -0.381833319042971 -0.056361823317781085;;; 0.44416609362664944 -1.4840539580732572 -0.2713817317559864 -1.3730337667549404; 0.202490806262641 -0.060369620668887874 0.5098645923532075 -0.3281573582800334;;; 2.0426819972914316 -0.6327224810360702 1.9463216723600598 -1.3663637510353157; 1.795434642100596 0.058059465384983154 0.895106995638806 -7.45539945415781e-5], [1.0129407061747036 0.7320724770256583 -1.584690692601082 -0.04444266744786609; -1.57332119224574 -0.25379621914971384 0.13473228716831434 -0.9101525353264608;;; -0.9207662754034517 -2.019614424100068 -0.02241586219908417 0.28988097234119975; -0.2670251158925408 -0.22111491594497448 2.374331141035688 0.8974441459137743;;; 0.7032435718833282 0.2549303476171318 -0.3304257095398882 -0.22355315419772087; 1.2521227913351403 -0.8611035517684611 -2.2017062374981884 -0.07833965598597896;;; 1.388793899063864 0.1425711436943588 -0.67640507685312 -1.2636658292288672; -1.489557914920797 -0.9568599675102973 1.3153927873658333 -0.6774112731836767], [1.5313909009022004 -1.6622746649947342 -0.8541929029943734 -1.855409312943992; 0.8100521007243298 -2.299909336448403 0.083309594913604 0.25162441815434966;;; 0.5650498959388544 -0.6651734943703966 -0.6260594140179295 -1.9386982392191034; -0.54542921255403 0.9044420522336738 0.7059817276768123 -0.6093942720014334;;; -0.2593932737046409 0.4080757327790045 -0.3216819445549507 -1.5480140829256548; 0.27735982061027903 -1.6469737614161668 -0.8619504683123275 0.6952909621329225;;; 0.8120095348478198 0.41217474559520834 0.3954258254044908 0.5127644885243348; -0.10438546928987853 -0.9094401042570827 0.35342155909579004 0.19251657651210224], [-0.26021598495983794 -0.10012434210372789 -1.311209752995426 1.0948927315602928; -0.8183892120104583 0.431187266421504 -0.36175092813874415 0.27877897630563636;;; 0.23451395890154692 -1.1358988074950664 0.28141559430373925 -1.5807908219981588; 0.5601365110570786 -1.6878971397322102 1.1481141824324415 0.4598220180937813], [-0.6953854750442359 -0.8341753024378934; -0.2989654649618262 2.470500483671048;;; -0.4233811893763239 0.450560820765914; -0.764375548146709 -1.3019765294985484], [0.8924014637202119 2.281826690991283; 0.0772218038844598 1.4453664374972721;;; 0.5026819680181225 0.3005482556741821; -1.8061555044734316 0.5781334536593244], [-0.5411232896231587 -1.7364687633124756; -0.8935028982238118 -0.4201096441253119;;; 0.7852705624638302 0.16789506817349156; 0.06663088896072923 -0.07567023676340848], [-1.2596061909924336 0.35344807088376173; -0.4555512512946356 -0.5827994610667124;;; 0.7920927984769928 0.2199839513884509; -1.0391008729045357 1.2567666065873293], [1.0653965024537704 0.09659394634506155; -1.413965877258801 -0.2836521175234925;;; 1.1573028166961221 1.1347006550573375; 0.38709336029564967 -1.119663120524022], [-0.1681385947972615 1.500416343100118; -0.644108833726197 -0.8215135569545767;;; -0.16080921955615063 -0.7256710736203872; 1.291802902952634 0.15955926611709528], [0.24807584694768536 -0.22848412677130825; 0.5882442642904139 -0.5563356879520539;;; -0.7974511518593257 0.03047088379857414; 1.1239903769080448 -0.07031003082488613], [0.5969016141342912 1.1192881084660364; 1.1989654842963697 1.0128303844808533;;; -0.7283436925190474 -0.3016579396702614; -0.8270303564830864 -1.3829385986562404], [-0.7559089849971881 -0.31095655905290476; 1.5936162413554196 -0.24302300287392103;;; 0.8710244868142295 -1.4936596175057046; 0.4797097322805019 1.143622880169127], [1.7572553782256783 -0.3022367292227304; -0.8175567040167822 0.590704020119985;;;]], (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), [1, 4, 4, 4, 4, 4, 4, 4, 4, 4 … 2, 2, 2, 2, 2, 2, 2, 2, 2, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
We solve the linear system using DMRG
x_dmrg = dmrg_linsolvee(A, b, initial_guess; sweep_count=50,tol=1e-15)
TTvector{Float64, 20}(20, [[-177.89431945442226; -192.0705136152335;;; -118.04623776156836; 109.33357096559355], [-0.7010067136069053 0.46615583448105274; -0.6906140076160482 -0.48106735494870856;;; -0.11921946291596984 -0.5160337521703952; 0.12742017107743098 -0.5243871357754554;;; 0.016020808564685397 0.07208062239346755; 0.019941605962111374 -0.06774691400427293;;; 0.016671916093650787 -0.008924459549495691; -0.016137313454375263 -0.011633141282616409], [-0.7061860003463494 0.30979853801058044 0.0879198255754485 -0.15577865624345497; -0.7040227500053253 -0.311627090694989 -0.046125993536888406 0.16250467433773372;;; -0.05236895919093486 -0.6307242320897017 -0.3330073105783008 -0.16144263634576553; 0.052912469315943185 -0.633955285548909 0.3980148623434077 -0.0922948309471017;;; 0.004527388532104473 0.05998941849816667 -0.445590799305159 -0.4898521663890756; 0.0064079854124869315 -0.05989429983395097 -0.4698102665690386 0.4971604883295441;;; 0.004905167852228789 0.003314903135655415 -0.39223844481267905 -0.4818157144948221; -0.005035177578259214 0.0014789887444735421 0.384122763513283 -0.4413551984878468;;; 8.24394241802087e-5 0.0009687746743240656 0.008659734505229302 -0.010138373375697906; 9.570202996196085e-5 -0.000938354529564559 0.008748181822944151 0.011734557467639082;;; -0.00019134195651872006 6.494286318256678e-5 0.0020295166368985225 -0.014863715025500976; 0.00019316527768629114 6.575444576172871e-5 -0.0017362158622599665 -0.014733447128432041;;; -4.964784719850325e-7 -7.832736283717943e-6 -6.359155622509804e-6 -0.0003158791722614054; -8.374765079717252e-7 7.678051833125823e-6 -1.0873273249825587e-5 0.00031321030703329437;;; -1.4921372632584724e-6 5.625270145826366e-7 -9.682480538923354e-6 2.7090778517464995e-5; 1.470414754686686e-6 8.080714456734771e-7 9.291142362148203e-6 2.885189788375299e-5], [-0.706747774839378 0.17075454238590163 … -0.4321620052362413 -0.005502472227080679; -0.7065024010432321 -0.1705516443238867 … 0.43301569158919445 -0.002861447611792651;;; -0.026182344669121515 -0.6855025301884907 … -0.11371742142977094 0.10714627052497323; 0.02588152318953377 -0.6856371915499674 … -0.09152882060555269 -0.1043407570175577;;; 0.0008139116942188863 0.027999478325481716 … 0.16703982086805755 0.05509110243990982; 0.00169571248131666 -0.029501830884654544 … -0.08367506933918853 -0.061342546552989576;;; … ;;; -8.402025902124984e-11 4.148059694247403e-10 … -1.3537937882223633e-5 0.0001329037080674384; 3.101767642793097e-10 4.915298750573224e-10 … 1.7787535900248331e-6 0.00016268685070661571;;; 1.3834864392180203e-10 6.534897551263184e-10 … 1.3595734438568107e-5 -2.6911897046502157e-5; 5.118206519440764e-11 -3.443538165049525e-10 … -9.685779312283995e-7 -2.764524475324519e-5;;; 4.541299212650682e-11 -1.0921728108107757e-10 … 2.2175866437780113e-6 -5.5474835766194195e-6; -8.906888871915354e-12 2.3008969490966054e-10 … 1.7706243917751687e-6 -1.5077644464013945e-5], [-0.7069928593169718 0.08684363169874428 … 0.010966230334919665 0.05462695582488991; -0.706973452409251 -0.0867300981960888 … -0.011826521131549797 -0.06548192267551517;;; 0.01327522992352594 0.7016632782409395 … -0.02537702476436468 -0.2870995803387206; -0.013155870906068682 0.7016496359871929 … 0.021206155500338632 0.2732399320682633;;; 0.00020767054530280692 0.0018509011232259575 … 0.019439100511522058 -0.187342757311191; -0.0002509414736377427 0.0018755131656199 … -0.09990446294040446 0.1962400010876403;;; … ;;; -2.604832558319316e-11 9.44932376626895e-11 … 0.17135925070966943 0.1097120243953481; 3.1466368331499545e-11 2.1479186310973333e-10 … -0.1868387230708142 0.05948842745494346;;; 7.92758537966187e-11 -1.0783754661470461e-10 … 0.15284427058166883 0.06925241342946654; -1.6199881438941232e-11 -1.4319888547032327e-10 … 0.11204470121150478 -0.5334561324895881;;; -5.463751241177699e-11 3.784446118566207e-11 … -0.07349375325435545 0.055620979435641954; -7.928879654208124e-12 4.566408556224107e-11 … -0.12466650304454605 -0.0388077191032992], [-0.7070779626209144 -0.04324252177049047 … 0.06138170573167967 0.03423003553651848; -0.7070724292408249 0.043508841330725835 … -0.06276758773375603 -0.0348026759760314;;; -0.006548084059495748 0.7057721815466304 … 0.0757699014443987 0.03158668091467089; 0.00681433864602425 0.7057529792895451 … -0.0663465229207665 -0.02769918155477114;;; 0.00010713431883063669 0.0012024819049332534 … -0.14172885372823862 0.004606045837830681; -1.2272693964236735e-5 0.0012263745424806098 … 0.024525488625440694 0.01995198582396107;;; … ;;; -4.403722436606385e-11 -2.2433423665899637e-10 … 0.04933166665821096 -0.10619867884933562; -2.155974460308941e-11 -1.3279865938534367e-10 … -0.07218458875301337 -0.12892460079897586;;; 6.686730319467672e-11 -6.824164606834208e-11 … -0.2467280651161679 0.38781572294156796; 2.7288499639443284e-12 -5.47821595332311e-11 … -0.22882269018667797 0.12233431918037202;;; 2.7750948235723914e-11 -6.970399758154284e-11 … -0.17430914849474138 -0.1850431469762285; -1.2489593156125408e-11 -1.0180753610423037e-10 … -0.46218672302232316 -0.13545891713823527], [-0.707102925505856 0.020717627057841272 … -0.009929634951714906 0.019997168543482557; -0.7070932954418605 -0.022648054270277603 … 0.010267701303999477 -0.020208765770328384;;; 0.002397433446867845 0.7067194475873487 … 0.03668586680800372 -0.023118652244925823; -0.004322404485143792 0.706659511384445 … -0.03663589809455389 0.020390036481756652;;; -0.000198654498949417 0.010575486456694481 … 0.023474231277318423 0.03122838038433; -0.0002197113974429638 0.010577917929695901 … -0.02801658588634853 0.08221788212149847;;; … ;;; -7.995288659423168e-11 2.511507180856319e-8 … -0.09763786302717048 -0.045180766738374734; -3.055400411758641e-10 2.5059881622441615e-8 … -0.12741402770289695 0.018598858130657113;;; 1.612763018101598e-10 1.060393730008285e-8 … -0.0477548585188171 -0.0657328482406619; 6.792677243508713e-11 1.047787381593352e-8 … 0.11187519835276602 0.08561288676463663;;; -3.460613083385357e-12 -2.159382521441319e-9 … -0.21915876115152458 0.16374467866067188; 1.962318657365755e-11 -2.1251995848452744e-9 … -0.02452360323381328 0.00828517881794726], [-0.7071066422836558 -0.008912863837970533 … 0.0017983418321045636 0.1159102309256367; -0.7070967742342626 0.013067193145404773 … -0.0017624913295221948 -0.11595465747301506;;; 0.0003968494864258573 0.7064026217033429 … -0.007952057621127228 0.01154386814503149; 0.0037308836632152184 0.7063379670737902 … 0.008121689766816858 -0.007739020077595331;;; -0.00027087369819082415 -0.026588344404268292 … 0.014504279625844088 -0.02574342317812639; -0.0003681657867554631 -0.02658127991917086 … 0.00238237016818676 0.009871406889760393;;; … ;;; 1.684037263327149e-8 1.8089225807911977e-6 … -0.25744515479243274 0.258797312222839; 2.506928460898257e-8 1.8108373688694343e-6 … 0.3007149575036231 0.07546870698492132;;; -8.478839325701569e-10 -3.413260873410401e-7 … 0.0034478925865415793 -0.05220130666491522; -2.48238024709779e-9 -3.4149971448641227e-7 … -0.4758719424591504 -0.02702665319285142;;; 1.2707480957320708e-9 2.4616884158093375e-7 … -0.30852104573856454 -0.14294078345063138; 2.4044497506342956e-9 2.465273084462166e-7 … -0.2027362378949622 0.15323049832911925], [-0.7071047313089291 0.003219124549915386 … 0.01854638826766066 -0.0776184660820543; -0.7070990150902896 -0.008214181358189776 … -0.018516478714009237 0.07763039907735715;;; -0.0016678142623877152 0.7050666203053422 … 0.013691668998231887 0.006173407693901927; -0.0032796718356334228 0.705026884854229 … -0.014008143602456169 -0.00481130674034917;;; -0.0002057227214452568 0.030817151148013217 … -0.012342314684523844 -0.003352148725733653; -0.0002697601578349102 0.03081170872487367 … 0.012363177929774049 -0.0011035018192809564;;; … ;;; 1.3850565284342156e-7 -3.0770131492108975e-5 … -0.23605515132681687 0.21148828675287273; 2.077298313262146e-7 -3.078160363708999e-5 … 0.6941835189439729 0.23235136620705868;;; -2.0273014828838864e-7 2.8312456125849418e-5 … 0.17558724756130983 0.1778345046592696; -2.667700529606087e-7 2.8319748050270952e-5 … 0.4490955767637569 0.1445814650570744;;; 1.0670273870883026e-8 -7.040802421931722e-7 … -0.005611282777988405 -0.21935537076044642; 1.21852190784267e-8 -7.017177946292517e-7 … 0.09811614311459999 0.2404558697842876], [-0.7071013804697251 9.090865526465888e-5 … -0.0033744078354203005 0.03927193431448035; -0.7070979931135715 0.00619625900090814 … 0.00337399336511823 -0.03927175864029515;;; 0.0026937199306662023 0.684767879729689 … 0.0004674834746051928 -2.1391233144652244e-6; 0.003431818079919042 0.6847411938708011 … -0.0006228250304707453 0.00041988420121263545;;; -0.00012712248464127608 -0.03597739785856176 … -0.0005989002264705196 0.0011837200382782192; -0.00016460016815382598 -0.03597635979080778 … 0.00043690648948070156 0.00098580697930245;;; -9.575370005376314e-5 -0.02725017087404506 … -0.0007934870425416531 0.004110712735762843; -0.00012469362263967899 -0.027249422600889948 … -0.0011421392994542233 -0.005518386594288891;;; -1.56994241145928e-6 -0.00020338382958082338 … 0.20129213029940568 -0.6505106288164202; -1.7932531013746364e-6 -0.0002042102224811713 … 0.13795939098346938 0.6665327045692115;;; 4.716305852696712e-5 0.013720797382030733 … -0.15297465476621117 0.23870712464212612; 6.190242885141531e-5 0.013719865475094729 … -0.20628975823441414 -0.25912108241205367;;; -0.0005948702815654821 -0.16990475849635095 … -0.012380788614034922 0.013923050912579964; -0.0007774731867816467 -0.1698997160882576 … -0.01691824272686758 -0.015397058139986012;;; -9.384605343183138e-7 -0.0002769678209062066 … 0.5696207371331643 -0.03760182205462205; -1.2344990323503784e-6 -0.0002769434775758502 … -0.7413223453707773 -0.05887253473526175], [0.17694469907045332 0.1424605261222319 … -0.16963584111089808 -0.0681443084445716; 0.9837164264980373 -0.005101452639422431 … 0.010670302811395345 0.012668840927301594;;; 0.020196558133334163 -0.9897431519258871 … -0.03315439386930659 -0.010388378738969395; 0.008241792427359979 -3.056252266022933e-5 … -0.005612080844114724 -0.021732819436192933;;; 0.022360593594785753 -0.008924656672504786 … 0.899387491813274 0.039018145433214274; -0.004091618932504817 1.1726000639493938e-5 … -0.03012552344433896 0.21701878905862462;;; 1.0392429170620974e-5 0.0010646706041217745 … 0.13989337533518262 0.007936210409031799; -1.951185453779716e-6 -9.400596562144011e-7 … -0.0022112294663898307 -0.28759524755834726;;; 7.688671741254921e-7 0.0022327806598780647 … -0.24282954773281346 -0.16983487841842748; -1.239668598011974e-6 -1.7697947223897073e-5 … -0.08918241600946605 0.47733612909012724;;; -4.297080691741475e-7 -0.0012141148707453912 … 0.1774939458843698 -0.1858546380743742; 6.166909245280787e-7 8.070543391719258e-6 … 0.07547427019866772 -0.5325952104656297;;; -1.9073365530758388e-7 -0.0004213726698432596 … -0.14927233892345385 -0.006091876735012642; -1.2426060520807853e-8 -3.1574825517522775e-7 … -0.004701325968533847 -0.19292838712472787;;; -8.570720096973734e-8 -0.00021326817349091715 … 0.10750876748528906 0.043769560257279766; 5.836368100240518e-8 4.062223608146666e-8 … -0.05114719531017841 -0.4991538047723603], [-0.40896236842412326 0.2572690446885748 … -0.05547558013872671 0.01694502612377623; -0.9114343838473882 -0.13095493303378608 … 0.022705170282630444 4.244090709131608e-5;;; -0.015332121416097624 0.9570097629453359 … 0.02135464975306617 -0.0031966569175898483; -0.01809663432570288 -0.0012194912378744672 … -0.021940483461872606 -0.07532953863295476;;; -0.012711055736575449 -0.027863559763175227 … 0.11286258853283875 0.07714404409434393; -0.036235508137603505 -0.004229968385946197 … 0.01733401582004706 -0.18039868820316618;;; -2.1761626834249105e-6 -5.425126992026119e-6 … 0.018644199738625106 0.0164246149347043; -6.321650868351834e-6 -7.405328440772745e-7 … 0.005487592750047499 -0.018599908146388473;;; -5.395413312368148e-9 4.885109211229255e-7 … 0.020505451536792223 -0.0022920994799476738; 5.213067131023817e-10 -4.945379326512152e-9 … 0.006751498930392744 -0.030958121688639314;;; -1.6738224248075177e-8 1.4526518064378008e-6 … 0.16158154661704802 -0.0018780907420052877; 1.331466701426751e-9 -1.1566488477852033e-8 … -0.04922430027388024 -0.213404465140978;;; -9.364447278396856e-10 7.659855669448718e-8 … 0.9762428100520589 -0.016895840108824667; -4.349175990145903e-11 5.416264543278759e-10 … 0.002379969077332529 0.05353908067291417;;; 2.0316608832084117e-9 -1.4345659382177622e-7 … -6.928514246718654e-5 0.00020513860636525561; 1.5821416811132433e-11 -1.2358761091692703e-10 … 7.778102480013098e-6 -0.9514498908714439], [-0.5243352602048583 -0.42135656831029156 … 0.0617965927094973 0.04199741867593185; -0.8500955540809335 0.2813425613220017 … -0.030587309582536134 -0.019020735796890738;;; 0.021513520665257843 0.8617855491996744 … 0.04481849320200814 0.022168682761806693; 0.017787328518965008 0.014970135771420872 … -0.014061626535595678 0.17251146444878637;;; 0.014986349409295312 -0.018604340146479693 … 0.16715170757596248 -0.11858339303059884; 0.03750029325219558 -0.007774710711773159 … 0.08480525172792137 0.10890099702661428;;; -8.615968853351516e-6 1.1633814945284814e-5 … -0.03984896401632458 0.04090497885758372; -2.1762919565403603e-5 4.652792962829599e-6 … -0.01604689658221869 0.02278328433456015;;; -1.568329371952636e-8 -4.556735294313686e-7 … -0.21310378906094357 0.033867663784820194; -3.6666061372474703e-9 -4.183146712533808e-9 … 0.045191539041522094 -0.39560199394900464;;; -3.453838402322303e-9 -1.0452220269561591e-7 … -0.11101486009223634 0.00042026972516424546; -5.926968735258121e-10 -1.2238246717482085e-9 … 0.054245691457046656 -0.2607090155326273;;; 2.7464942731887837e-11 2.830082958119016e-10 … 0.9451640299363683 0.05291570167379799; 1.4323785209568474e-11 4.3663329647582205e-11 … 7.142517528583401e-5 -0.10610652284667493;;; -1.1900292122277531e-11 3.952029358258402e-10 … -0.0021515228884896017 0.01641644179122885; -4.748700640432844e-11 2.2475090547331365e-10 … -0.0001791789789271699 -0.836399151163824], [0.5902991618719713 -0.5859730136748756 … 0.06453290449652146 -0.05695003502622855; 0.8064277336712495 0.4351896339782603 … -0.03944879782671999 0.04196664809322389;;; 0.011549985610291542 -0.6757553242632579 … -0.08882995044211317 0.05943728141534024; -0.024015277699701878 -0.10197191668945645 … 0.011375900756609533 0.12065469717981538;;; -0.008447104183491027 -0.00903188703685854 … 0.28457621435400887 0.04484860759194548; -0.020969235389835462 -0.010976458737385394 … 0.12212047332324458 -0.11299850090657373;;; -3.6434465087865305e-5 -9.18817818792119e-5 … 0.09819594660893817 0.03618901030056992; -9.99868166141499e-5 -5.866163597746219e-5 … 0.08467440599222853 0.13387922415658285;;; 1.4063058976009657e-5 -0.00010065213591416585 … -0.3947011335870795 -0.12749816607107528; 1.428230599863975e-5 -3.875211676373703e-6 … 0.019473516244828536 0.7972547718909748;;; -1.2726081907849663e-8 1.004303387701867e-7 … 0.07382480278686504 -0.019193454063682263; -1.1210326167351537e-8 5.498363750180135e-9 … -0.06280709408982543 -0.4333265432388437;;; -7.693776642534002e-12 -1.889692496864025e-10 … 0.8395423274179491 -0.10353216750796745; 2.3826491974427192e-11 -2.286669186348589e-10 … -0.0548018361481682 0.20203844053822123;;; -1.0858531694522916e-11 -1.3508043764615766e-11 … 0.009542557191430366 -0.004648665683331388; -1.0202909982723354e-11 -2.6485150941612193e-11 … 0.00782548392637593 0.22654030763215377], [-0.6569630181276964 -0.6295468284352634 … -0.05569197014865298 0.08813271050752972; -0.7531125705359144 0.5481312758131974 … 0.04477623340968193 -0.08324484484389781;;; 0.012646750995353267 0.5033453177648588 … -0.11893976671007224 0.12567968538683502; -0.03164193906670792 0.22291448192006733 … -0.015392540729909166 0.1673835265193361;;; -0.002439371829386101 0.008038587483103054 … 0.2729697934271044 -0.13754072406354106; -0.007332167672103349 0.01047201150543943 … 0.1493794911608997 0.16835374894888194;;; 7.148458520817445e-5 -0.0008078422397143793 … -0.13832308882998867 0.06705686131411479; 0.00037589208186660037 -0.0006764147006589412 … -0.024598419424597017 -0.25908990026803747;;; -0.00012219365576185274 -0.0003553175234264481 … 0.5419620057291146 0.6792820032499369; -0.0001540805242947846 4.2506768263684165e-5 … 0.015293535502563705 0.07421866227566469;;; -2.452784941335651e-8 -8.034261387470029e-8 … 0.25762725833462835 -0.4261457638333822; -2.8368154368324243e-8 2.597864618887067e-9 … -0.10271086575049711 -0.08729012084082576;;; 6.880234119709637e-12 -7.890172527764203e-12 … 0.6994606985769732 -0.3196627421288092; 8.555300586891063e-12 -2.4170773292909414e-11 … -0.005671301244471508 0.079961894873618;;; -4.123666457504463e-12 2.041053677855963e-11 … -0.06145084180740994 0.06179878970734514; 6.28276772898821e-13 -1.0381973018338797e-11 … -0.0036225391500027118 -0.23249982258079224], [0.693265876627407 -0.621063215902932 … -0.07559004810337067 -0.0804259866138922; 0.7204840508966467 0.5965691586160901 … 0.07215722241898356 0.07925749009464188;;; 0.008823775237230456 -0.40815956483454235 … 0.16386098718866735 0.12565513000171422; -0.014316630830971185 -0.30287389188358577 … 0.08191761971070333 0.15007809561693944;;; 5.141267992817428e-5 0.0043285552942868835 … 0.1602172335295189 0.08443467128925215; 0.001360543933673692 0.0049818728029687965 … 0.06848065585282041 -0.40159398143302943;;; -6.354953003480826e-5 0.00271635772322153 … 0.2688162949502657 0.10398089011858272; 0.0006813942883416939 0.0028177182959712235 … 0.015849116077969374 0.3122778124877079;;; 6.320746758924149e-5 -0.00013033211124593118 … 0.816374853152147 0.23633823375532892; 7.566253846113864e-5 7.429673985275983e-5 … -0.052118792556545 0.18061527286413365;;; -1.0030915561434127e-7 2.396246618085324e-7 … -0.3029120711538865 0.4691382172110026; -1.1042487469468252e-7 -8.109293068564484e-8 … 0.24964079362612382 -0.058150333223479234;;; 1.6337033149895647e-12 -1.4028384160086676e-11 … 0.139229239727317 -0.2840080428893234; -1.2728250562304008e-12 -1.4182304210899496e-11 … 0.09552512534745951 -0.5274228899808716;;; -8.018209045979637e-13 -1.1529982764109972e-11 … 0.005887829842844185 -0.03525865761339866; -4.457811692975193e-12 -2.1315947846086178e-11 … -0.028999791105400987 0.013132222729485644], [-0.7034039235212509 -0.6163788716530942 … 0.032844947902806704 -0.05322127523268241; -0.7107699765091923 0.6095572126363868 … -0.03160562817895022 0.052933565255503634;;; 0.003149924793296081 0.3675726681657106 … 0.14326414008538246 -0.08600909122687286; -0.004353177722667466 0.33675197830304016 … -0.035465637838799816 -0.09910021972619219;;; -9.854196672384464e-5 -0.0014306908590134032 … 0.15218982368379763 -0.054989033117959996; 0.00024896647289307365 -0.0014839455954182477 … 0.35914419301520795 -0.03870567184520501;;; 8.411985973247323e-5 0.0008212177640499811 … -0.5777926264396813 0.016988554987392476; -9.837369937031432e-5 0.0007783247961631611 … 0.02265022951588917 -0.28891358730396877;;; 1.0009968649482599e-5 1.5616194759808227e-5 … 0.5406608690911533 -0.18577761818948885; 1.1697134499207119e-5 -2.0635771200598897e-5 … 0.3656679888712895 0.2932310663392568;;; -2.793467449447451e-7 -5.656897722570687e-7 … -0.1738935886302171 0.16958616839886922; -2.8935498416852436e-7 3.9663233723631444e-7 … 0.17095672239603804 0.3435848343629568;;; 2.8045897572325685e-12 1.438852763016242e-10 … -0.04478555285359216 -0.22413988298364598; -1.823560819623671e-11 1.4861184784734495e-10 … -0.03747566240799047 -0.4894525909211727;;; -4.254510610698452e-11 -6.236489018601198e-11 … -0.01971189880090851 0.5597903354484047; -4.021695394374577e-11 2.7190878411858977e-11 … 0.01857573594770358 -0.13560968739362228], [-0.7059640955485885 0.6181515069975712 … 0.018284550810806002 0.17469816280470837; -0.7082461881142429 -0.616010524666579 … -0.018060910969437554 -0.1743604521119622;;; 0.0008284461645613576 -0.34942753208690674 … 0.09514549325415995 0.30467220001828055; -0.0011585832625233966 -0.34105714126724823 … -0.031226222001138466 0.31946314981376206;;; -3.3355072412879914e-5 0.00031859666260065564 … 0.17560770200569434 0.3001072673777156; 5.3829801625324466e-5 0.00025132174933379254 … 0.3580275478587167 -0.5403304371768638;;; -1.1507771013195224e-5 7.474445385690491e-5 … 0.7397649513184141 0.4463186270069494; 6.086634021525803e-6 6.207829638677773e-5 … -0.5320129355955341 0.40370219347067454], [-0.706727203948434 0.6327812909960745 0.06733993149535661 -0.3091760511274614; -0.7074860735663433 -0.6320542991996377 -0.06683194828718135 0.3090377149492795;;; 0.00017838970407796188 -0.31760680249007056 0.8228445021668562 -0.4712248003266863; -0.0002882464570809519 -0.31499384063919317 -0.560290772338898 -0.7660633444469404], [-0.7069833601217933 0.7072301807126861; -0.7072301807126861 -0.7069833601217933;;;]], (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), [1, 2, 4, 8, 16, 16, 16, 16, 16, 16 … 8, 8, 8, 8, 8, 8, 8, 4, 2, 1], [0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
And we reshape the solution to a 2D array for visualization
solution = reshape(qtt_to_function(x_dmrg), 2^cores, 2^cores)
xes = collect(range(0,1,length=2^cores))
yes = collect(range(0,1,length=2^cores))
fig = Figure()
cmap = :roma
ax = Axis(fig[1, 1], title = "Laplace Solution", xlabel = "x", ylabel = "y")
hm = heatmap!(ax, xes, yes, solution; colormap = cmap)
Colorbar(fig[1, 2], hm, label = "u(x, y)")
fig

Time-stepping
We can also solve time-dependent PDEs using the QTT framework. In this exampl we will use the explicit Euler method, the implicit Euler method and the Crank-Nicolson scheme.
using TensorTrainNumerics
using CairoMakie
cores = 8
h = 1/cores^2
A = h^2*toeplitz_to_qtto(-2,1.0,1.0,cores)
xes = collect(range(0.0, 1.0, 2^cores))
u₀ = qtt_sin(cores,λ=π)
init = rand_tt(u₀.ttv_dims, u₀.ttv_rks)
steps = collect(range(0.0,10.0,1000))
solution_explicit, error_explicit = euler_method(A, u₀, steps; return_error=true)
solution_implicit, rel_implicit = implicit_euler_method(A, u₀, init, steps; return_error=true)
solution_crank, rel_crank = crank_nicholson_method(A, u₀, init, steps; return_error=true, tt_solver="mals")
fig = Figure()
ax = Axis(fig[1, 1], xlabel = "x", ylabel = "u(x)", title = "Comparison of Time-Stepping Methods")
lines!(ax, xes, qtt_to_function(solution_explicit), label = "Explicit Euler", linestyle = :solid, linewidth=3)
lines!(ax, xes, qtt_to_function(solution_implicit), label = "Implicit Euler", linestyle = :dot, linewidth=3)
lines!(ax, xes, qtt_to_function(solution_crank), label = "Crank-Nicolson", linestyle = :dash, linewidth=3)
axislegend(ax)
fig

And print the relative errors
println("Relative error for explicit Euler: ", error_explicit)
println("Relative error for implicit Euler: ", rel_implicit)
println("Relative error for Crank-Nicolson: ", rel_crank)
Relative error for explicit Euler: 2.7254393110550548e-5
Relative error for implicit Euler: 4.831405661616409e-6
Relative error for Crank-Nicolson: 4.8314364669860835e-6