FAQ Mathematica

FAQ MathematicaConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 30, dernière mise à jour : 16 juin 2021
Sommaire→InteractivitéPar défaut, Mathematica ne réévalue pas une expression chaque fois qu'un symbole utilisé pour l'évaluer change de valeur.
In[1]:= a + b
Out[1]= a + b
In[2]:= a = 5
Out[2]= 5Cependant, si on utilise la fonction Dynamic, la première formule sera réévaluée si a ou b change :
In[1]:= Dynamic[a + b]
Out[1]= 5 + b
In[2]:= a = 5
Out[2]= 5Cette fonction, bien que d'apparence peu utile, est la base de l'interactivité avec Mathematica. Un exemple légèrement plus évolué : un contrôle permet de faire évoluer la valeur d'une variable. Ainsi, on peut imaginer un document où l'utilisateur peut tester différentes combinaisons de valeurs et voir le résultat instantanément.
In[3]:= Slider[Dynamic[b]]Cependant, une fonction de Mathematica est prévue à cet effet ; elle facilite la création de formules interactives tout en apportant un lot de fonctionnalités supplémentaires : Manipulate.
Mathematica propose la fonction Manipulate pour que l'utilisateur puisse changer les valeurs dans une expression ; à chaque changement dans un contrôle, cette expression sera réévaluée. L'utilité principale de cette fonction par rapport à Dynamic est qu'elle choisit automatiquement le type de contrôle à afficher.
In[1]:= Manipulate[Exp[x + y], {x, 0, 10}, {y, 0, 10}]Il a fallu préciser l'expression à évaluer, ainsi que les valeurs qu'il faudra faire varier entre deux bornes. On peut également préciser un pas :
In[1]:= Manipulate[Exp[x + y], {x, 0, 10, 1}, {y, 0, 10, 1}]Ainsi, on ne pourra utiliser que les valeurs entières de x et y. Les valeurs n'étant plus stockées comme des nombres en précision limitée, le calcul redeviendra symbolique.
On peut utiliser des expressions beaucoup plus compliquées (en fait, toutes les expressions) ; par exemple, pour résoudre l'équation de Colebrook-White :
In[1]:= Manipulate[
FindRoot[
1/Sqrt[f] == -2 Log[10,
e/(Rationalize@3.71*phi) + Rationalize@2.51/(R*Sqrt[f])] &&
U == q/(phi^2*Pi) &&
R == (U*L)/nu, {{f, 0.01}, {R, 12500}, {U, 5}}], {g, 5, 10}, {phi,
0.001, 1}, {e, 0.001, 0.01}, {L, 1, 10}, {q, 0.001, 5}, {nu,
0.0000001, 0.001}]


