¿Cómo utilizar ?NumericQ para afectar el orden de evaluación?
Cuando utiliza funciones numéricas tales como NIntegrate o NMaximize, el orden de evaluación es importante. Considere la siguiente función llamada f
:
f[a_] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]
La función f
parece ser una función bien definida, ya que evalúa por valores numéricos tales como f[0.5]
. El problema aparece cuando a la función f
se le da un símbolo en lugar de un número:
f[a]
NIntegrate::inumr : The integrand (2 - a) Sin[a x] has evaluated to non-numerical values for all sampling points in the region with boundaries {{0, Pi}}
Ya que a
no ha sido definida, Wolfram Language no puede integrar numéricamente la expresión (2 - a) Sin[a x]
con respecto a x
. Esto es un problema para cualquier función que pueda evaluar f[a]
antes de proporcionar un valor para a
. Por ejemplo, Wolfram Language no puede maximizar numéricamente la función f
:
NMaximize[f[a], a]
NIntegrate::inumr : The integrand (2 - a) Sin[a x] has evaluated to non-numerical values for all sampling points in the region with boundaries {{0, Pi}}
Este código resulta en el mismo mensaje de error que cuando sólo se evalúa f[a]
. En este ejemplo, f[a]
es evaluado antes de la declaración completa de NMaximize.
Para cambiar el orden de evaluación, defina la función f
para evaluar sólo si recibe un valor numérico usando NumericQ y el patrón de prueba. Anexe el patrón ?NumericQ
al argumento de la función f
:
Clear[f]
f[a_?NumericQ] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]
Ahora, al evaluar f[a]
se devuelve la función sin evaluar en lugar de generar un mensaje de error. Wolfram Language puede maximizar numéricamente la nueva definición de f
porque el patrón ?NumericQ
cambia el orden de evaluación:
NMaximize[f[a], a]
{3.05716, {a -> 0.581569}}}
[English]
Contacte a soporte técnico
Estamos listos para ayudarlo a resolver sus preguntas sobre facturación, activación o problemas técnicos.
1-800-WOLFRAM (+1-217-398-0700 para usuarios internacionales)
Soporte al cliente
Lunes–viernes
8am–5pm hora estándar del centro
- Registro o activación del producto
- Información y ordenes de preventas
- Ayuda con la instalación y primera ejecución
Soporte técnico avanzado (para clientes admisibles)
Lunes–Jueves
8am–7pm hora estándar del centro
Viernes
8:30–10am y 11am–5pm hora estándar del centro
- Soporte técnico prioritario
- Asistencia sobre el producto por expertos Wolfram
- Ayuda con la programación de Wolfram Language
- Soporte de instalación avanzado