Tomamos o problema de Cauchy: $$\begin{gather} \dot{x}=f(x,t) \\ x(t_0) =x_0 \end{gather}$$ e um conjunto de nós $\{t_0,t_1,\dots,t_n\} \subset \mathbb{R}$ tal que $t_i = t_0+i*h$. Chamaremos o número real $h$ de passo do processo numérico. O objetivo é dar um método numérico que produza uma estimativa da solução nos nós, isto é, deveremos produzir uma estimativa $\{x_0,x_1,\dots,x_n\}$ tal que $x_i \approx x(t_i)$ se $x(t)$ for a solução do problema de Cauchy.
O método mais simples de fazermos esta estimativa é o método de Euler que podemos derivar da série de Taylor $$ \begin{gather} x_{i+1} \approx x(t_{i+1}) = x(t_i + h) = x(t_i) + f(x(t_i), t_i).h + \mathcal{o}(h^2) \\ x_{i+1} \approx x_i + f(x_i,t_i)h \end{gather}$$ O que nos dá um método de avanço $$ x_{i+1} = x_i + f(x_i,t_i)h $$
def edoeuler(func,t0,x0,tf,h):
''' Método de Euler para equações diferenciais ordinárias
func - função do lado direito
t0 - tempo inicial
x0 - estado inicial
tf - tempo final
h - passo do tempo '''
sol = [x0]
told = t0
tnovo = told + h
while tnovo <= tf :
x = sol[-1] + func(sol[-1],told)*h
sol.append(x)
[told,tnovo]=[tnovo,tnovo+h]
return sol