Título: Duda python método optimización levenberg marquardt Publicado por: Quini sb en 5 Septiembre 2016, 05:27 am Buenas noches. Tengo una duda en como usar el metodo de optimizacion levenberg marquardt 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): 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 Pd: no veo Subforos de python, si este lenguaje no se trata en este foro disculparme Título: Re: Duda python método optimización levenberg marquardt Publicado por: tincopasan en 5 Septiembre 2016, 07:13 am hay un foro de python en scripting.
Con respecto a tu problema no se nada del módulo que usas y que hace, pero te diré algunos comentarios: 1- cuando usas Código ¿está dentro de una clase para el uso de tkinter? 2- Código si eso es una línea de código me parece muy raro el uso de "." después de cada número 3- Código
root es una función que desconozco, pero da toda la sensación de estar mal declarada en sus parametros. igual si querés mandame una copia del script completo y sería más fácil revisarlo(además aprendo algo nuevo) Título: Re: Duda python método optimización levenberg marquardt Publicado por: Quini sb en 5 Septiembre 2016, 11:44 am Agradeceria si algun moderador lo mueve a su correspondiente lugar
1 Si 2 Si es linea de codigo, lo hago asi para forzar que sean numeros reales(constumbre de programacion, no se si en este lenguaje son directamente reales, vengo de otro en que por defecto son enteros) 3 El error viene de ahi, cambiando el metodo de optimizacion(solo esa sentencia) funciona correctamente Te lo envio por mensaje, gracias y un saludo EDITO: te lo he mandado al correo, pues el mensaje excedia los 100.000 caracteres No te asustes, es culpa del fichero de prueba para ejecutar el programa jajaja |