PeriodicMatrices.jl
provides the basic tools to handle periodic time-varying matrices. This package is the basis for developing the PeriodicMatrixEquations.jl
and PeriodicSystems.jl
packages.
For a real periodic matrix A(t)
with period T
, the dependence of the time variable t
can be either continuous or discrete.
A continuous-time periodic matrix can be specified in one of the following forms:
-
periodic matrix function, with
A(t)
a matrix function of the real variablet ā [0, T)
; -
periodic symbolic matrix, with
A(t)
a symbolic matrix as defined in theSymbolics.jl
package depending on the (symbolic) real variablet ā [0, T)
; -
harmonic matrix series, with
A(t)
defined asp A(t) = A_0 + ā ( Ac_i*cos(iĻt)+As_i*sin(iĻt) ) , i=1
where
Ļ = 2Ļ/T
andA_0
,Ac_i
,As_i
fori = 1,..., p
are real matrices; -
periodic matrix time series with constant dimensions on a uniform time grid;
-
periodic matrix time series with constant dimensions on a non-uniform time grid;
-
Fourier matrix series approximation, with
A(t)
a Fourier series representation (similar to the harmonic matrix series representation) as defined in theApproxFun.jl
package.
A discrete-time periodic matrix can be specified in the following forms:
-
periodic matrix time series with time-varying dimensions on a uniform time grid;
-
periodic matrix time series with time-varying dimensions on a non-uniform time grid;
-
periodic matrix time series with constant dimensions on a uniform time grid;
-
periodic matrix time series with constant dimensions on a non-uniform time grid.
All possible conversions between the above representations are supported.
The usage of the FFTW
, Symbolics.jl
, ApproxFun.jl
and Interpolations
packages to implement some conversions is highly acknowledged.
Several operations on periodic matrices are implemented, such as, inversion, transposing, norms, derivative/time-shifting, trace. All operations with two periodic matrices such as addition/substraction, multiplication, horizontal/vertical concatenation, block-diagonal appending, allow different, but commensurate, periods.
Several advanced computational functions are provided to compute the characteristic multipliers and characteristic exponents of periodic matrices, using methods based on the periodic Schur decomposition of matrix products (provided in the SLICOT
library or in the PeriodicSchurDecompositions.jl
package) or structure exploitung fast algorithms requiring no external supporting packages. These functions are instrumental to apply Floquet theory to study the properties of solutions of various classes of differential equations (e.g., Mathieu, Hill, Meissner) and the stability of linear periodic systems (see PeriodicSystems.jl
package). The implementations of several functions rely on the high performance ODE solvers available in the OrdinaryDiffEq
and IRKGaussLegendre
packages.
In developing this package I benefitted from the generous support of the Julia developers community, with special mention of @kellertuer, Ralph A. Smith, @ChrisRackauckas, mikelehu, @mkitti, @dlfivefifty.
I am open to constructive critics and suggestions. I am aware of many possible improvements for this package, addressing issues such as, the reduction of the number of allocations, improvements of the definitions of periodic matrix objects, extension with new periodic matrix representations, better support of large periodic matrices, to mention a few of them.