Basis
DataDrivenDiffEq.Basis
— Typestruct Basis{IMPL, CTRLS} <: 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.
The optional implicits
declare implicit variables in the Basis
, meaning variables representing the (measured) target of the system. Right now, only supported with the use of ImplicitOptimizer
s.
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 keyword arguments include name
, which can be used to name the basis, and observed
for defining observables.
Fields
eqs
: The equations of the basisunknowns
: Dependent (state) variablesctrls
: Control variablesps
: Parametersobserved
: Observediv
: Independent variableimplicit
: Implicit variables of the basisf
: Internal function representation of the basisname
: Name of the basissystems
: 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.
API
Next to ModelingToolkits API for AbstractSystems
, a Basis
can be called with the following methods:
DataDrivenDiffEq.dynamics
— Functiondynamics(b)
Returns the internal function representing the dynamics of the `Basis`. This can be called either inplace or out-of-place
with the typical SciML signature `f(u,p,t)` or `f(du,u,p,t)`. If control variables are defined, the function can also be called
by `f(u,p,t,control)` or `f(du,u,p,t,control)` and assumes `control .= 0` if no control is given.
DataDrivenDiffEq.jacobian
— Functionjacobian(x)
jacobian(x, eval_expression)
Returns a function representing the Jacobian matrix / gradient of the Basis
with respect to the states as a function with the common signature f(u,p,t)
for out of place and f(du, u, p, t)
for in place computation. If control variables are defined, the function can also be called by f(u,p,t,control)
or f(du,u,p,t,control)
and assumes control .= 0
if no control is given.
If the Jacobian with respect to other variables is needed, it can be passed via a second argument.
DataDrivenDiffEq.get_parameter_values
— Functionget_parameter_values(x)
Return the default values for the given Basis
. If no default value is stored, returns zero(T)
where T
is the symtype
of the parameter.
Note
This extends getmetadata
in a way that all parameters have a numeric value.
DataDrivenDiffEq.get_parameter_map
— Functionget_parameter_map(x)
Return the default values as a vector of pairs for the given Basis
. If no default value is stored, returns zero(T)
where T
is the symtype
of the parameter.
Note
This extends getmetadata
in a way that all parameters have a numeric value.
Generators
DataDrivenDiffEq.monomial_basis
— Functionmonomial_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
— Functionpolynomial_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
— Functionsin_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
— Functioncos_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
— Functionfourier_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
— Functionchebyshev_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
.