Wolfram Computation Meets Knowledge

¿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]

¿Le parece útil este artículo?
No

¿Tiene algún comentario?

Gracias por sus comentarios.

Enviar

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