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