Wolfram Computation Meets Knowledge

Comment utiliser ?NumericQ pour modifier l’ordre de l’évaluation ?

Lorsque vous utilisez des fonctions numériques telles que NIntegrate ou NMaximize, l’ordre de l’évaluation est important. Considérons la fonction suivante, appelé f :

f[a_] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]

La fonction f ressemble à une fonction bien définie, car elle évalue pour des valeurs numériques telles que f[0.5]. Le problème apparaît lorsque la fonction f reçoit un symbole au lieu d’un nombre :

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}}

Comme a n’est pas défini, Wolfram Language ne peut pas intégrer numériquement l’expression (2 - a) Sin[a x] par rapport à x. Ce problème se pose pour toute fonction qui pourrait évaluer f[a] avant de fournir une valeur pour a. Par exemple, Wolfram Language ne peut pas maximiser numériquement la fonction 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}}

Ce code donne le même message d’erreur lorsque seulement f[a] est évalué. Dans cet exemple, f[a] est évaluée avant la déclaration NMaximize complète.

Pour changer l’ordre de l’évaluation, définissez la fonction f afin de n’évaluer que si elle reçoit une valeur numérique en utilisant NumericQ et le motif de test PatternTest. Ajoutez le motif ?NumericQ à la fin de l’argument de la fonction f :

Clear[f]
f[a_?NumericQ] := NIntegrate[ (2 - a) Sin[a x], {x, 0, Pi}]

Maintenant, l’évaluation de f[a] renvoie la fonction non évaluée au lieu de produire un message d’erreur. Wolfram Language peut maximiser numériquement la nouvelle définition de f parce que le motif ?NumericQ change l’ordre de l’évaluation :

NMaximize[f[a], a]
 {3.05716, {a -> 0.581569}}}

[English]

Cet article vous a-t-il aidé ?
Oui
Non

Vous avez des commentaires ?

Nous vous remercions de votre commentaire.

Envoyer

Contacter l'assistance

Vous avez une question sur la facturation, l'activation ou quelque chose de plus technique, nous sommes prêts à vous aider.

1-800-WOLFRAM (+1-217-398-0700 pour les appels internationaux)

Assistance clients

Du lundi au vendredi
De 8 h à 17 h, heure du Centre des États-Unis

  • Enregistrement ou activation du produit
  • Informations avant la vente et commande
  • Aide à l'installation et au premier lancement

Assistance technique avancée (pour les clients admissibles)

Du lundi au jeudi
De 8 h à 19 h, heure du Centre des États-Unis

Le vendredi
De 8 h 30 à 10 h et de 11 h à 17 h, heure du Centre des États-Unis

  • Assistance technique prioritaire
  • Assistance produits par des experts Wolfram
  • Aide avec la programmation en Wolfram Language
  • Assistance installation avancée