# What is the most pythonic way to solve a differential equation using the Euler method?

For example, with this differential equation, how can I do it in a pythonic way?

dx/dt=f(x,t)


I have a way to do it, but I think this is not the most pythonic way:

import numpy as np
dt=0.01
N_iter=10./dt
def f(x,t):
return x**2*t#insert your favorite function here
x=np.zeros(N_iter)
for i in range(N_iter-1):
x[i+1]=x[i]+dt*f(x[i],i*dt)

• What was wrong with scipy.integrate? – Gareth Rees Feb 13 '14 at 20:50
• What makes you think the code isn't Pythonic? (apart from PEP8 issues) – Quentin Pradet Feb 14 '14 at 10:25
• Well I thought that there was only one pythonic way to do something and I was wondering if I was doing it right. The problem with 'scipy.integrate' is that I must do each step in turn inside a loop. – gota Feb 14 '14 at 16:01
• @NunoCalaim: Have you looked at scipy.integrate.odeint? – Gareth Rees Feb 19 '14 at 13:46

## 1 Answer

Using a for loop is not an unpythonic way at all. Instead, an Euler method could be implemented with a recursive function, but it not necessary and less optimized in Python.

However, methods for vectorizing recursive sequences are discussed on the numpy-discussion mailing-list. I encourage you to use structures like for loops in such situations. You will minimize the risk of errors by writing simple and concise codes.