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

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).