MultivariateSeries
Package for the decomposition of tensors and polynomial-exponential series.
Introduction
The package MultivariateSeries.jl
provides tools for the manipulation of sequences $(\sigma_{\alpha})_{\alpha} \in \mathbb{K}^{\mathbb{N}^{n}}$ indexed by multivariate indices $\alpha \in {\mathbb{N}^{n}}$ which are represented as series:
\[ \sigma(\mathbf{z}) = \sum_{\alpha \in {\mathbb{N}^{n}}} \sigma_{\alpha} \mathbf{y}^{\alpha}\]
The sequence $\sigma$ or the series $\sigma(y)$ represents a linear functional on the polynomials:
\[ \sigma: p= \sum_{\alpha \in \mathbb{N}^n} p_{\alpha} \mathbf{x}^{\alpha} \mapsto \sum_{\alpha \in \mathbb{N}^n} p_{\alpha} \sigma_{\alpha}\]
The series are implemented as association tables (or dictionnaries) between (a finite set of) monomials and coefficients. They are printed using dual variables dxi
=$y_i$:
using MultivariateSeries
X = @ring x1 x2
julia> p = (1+x1)^3 + 0.5*(1+x1+x2)^2
x1³ + 3.5x1² + x1x2 + 0.5x2² + 4.0x1 + x2 + 1.5
julia> sigma = dual(p)
dx1^3 + 1.5 + 3.5dx1^2 + 4.0dx1 + dx2 + dx1*dx2 + 0.5dx2^2
Since the series is represented by a table, the order in which the dual monomials are printed is the order used in the table. It is not necessarily sorted by a monomial ordering.
julia> sigma.terms
Dict{Monomial{true},Float64} with 7 entries:
x1³ => 1.0
1 => 1.5
x1² => 3.5
x1 => 4.0
x2 => 1.0
x1x2 => 1.0
x2² => 0.5
Series act as linear functionals on polynomials via the dot product:
julia> dot(sigma,x1^2)
3.5
julia> dot(sigma,x2^4)
0.0
Polynomial-exponential decomposition
The package provide tools for solving the following decomposition problem:
Given (the first terms of) sequence $\sigma \in \mathbb{K}^{\mathbb{N}^{n}}$ or the series $\sigma(\mathbf{y}) \in \mathbb{K}[[\mathbf{y}]]$, we want to decompose it as polynomial-exponential series
\[\sigma(\mathbf{y}) = \sum_{i=1}^r \omega_i(\mathbf{y}) e^{\xi_{i,1} y_1+ \cdots + \xi_{i,n} y_n}\]
with polynomials $\omega_{i}(\mathbf{y})$ and points $\xi_{i}= (\xi_{i,1}, \ldots, \xi_{i,n})\in \mathbb{K}^{n}$. $\omega_i$ are called the weights and $\xi_i$ the frequencies of the decomposition.
These types of decompositions appear in many problems (see Examples).
The package MultivariateSeries
provides functions to manipulate (truncated) series, to construct truncated Hankel matrices, and to compute such a decomposition from these Hankel matrices.
Examples
- Decomposition algorithm
- Multivariate exponential decompositon
- Weighted sum of Dirac Measures
- Sparse interpolation
- Decoding algebraic codes (BMS)
Functions and types
Installation
The package is available at https://github.com/AlgebraicGeometricModeling/MultivariateSeries.jl.git
To install it from Julia:
] add https://github.com/AlgebraicGeometricModeling/MultivariateSeries.jl.git
It can then be used as follows:
using MultivariateSeries
See the Examples for more details.
Dependencies
The package MultivariateSeries
depends on the following packages:
DynamicPolynomials
package on multivariate polynomials represented as lists of monomials.MultivariatePolynomials
generic interface package for multivariate polynomials.
These packages will be installed with MultivariateSeries
(see installation).