# Basis

`DataDrivenDiffEq.Basis`

— Type`mutable struct Basis <: DataDrivenDiffEq.AbstractBasis`

A basis over the states with parameters, independent variable, and possible exogenous controls. It extends an `AbstractSystem`

as defined in `ModelingToolkit.jl`

. `f`

can either be a Julia function which is able to use ModelingToolkit variables or a vector of `eqs`

. It can be called with the typical SciML signature, meaning out of place with `f(u,p,t)`

or in place with `f(du, u, p, t)`

. If control inputs are present, it is assumed that no control corresponds to zero for all inputs. The corresponding function calls are `f(u,p,t,inputs)`

and `f(du,u,p,t,inputs)`

and need to be specified fully.

If `linear_independent`

is set to `true`

, a linear independent basis is created from all atom functions in `f`

.

If `simplify_eqs`

is set to `true`

, `simplify`

is called on `f`

.

Additional keyworded arguments include `name`

, which can be used to name the basis, and `observed`

for defining observables.

**Fields**

`eqs`

The equations of the basis

`states`

Dependent (state) variables

`ctrls`

Control variables

`ps`

Parameters

`observed`

Observed

`iv`

Independent variable

`f`

Internal function representation of the basis

`name`

Name of the basis

`systems`

Internal systems

**Example**

```
using ModelingToolkit
using DataDrivenDiffEq
@parameters w[1:2] t
@variables u[1:2](t)
Ψ = Basis([u; sin.(w.*u)], u, parameters = p, iv = t)
```

**Note**

The keyword argument `eval_expression`

controls the function creation behavior. `eval_expression=true`

means that `eval`

is used, so normal world-age behavior applies (i.e. the functions cannot be called from the function that generates them). If `eval_expression=false`

, then construction via GeneralizedGenerated.jl is utilized to allow for same world-age evaluation. However, this can cause Julia to segfault on sufficiently large basis functions. By default eval_expression=false.

## Generators

`DataDrivenDiffEq.monomial_basis`

— Function```
monomial_basis(x)
monomial_basis(x, degree)
```

Constructs an array containing monomial basis in the variables `x`

up to degree `c`

of the form `[x₁, x₁^2, ... , x₁^c, x₂, x₂^2, ...]`

.

`DataDrivenDiffEq.polynomial_basis`

— Function```
polynomial_basis(x)
polynomial_basis(x, degree)
```

Constructs an array containing a polynomial basis in the variables `x`

up to degree `c`

of the form `[x₁, x₂, x₃, ..., x₁^1 * x₂^(c-1)]`

. Mixed terms are included.

`DataDrivenDiffEq.sin_basis`

— Function```
sin_basis(x, coefficients)
```

Constructs an array containing a Sine basis in the variables `x`

with coefficients `c`

. If `c`

is an `Int`

returns all coefficients from 1 to `c`

.

`DataDrivenDiffEq.cos_basis`

— Function```
cos_basis(x, coefficients)
```

Constructs an array containing a Cosine basis in the variables `x`

with coefficients `c`

. If `c`

is an `Int`

returns all coefficients from 1 to `c`

.

`DataDrivenDiffEq.fourier_basis`

— Function```
fourier_basis(x, coefficients)
```

Constructs an array containing a Fourier basis in the variables `x`

with (integer) coefficients `c`

. If `c`

is an `Int`

returns all coefficients from 1 to `c`

.

`DataDrivenDiffEq.chebyshev_basis`

— Function```
chebyshev_basis(x, coefficients)
```

Constructs an array containing a Chebyshev basis in the variables `x`

with coefficients `c`

. If `c`

is an `Int`

returns all coefficients from 1 to `c`

.