### Re: Sigmoid Curve Fitting

Warren Weckesser <warren.weckesser <at> enthought.com>

2010-09-21 16:16:40 GMT

On 9/21/10 10:24 AM, Chris Spencer wrote:
> Is it possible to get it to determine the asymptotes as well? It seems
> to assume the curve will be bounded between y=0 and 1, whereas my data
> can have arbitrary limits. I tried changing sigmoid() to:
>
> def sigmoid(x, x0, k, a):
> y = a * 1 / (1 + np.exp(-k*(x-x0)))
> return y
>
> but that only results in a curve of f(x)=0.5.
>
The following is a variation that includes more parameters in the family
of sigmoid functions. But bear in mind, I chose this family of
functions just as a demonstration of curve_fit. I don't know if it
makes sense to use this family for your data. The appropriate family to
use depends on the nature of the data.
-----
import numpy as np
import pylab
from scipy.optimize import curve_fit
def sigmoid(x, x0, k, a, c):
y = a / (1 + np.exp(-k*(x-x0))) + c
return y
xdata = np.array([0.0, 1.0, 3.0, 4.3, 7.0, 8.0, 8.5, 10.0,
12.0, 14.0])
ydata = np.array([0.11, 0.12, 0.14, 0.21, 0.83, 1.45, 1.78, 1.9,

(Continue reading)