FAQ Mathematica

FAQ MathematicaConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 30, dernière mise à jour : 16 juin 2021

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