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