# [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).

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)