I have a question about how to use the Levenberg-Marquart optimization method in scipy come several of these methods: link
I have tried two methods (nelder-mead and basinhopping) and they work correctly with the following sentence:
Nelder mead:
res0_10 = optimize.minimize(f0_10,
x0,
method='Nelder-Mead',
options={'disp': True, 'maxiter': 2000})
Basinhopping
res0_10 = optimize.basinhopping(f0_10, x0, niter=100, disp=True)
The problem arises when I use the Levenberg-Marquardt (I copy only the part of the error, the program is long so I do not copy the rest):
def f0_10(x):
m, u, z, s = x
for i in range(alt_max):
if i==alt_min: suma=0
if i > alt_min:
suma = suma + (B(x, i)-b0_10(x, i))**2
return np.sqrt(suma/alt_max)
x0 = np.array([40., 0., 500., 50.])
res0_10 = root(f0_10, x0, jac=True, method='lm')
The program compiles well, but at the time of execution, I get the following error:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Quini SB\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.7.4.3348.win-x86_64\lib\lib-tk\Tkinter.py", line 1536, in __call__ return self.func(*args)
File "C:\Users\Quini SB\Desktop\tfg\Steyn - levmar.py", line 384, in askopenfilename res0_10 = root(f0_10, x0, jac=True, method='lm')
File "C:\Users\Quini SB\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\optimize\_root.py", line 188, in root sol = _root_leastsq(fun, x0, args=args, jac=jac,
**options)
File "C:\Users\Quini SB\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\optimize\_root.py", line 251, in _root_leastsq factor=factor, diag=diag)
File "C:\Users\Quini SB\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\optimize\minpack.py", line 377, in leastsq shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
File "C:\Users\Quini SB\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\optimize\minpack.py", line 26, in _check_func res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
File "C:\Users\Quini SB\AppData\Local\Enthought\Canopy\User\lib\site-packages\scipy\optimize\optimize.py", line 64, in __call__ self.jac = fg[1]
IndexError: invalid index to scalar variable.
I'm not sure why, I'm a student and I need it for the TFG, but my teacher does not control python , so it's probably silly, but I'm not able to fix it.