Python - Duda levenberg marquardt (metodo optimizacion)

 
Vista:

Duda levenberg marquardt (metodo optimizacion)

Publicado por Quini (1 intervención) el 05/09/2016 05:10:34
Buenas noches.

Tengo una duda en como usar el metodo de optimizacion levenberg marquare en python

En la libreria scipy vienen varios de estos metodos --> http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

He probado dos metodos(nelder-mead y basinhopping) y funcionan correctamente con la siguiente sentencia:

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)


El problema surge cuando uso el Levenberg-Marquardt(copio solo la parte del error, el programa es largo por eso no copio el resto):

1
2
3
4
5
6
7
8
9
10
11
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')


El programa compila bien, pero ahora de ejecutar, me surge el siguiente 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.











No tengo muy claro a que se debe, soy estudiante y lo necesito para el TFG, pero mi profesor no controla python, asi que probablemente sera una tonteria, pero no soy capaz de solucionarlo

Ante todo, muchas gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder