# [SciPy-user] Cannot get optimize.fmin_bfgs to work

Williamson, Ross Ross.Williamson@usap....
Tue Mar 3 03:15:08 CST 2009

```Hi All

I'm trying to get optimize.fmin_bfgs to work with no luck - I have an x,y array of numbers (about 100) to which I'm trying to fit a curve to. Both the auto fprime calculator and my own Jacbian do not work:

ValueError: setting an array element with a sequence.

I'm presuming I'm doing something really silly but I cannot find a simple example on the web (The one using the Rosenbrock function does not help).

The reason for doing this is that I want to progress to the bounded version of this function as leastsq works (but does not allow for bounded data).

Please find code below:

from numpy import zeros
from scipy import optimize
def fitfunc(p, x):

a_white = p[0]
a_pink = p[1]
a_red = p[2]
a_phot = p[3]
fk = p[4]  # photon_noise roll-off ~ 11.4 Hz mean 2008 season
alpha2 = p[5]

#result = wlevel*(1.+(f_knee/x)^alpha)
result = a_white + a_pink * x ** (-1.0) + a_red * x ** (-1.0 * alpha2) + a_phot / (1. + x ** 2 / fk ** 2)

return result

#Calculate Jacobian
J = zeros(len(p),float)
J[0] = 1.0
J[1] = 1.0/x
J[2] = x ** (-1.0 * alpha2)
J[3] = 1.0/(1. + x ** 2 / fk ** 2)
J[4] = (2 * a_phot * x**2)/(fk**3 * ((x**2/a_phot**2) + 1)**2)
J[5] = a_red * x **(-1.0* alpha2) * log(x)

return J

def errorfunc(p,x,y,err):
err_r = (y-fitfunc(p,x))/err
print err_r
return err_r

def test(x,y,noise):

pinit = [0.00125645, 0.00062822510, 0.00062822510,0.00062822510, 11.0, 2.0]

out = optimize.leastsq(errorfunc,pinit,args=(x,y,noise), full_output=1)