The `xerus` library is a general purpose library for numerical calculations with higher order tensors, Tensor-Train Decompositions / Matrix Product States and other Tensor Networks.
The focus of development was the simple usability and adaptibility to any setting that requires higher order tensors or decompositions thereof.
For tutorials and a documentation see <ahref="http://libxerus.org">the doxygen documentation</a>.
For tutorials and a documentation see <ahref="http://libxerus.org">the documentation</a>.
The source code is licenced under the AGPL v3.0. For more details see the LICENSE file.
...
...
@@ -20,6 +20,7 @@ The source code is licenced under the AGPL v3.0. For more details see the LICENS
Copy the default configuration and modify it for your needs
> cp config.mk.default config.mk
> nano config.mk
Test whether everything works correctly with
...
...
@@ -27,9 +28,10 @@ Test whether everything works correctly with
build (and optionally install) the library with
> make all -j4
> sudo make install
and you should be ready to use the library. For more details see <ahref="https://www.libxerus.org/md_building_xerus.html">the "Building Xerus" page in the documentation</a>.
and you should be ready to use the library. For more details see <ahref="https://www.libxerus.org/building_xerus/">the "Building Xerus" page in the documentation</a>.
In this example we want to solve a Markovian Masterequation corresponding to a genetic signal cascade. We will use an implicit Euler
method in the time direction using the ALS algorithm to solve the individual steps. The construction of the operator will be done
according to the SLIM decomposition derived in [[P. Gelß et al., 2017]](https://arxiv.org/abs/1611.03755)(cf. Example 4.1 therein).
## Transition Matrices
Our solution tensor $X[i_1, i_2, \dots]$ represent the likelyhood, that there are $i_1$ copies of protein one, $i_2$ copies of protein two
and so on. As the likelyhood of very large $i_j$ becomes small very fast we can restrict ourselves to a finite tensor with $i_j \in \\{0,1,\dots,n_j\\}$
represented in our sourcecode as
__tabsStart
~~~ cpp
constsize_tMAX_NUM_PER_SITE=32;
~~~
__tabsMid
~~~ py
MAX_NUM_PER_SITE=32
~~~
__tabsEnd
For the different events we can now describe matrices that have the corresponding action. We will denote as $M$ the creation of a
new protein (remove current number of proteins = diagonal equals -1; add current number + 1 proteins = offdiagonal equals 1)
The probability of construction of a protein $x_i$ is actually given in terms of the number of proteins $x_{i-1}$ as $\frac{x_{i-1}}{5+x_{i-1}}$,
so we will need another matrix $L$ that gives these probabilities, such that we can later construct the corresponding two-site TT Operator as $L\otimes M$.