Observé el siguiente comportamiento al usar NMinimize
en Mathematica. La primera invocación de la función objetivo es con nombres de variables, en lugar de con puntos del espacio, como cabría esperar.¿Mathematica llama NMinimize con símbolos en lugar de números?
Así, por ejemplo si mi función objetivo es un módulo, este módulo se llama sólo una vez, y luego evaluadas simbólicamente en posteriores iteraciones, esta expresión simbólica se evalúa con los puntos del espacio de las variables.
Este comportamiento podría frenar significativamente el cálculo para una gran expresión. ¿Hay alguna forma de evitar esto? Alguien más ha experimentado esto? ¿Hay alguna forma de acelerar NMinimize
?
Ejemplo:
dummy[x_] := Module[
{},
Print["x=", x ];
4 x^4 - 4 x^2 + 1
]
In: NMinimize[dummy[x], x]
Out:x=x
{0., {x -> 0.707107}}
Bienvenido a Stackoverflow –
Dependiendo del módulo, este comportamiento en realidad acelera la evaluación. En el ejemplo simple que dio, significa que solo necesita hacer una llamada a la función una vez. Pero sí, para algunas funciones, un entero simbólico o exacto/racional (o numérico exacto como 'Pi' o' Sqrt [2] ') puede ser increíblemente lento. En ese caso, restrinja su función según lo sugerido por @ Mr.Wizard. – Simon
Como nota aparte: es interesante observar que 'NMinimize [Unevaluated [dummy [x]], x]' llama a 'dummy' con' x = x' 4 veces y nunca numéricamente. – Simon