2011-07-06 5 views
11

Con Mathematica 7 y 8 hemos descubierto que Mathematica no guarda correctamente y obtiene el resultado de una rutina de adaptación. Espero que alguien aquí sepa: ¿Cuál es la mejor solución para este error?Guardar FittedModel tiene errores

Nuestra tarea es que estamos ajustando muchos conjuntos de datos con NonlinearModelFit, que devuelve un FittedModel para cada conjunto de datos. Estos ajustes tardan un poco y tratamos de usar Save y DumpSave para memorizar los resultados en un archivo. El análisis posterior usa Obtener para volver a colocar los modelos de Fitted.

Mathematica ejecuta Guardar & Obtenga sin advertencias pero el FittedModel que se devuelve tiene errores. Llamamos a Get y cargamos un FittedModel desde el disco, llamamos al resultado "foo". Trying foo [10] evalúa el modelo ajustado con la entrada 10. El error que vemos es que foo ["BestFitParameters"] debe devolverle a la lista las reglas pero en su lugar conecta la cadena a la función como si fuera un número como 10. Probando foo [{"BestFitParameters", "BestFitParameters"}] debería dar las reglas dos veces en una lista, pero no se evalúa con el error foo.

Hay un comportamiento extraño y engañosa en la parte superior de este, dependiendo de si quitamos/Borrar foo o salir del núcleo:

  • Calcular la FittedModel como foo
  • Guardar o foo DumpSave en el disco
  • eliminar y/o Clear foo
  • Get foo del disco
  • foo funciona bien

Pero si reiniciamos el kernel falla

  • Calcular la FittedModel como foo
  • Guardar o foo DumpSave en el disco
  • Kill y reiniciar el kernel
  • Get foo del disco
  • foo es buggy

¿Alguien ha visto este tipo de comportamiento antes?

¿Hay alguna buena explicación detrás de este error?

¿Existe una buena solución?

+3

¿Se puede agregar una muestra de código corto? –

Respuesta

10

Este es un error conocido, y por suerte hay una solución fácil. Antes de evaluar Get para leer el FittedModel guardado, evalúe un código modelo simulado.

In[1]:= NonlinearModelFit[Range[5], a x, x, a]; 

In[2]:= Get[FileNameJoin[{$HomeDirectory, "Desktop", "bignlm.mx"}]]; 

In[3]:= AbsoluteTiming[nlm["BestFitParameters"]] 

Out[3]= {17.6010000, {a -> 1.45015, b -> 2.33999}} 

Si esta evaluación inicial se omite, el modelo ajustado no parece funcionar correctamente como se dijo al parecer debido a un fallo para cargar automáticamente todo el código dependiente que implementa la funcionalidad. La evaluación de In[1] básicamente fuerza la carga.

+0

¡Intentaremos probarlo a primera hora de la mañana (hora del Reino Unido)! –

Cuestiones relacionadas