generate.1order {doremi} | R Documentation |
Generation of the first order differential equation solution with deSolve, for given fixed coefficients and initial condition
Description
generate.1order
returns a data frame containing the time (supplied as input) and the solution to a first order
differential equation. The coefficients are provided as inputs, as well as the initial condition
Where y(t) is the signal, dy(t) its derivative, is the decay time, k the gain and yeq the equilibrium value.
u(t) is the source term of the equation, that is an external excitation perturbing the dynamics.
The latter is provided as input or is set to null. The numerical solution is generated with deSolve.
Usage
generate.1order(
time = 0:100,
excitation = NULL,
y0 = 0,
t0 = NULL,
tau = 10,
k = 1,
yeq = 0
)
Arguments
time |
Is a vector containing the time values corresponding to the excitation signal. |
excitation |
Is a vector containing the values of the excitation signal (u(t) in the equation). If NULL, it is considered to be 0. |
y0 |
Signal initial value y(t=t0). Default is 0 |
t0 |
Time corresponding to the signal initial value y(t=t0). Default is the minimum value of the time vector. Must be a value between minimum and maximum value of the time vector |
tau |
Signal decay time. It represents the characteristic response time of the solution of the differential equation. A negative value will produce divergence from equilibrium. |
k |
Signal gain. Default is 1. It represents the proportionality between the stationary increase of signal and the excitation increase that caused it. Only relevant if the excitation is non null. |
yeq |
Signal equilibrium value. Stationary value when the excitation term is 0. |
Value
Returns a data.table containing three elements:
y is a vector containing the values calculated with deSolve so that y is a solution to a first order differential equation with the constant coefficients provided as input.
t is a vector containing the corresponding time values
exc
Examples
generate.1order(t0 = 2.5,y0 = 2)
test <- generate.1order(time = 0:49, excitation = c(rep(0,10),rep(1,40)))
plot(test$t,test$y)
lines(test$t,test$exc,col = 2)
### see the influence of tau
different_tau <- data.table::rbindlist(lapply(1:5*4,function(x){
tmp <- generate.1order(t0 = 0,
y0 = 2,
tau = x)
tmp[,tau := as.factor(x)][]
}))
ggplot2::ggplot(data = different_tau,
ggplot2::aes(t,y,color = tau))+
ggplot2::geom_line()
### effect of the gain
different_gain <- data.table::rbindlist(lapply(1:5,function(x){
tmp <- generate.1order(
time = 1:100,
excitation = as.numeric(1:100 > 50),
y0 = 0,
tau = 10,
k = x)
tmp[,k := as.factor(x)][]
}) )
ggplot2::ggplot(different_gain)+
ggplot2::geom_line(ggplot2::aes(t,y,color = k))+
ggplot2::geom_line(ggplot2::aes(t,exc,color = "excitation"))