# numiMultiX: Numerical Integration polynomial ODEs with Multiple eXternal... In GPoM: Generalized Polynomial Modelling

## Description

Function for the numerical integration of Ordinary Differential Equations of polynomial form including single or Multiple external forcing

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10``` ```numiMultiX( nVar, dMax, Istep = 1000, onestep = 1/125, KDf, extF = extF, v0 = NULL, method = "rk4" ) ```

## Arguments

 `nVar` Number of variables considered in the polynomial formulation. `dMax` Maximum degree of the polynomial formulation. `Istep` The number of integration time steps. By default, Istep = 1000 `onestep` The time step to be used for numerical integration `KDf` The nonautonomous model in its matrix formulation, NA (i.e. not available) values should be provided for forcing variables provided as an external signal `extF` A matrix providing the time vector in the first column, and time series of each forcing in the next ones `v0` The initial conditions. Its length should be in agreement with the dynamical system dimension. Therefore, 0 or NA can be provided for external forcing `method` integration method. By default 'rk4' is used

## Value

A list of two variables:

`\$KDf` The nonautonomous model in its matrix formulation

`\$reconstr` The integrated trajectory (first column is the time, next columns are the model variables)

## Author(s)

Sylvain Mangiarotti

`derivODE2`, `numicano`, `numinoisy`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59``` ```############# # Example 1 # ############# # build a non autonomous model nVar = 4 dMax = 3 gamma = 0.05 KDf=matrix(0, nrow = d2pMax(nVar = nVar, dMax = dMax), ncol = nVar) KDf[11,1] = 1 KDf[2,2] = 1 KDf[5,2] = 1 KDf[11,2] = -gamma KDf[35,2] = -1 KDf[2,3] = NA KDf[2,4] = NA visuEq(K = KDf, substit = c('x', 'y', 'u', 'v')) # build an external forcing # number of integration time step Istep <- 500 # time step smpl <- 1 / 20 # output time vector tvec <- (0:(Istep-1)) * smpl # angular frequency (for periodic forcing) omega = 0.2 # half step time vector (for Runge-Kutta integration) tvecX <- (0:(Istep*2-2)) * smpl / 2 # generate the forcing (here variables u and v) extF = cbind(tvecX, -0.1 * cos(tvecX * omega), 0.05 * cos(tvecX * 16/3*omega)) # decimate the data extFrs <- extF[seq(1,dim(extF),by=50),] extFrs <- rbind(extFrs,extF[dim(extF),]) # Initial conditions to be used (external variables can be set to 0) etatInit <- c(-0.616109362 , -0.126882584 , NA, NA) # model integration out <- numiMultiX(nVar, dMax, Istep=Istep, onestep=smpl, KDf=KDf, extF, v0=etatInit, method="rk4") outrs <- numiMultiX(nVar, dMax, Istep=Istep, onestep=smpl, KDf=KDf, extFrs, v0=etatInit, method="rk4") dev.new() par(mfrow = c(2, 2), # 2 x 2 pictures on one plot pty = "s") plot(out\$reconstr[,2],out\$reconstr[,3], xlab = 'x(t)', ylab = 'y(t)', type = 'l', col = 'red') lines(outrs\$reconstr[,2],outrs\$reconstr[,3], xlab = 'x(t)', ylab = 'y(t)', type = 'l', col = 'green') plot(out\$reconstr[,2],out\$reconstr[,4], xlab = 'x(t)', ylab = 'u(t)', type = 'l', col = 'red') plot(out\$reconstr[,4],out\$reconstr[,5], xlab = 'u(t)', ylab = 'v(t)', type = 'l', col = 'red') ```