Here is my code to solve differential equation dy / dt = 2 / sqrt(pi) * exp(-x * x) to plot erf(x).
import matplotlib.pyplot as plt from scipy.integrate import odeint import numpy as np import math def euler(df, f0, x): h = x[1] - x[0] y = [f0] for i in xrange(len(x) - 1): y.append(y[i] + h * df(y[i], x[i])) return y def i(df, f0, x): h = x[1] - x[0] y = [f0] y.append(y[0] + h * df(y[0], x[0])) for i in xrange(1, len(x) - 1): fn = df(y[i], x[i]) fn1 = df(y[i - 1], x[i - 1]) y.append(y[i] + (3 * fn - fn1) * h / 2) return y if __name__ == "__main__": df = lambda y, x: 2.0 / math.sqrt(math.pi) * math.exp(-x * x) f0 = 0.0 x = np.linspace(-10.0, 10.0, 10000) y1 = euler(df, f0, x) y2 = i(df, f0, x) y3 = odeint(df, f0, x) plt.plot(x, y1, x, y2, x, y3) plt.legend(["euler", "modified", "odeint"], loc='best') plt.grid(True) plt.show() And here is a plot:

Am I using odeint in a wrong way or it's a bug?