IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Interactivité
        Comment réévaluer une expression chaque fois qu'une valeur change ?
        Comment faire évoluer une valeur en fonction de plusieurs variables ?





Comment réévaluer une expression chaque fois qu'une valeur change ?
Création le 17/06/2012 [haut]
auteur : Thibaut Cuvelier
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]= 5
Cependant, 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]= 5
Cette 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.


Comment faire évoluer une valeur en fonction de plusieurs variables ?
Création le 17/06/2012 [haut]
auteur : Thibaut Cuvelier
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}]

Copyright © 2011 Thibaut Cuvelier. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.