[Numpy-discussion] Combining Sigmoid Curves
Rich Shepard
rshepard@appl-ecosys....
Fri May 2 14:49:36 CDT 2008
When I last visited I was given excellent advice about Gaussian and other
bell-shaped curves. Upon further reflection I realized that the Gaussian
curves will not do; the curve does need to have y=0.0 at each end.
I tried to apply a Beta distribution, but I cannot correlate the alpha and
beta parameters with the curve characteristics that I have.
What will work (I call it a pi curve) is a matched pair of sigmoid curves,
the ascending curve on the left and the descending curve on the right. Using
the Boltzmann function for these I can calculate and plot each individually,
but I'm having difficulty in appending the x and y values across the entire
range. This is where I would appreciate your assistance.
The curve parameters passed to the function are the left end, right end,
and midpoint. The inflection point (where y = 0.5) is half-way between the
ends and the midpoint.
What I have in the function is this:
def piCurve(ll, lr, mid):
flexL = (mid - ll)/2.0
flexR = (lr - mid)/2.0
tau = (mid - ll)/10.0
x = []
y = []
xL = nx.arange(ll,mid,0.1)
for i in xL:
x.append(xL[i])
yL = 1.0 / (1.0 + nx.exp(-(xL-flexL)/tau))
for j in yL:
y.append(yL[j])
xR = nx.arange(mid,lr,0.1)
for i in xR:
x.append(xR[i])
yR = 1 - (1.0 / (1.0 + nx.exp(-(xR-flexR)/tau)))
for j in yR:
y.append(yR[j])
appData.plotX = x
appData.plotY = y
Python complains about adding to the list:
yL = 1.0 / (1.0 + nx.exp(-(x-flexL)/tau))
TypeError: unsupported operand type(s) for -: 'list' and 'float'
What is the appropriate way to generate two sigmoid curves so that the x
values range from the left end to the right end and the y values rise from
0.0 to 1.0 at the midpoint, then lower to 0.0 again?
Rich
More information about the Numpy-discussion
mailing list