|
2.5.7 Évaluation dans les fonctions itératives
Les fonctions itératives internes de Mathematica comme Table et Sum, ainsi que Plot et Plot3D, évaluent leurs arguments d'une manière légèrement différente.
Lors de l'évaluation d'une expression comme Table[f, i, imax ], la première étape, comme expliqué à la section 2.6.6, consiste à définir la valeur de i comme locale. Ensuite, la limite imax dans la spécification de l'itérateur est évaluée. L'expression f demeure sous forme non évaluée, mais est évaluée à plusieurs reprises lorsque des valeurs successives sont assignées à i. Une fois l'évaluation terminée, la valeur globale de i est rétablie.
Ici, la fonction Random[ ] est évaluée quatre fois séparément, de sorte que quatre nombres pseudo-aléatoires sont produits.
In[1]:= Table[Random[ ], {4}]
Out[1]= 
Ceci évalue Random[ ] avant de l'insérer dans Table. Le résultat est une liste de quatre nombres identiques.
In[2]:= Table[ Evaluate[Random[ ]], {4} ]
Out[2]= 
Dans la plupart des cas, il est pratique que la fonction f dans une expression comme Table[f, i, imax ] demeure sous une forme non évaluée jusqu'à ce que des valeurs spécifiques soient assignées à i. C'est vrai en particulier si l'on ne peut trouver aucune forme symbolique complète de f qui soit valide pour tout i.
Ceci définit fac de manière à donner la factorielle lorsqu'elle a un argument entier, et NaN (pour "N'est pas un Nombre") sinon.
In[3]:= fac[n_Integer] := n! ; fac[x_] := NaN
Sous cette forme, fac[i] n'est pas évaluée tant que l'on n'a pas assigné une valeur entière explicite à i.
In[4]:= Table[fac[i], {i, 5}]
Out[4]= 
L'utilisation de Evaluate force l'évaluation de fac[i] avec i restant comme un objet symbolique.
In[5]:= Table[Evaluate[fac[i]], {i, 5}]
Out[5]= 
Lorsqu'il est possible de trouver une forme symbolique complète de f avec i arbitraire dans des expressions comme Table[f, i, imax ], il est souvent plus efficace de calculer d'abord cette forme, et puis de la passer à Table. Vous pouvez faire cela en utilisant Table[Evaluate[f], i, imax ].
Dans ce cas, la Sum est évaluée séparément pour chaque valeur de i.
In[6]:= Table[Sum[i^k, {k, 4}], {i, 8}]
Out[6]= 
Il est toutefois possible d'obtenir une formule symbolique pour la somme, valide pour toute valeur de i.
In[7]:= Sum[i^k, {k, 4}]
Out[7]= 
Le fait d'insérer Evaluate vous permet d'indiquer à Mathematica d'évaluer d'abord la somme symboliquement, puis d'itérer sur i.
In[8]:= Table[Evaluate[Sum[i^k, {k, 4}]], {i, 8}]
Out[8]= 
Évaluation dans les fonctions itératives.
Comme expliqué à la section 1.9.1, il est pratique d'utiliser Evaluate lorsque vous tracez le graphe d'une fonction ou d'une liste de fonctions. Ceci provoque d'abord l'évaluation de la forme symbolique de la fonction ou de la liste avant que l'itération ne commence.
|