I want to model a dynamical system of the form

$\frac{\text{d}x}{\text{d}t} = f(x)+nx\delta(\pi(t-0.2)). $

The problem is that I have a point source which is reoccurring at fixed time steps (say at 0.2,1.2,2.2...). How can I handle this numerically? I have tried to figure out solutions and it seems that there are two "easy" approaches:

1) Consider a grid with a fixed step size and define your delta function as 0 on all grid points except the relevant points. However, the influence of the delta function depends strongly on the step size solving this numerically which is why I think this is not correct.

2) Use a Gaussian to represent the Delta-function. This could also work for adaptive step sizes. However, in this case the results depend on the variance of the Gaussian which should be small. Is this a better approach? If this approach works, I could generate an array consisting of the Gaussians at different time steps which is zero elsewhere and use this with normal ODE-solvers, right?

The third approach is a little bit nasty in the sense that it cannot be used with "normal" ODE solvers. It would be to evaluate f(x) until we approach the point source and take $y(+\epsilon)=e^ny(-\epsilon)$ (Numerical way to deal with Dirac delta.). This does not depend on the variance or step size. Should I go with this one? I could use normal ODE-solvers until the fixed time step and then just take the exponential. And do you have any references on that?

Thank you very much for your help!


If you have times $a_0<a_1<..$ and coefficients $c_k$ and want to solve $$ \dot x(t)=f(x(t))+\sum_{k=0}^N c_kδ(t−a_k) $$ then you can consider the function $u(t)=x(t)-\sum_{k=0}^N c_kH(t−a_k)$ where $H$ is the Heaviside or unit jump/ramp function. Then you get that $$ \dot u(t)=\dot x(t)-\sum_{k=0}^N c_kδ(t−a_k)=f\left(u(t)+\sum_{k=0}^N c_kH(t−a_k)\right) $$ which merely has a discontinuous right side. Numerical solvers of the usual sort with adaptive step size control will not be very happy with that situation, but usually can deal with it in a satisfying manner.

In the modified problem $$ \dot x(t)=f(x(t))+x(t)\sum_{k=0}^N c_kδ(t−a_k) $$ you can again try to combine $\dot x(t)-x(t)\sum_{k=0}^N c_kδ(t−a_k)$ into a derivative of some substitution variable. This is achieved in this case with the help of an integrating factor, resulting in setting $x(t)=\exp\left(\sum_{k=0}^N c_kH(t−a_k)\right)u(t)$ where now $u$ satisfies the ODE $$ \dot u(t)=\exp\left(-\sum_{k=0}^N c_kH(t−a_k)\right)f\left(\exp\left(\sum_{k=0}^N c_kH(t−a_k)\right)u(t)\right). $$ This has again a piecewise continuous right side, so that the solution $u$ is continuous and piecewise continuously differentiable. Again numerical methods can find this solution, in the post-processing the multiplication with the jumpy exponential introduces the jumps for $x$.

| cite | improve this answer | |
  • $\begingroup$ First of all: Thank you for the answer. I just realized that I oversimplified the problem for the question. The magnitude of the pulse is state dependent. I changed that in the original question. Is this approach affected by this? As far as I understand it, this would make the derivative in the last line more complex, right? $\endgroup$ – gumpel Feb 21 '19 at 23:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.