I have a couple of first order differential equations whose solutions I would like to approximate numerically in my python app.
MATLAB ODEs solvers have a built-in detection of events. I do not see a way to make scipy solvers properly handle differential equations with Dirac delta functions (e.g. like the one below) so I would like to write a simple solver myself.
I know the locations of problematic points beforehand yet I am uncertain on how to properly split a differential equation on a delta function. Take the following simplified example: $$ \frac{dv}{dt} = -\frac{v}{\tau} + \delta(t-2), \quad v(0)=1.0. $$ How should I proceed? Can I just run e.g. Euler method from 0 to 2 including, then add 1 to the last step result (i.e. for $t=2$), and then start a new integration for the remaining time using the result for $t=2$ as an initial value?
EDIT: As explained in the comments below I can only approximate the solutions numerically (I might not know some of the DEs in advance to solve them analytically). So I am interested in how to split a DE on a delta function (in problematic points) while using methods like Euler or Runge-Kutta.
$$ \frac{dv}{dt} +\frac{v}{\tau} = \delta(t-2), \quad v(0)=1 $$ The solution of the associated homogeneous ODE $\quad \frac{dv}{dt} +\frac{v}{\tau}=0\quad $ is $\quad v=C\:e^{-\frac{t}{\tau}}$
General solution of the inhomogeneous ODE on the form $\quad v=f(t)\:e^{-\frac{t}{\tau}}$ $$\frac{dv}{dt} +\frac{v}{\tau} =\:e^{-\frac{t}{\tau}}\left(f'(t)-\frac{f(t)}{\tau} \right)+\frac{1}{\tau}f(t)\:e^{-\frac{t}{\tau}} = \delta(t-2)$$
$$f'(t)= e^{\frac{t}{\tau}}\delta(t-2)$$ $$f(t)=\int e^{\frac{t}{\tau}}\delta(t-2)dt= e^{\frac{2}{\tau}}H(t-2)+c$$ $H$ is the symbol for the Heaviside step function.
$v=e^{-\frac{t}{\tau}}f(t)= e^{-\frac{t}{\tau}}\left( e^{\frac{2}{\tau}}H(t-2)+c\right)$
$$v(t)= e^{-\frac{t-2}{\tau}}H(t-2)+c\:e^{-\frac{t}{\tau}}$$
With condition $v(0)=1 \quad\to\quad 1= e^{-\frac{0-2}{\tau}}H(-2)+c\:e^{-\frac{0}{\tau}}\quad\to\quad c=1- e^{\frac{2}{\tau}}(0)=1$
$$v(t)= e^{-\frac{t-2}{\tau}}H(t-2)+e^{-\frac{t}{\tau}}$$