§ 2	Premiers principes

§ 2.1	Structure de Mathematica

Mathematica se compose

Un cahier a une extension ".nb". Il est structuré en cellules ("cells"). Une cellule est constituée d'une ou de plusieurs lignes et est repérée par un crochet à droite de la fenêtre. On peut avoir des cellules contenant des instructions Mathematica (cellule de type "In"), des résultats de calculs (cellule de type "Out"), du texte (cellule du type "Text"), un titre de paragraphe (cellule de type "Section"), ... On peut sélectionner la totalité d’une cellule en cliquant sur son crochet à droite. On peut ensuite effacer ([←] ou ⌫), copier (Ctrl[c]), couper (Ctrl[x]), coller (Ctrl[v]) la cellule, comme dans un logiciel de traitement de texte normal. Par défaut, les nouvelles cellules créées sont des cellules d' instructions Mathematica. On peut changer le type d' une cellule, après l' avoir sélectionnée, par le menu "Format > Style".
   
Une cellule peut aussi contenir plusieurs sous-cellules, formant ainsi des groupes structurés de cellules.Pour faciliter la lecture du fichier, on peut ouvrir ou fermer des groupes de cellules en double-cliquant sur le crochet correspondant (ou clic droit sur le crochet puis “Open All Subgroups” / “Close All Subgroups” afin d’ouvrir/fermer tous les groupes de cellules).

Pensez à sauvegarder souvent votre fichier Mathematica (menu "File > Save" ou "File > Save As").

§ 2.2 	Calcul numérique

Opérations de base

Les opérations d’addition, de soustraction, de multiplication et de division sont obtenues de façon naturelle par les opérateurs [+], [-], [*], [/]. La multiplication peut aussi être obtenue en laissant un espace blanc entre les deux termes (dans la cas de la multiplication de nombres Mathematica ajoute automatiquement un symbole de multiplication):

4/5 15/24

La division entière se fait au moyen de l’introduction Quotient et le reste de la division est obtenu avec Mod. Par exemple, 123 divisé par 17 égale 7, et il reste 4. En Mathematica, nous procédons de la façon suivante:

Quotient[123,17]

Mod[123,17]

On vérifie:

7*17+4

La puissance d’un nombre est obtenu avec le symbole \[ErrorIndicator]:

2^100

La notation scientifique peut être obtenue en utilisant les opérations précédemment citées ou en tapant [*]\[ErrorIndicator]:

9.1*^-31 (* masse d'un électron, en kg *)

Attention, afin de modifier l’ordre des opérations, Mathematica utilise toujours des parenthèses tandis que les crochets sont réservés pour les fonctions (voir §2.3) et les accolades pour les listes (voir §2.6):

[3+4]*5

{3+4}*5

Le calcul des racines de nombres négatifs est particulier dans le sens où Mathematica donnera comme résultat un nombre complexe même s’il existe une racine réelle :

((-1)^(1/3))//N

(-32)^(1/5)//N

Pour éviter ce problème, nous avons recours  à la fonction Surd :

Surd[-32,5]

Représentation des nombres et approximations

Mathematica fait la distinction entre les nombres suivants:

Les nombres entiers et rationnels sont représentés dans la mémoire de l'ordinateur d'une manière exacte (sans approximation). Il est possible de voir cette représentation à l’aide de la fonction FullForm[expr]. Utilisons cette fonction pour montrer la différence de traitement entre (1/2) et 0.5:

FullForm[1/2]

FullForm[0.5]

La fonction Head[expr] permet de voir le type d' une expression :

Head[1/2]

Head[0.5]

Les opérations sur les entiers, sur les nombres rationnels et sur les nombres réels exactes sont effectuées d' une manière exacte.

Sqrt[1/2]

(10^20)+1-(10^20)

Si un nombre à virgule flottante apparaît dans un calcul, le résultat sera à virgule flottante. Ceci peut être utile dans le but d’obtenir un approximation numérique.

(Sqrt[60.5])

Si nous voulons un résultat exact, il faut partir d'une expression qui a des valeurs exactes:

(Sqrt[60+(1/2)])

Par contre, les nombres à virgule flottante sont représentés avec une erreur d'arrondi. La mémoire de l'ordinateur étant finie, il s'ensuit que la partie mantisse et la partie exposant sont nécessairement finies. Par défaut, la partie mantisse comporte environ 16 chiffres décimaux. Les opérations effectuées avec ces nombres accroissent encore ces erreurs (erreurs d'opérations, erreurs propagées) comme le montre cet exemple:

(10^20)+1.-(10^20)

A partir d’une expression exacte, on peut obtenir une valeur numérique approchée avec la fonction N[expr]. Le résultat est un nombre à virgule flottante:

N[(2/7)+(Sqrt[5])]

La fonction N peut aussi être écrite en notation postfixe :

(2/7)+(Sqrt[5])//N

La valeur numérique est calculée avec une précision supérieure à celle qui est affichée; c'est pourquoi la différence suivante n'est pas nulle:

%-2.52178

Les nombres réels ont une représentation interne de 16 chiffres significatifs dont seuls les premiers sont affichés. Si on désire voir plus de chiffres, on peut utiliser la fonction NumberForm[expr, n] où n indique le nombre de chiffres désirés; par exemple

NumberForm[%%,10]

La fonction N[...] concerne le calcul et la représentation interne du résultat tandis que NumberForm[...] ne concerne que l'affichage du nombre. Si on demande d'afficher plus de chiffres qu'il a été calculé, seuls les chiffres significatifs sont affichés:

NumberForm[%%%,100]

Si on désire calculer avec plus de 16 chiffres significatifs, on peut utiliser la fonction N[expr, n] où n désigne le nombre de chiffres significatifs désirés :

N[(2/7)+(Sqrt[5]),50]

Lorsque le nombre de chiffres significatifs demandés par N[expr, n] est inférieur à 16, l'expression est tout de même évaluée avec 16 chiffres:

N[(2/7)+(Sqrt[5]),2] (* la valeur est affichée à 2 chiffres significatifs; la valeur interne est à 16 chiffres *)

%-2.5 (* le calcul est effectué avec les valeurs internes à 16 chiffres *)

§ 2.3	Variables et assignations

Utilisation de résultats déjà obtenus

Il est souvent nécessaire d'effectuer des calculs en plusieurs étapes. On a alors besoin de se référer à des résultats déjà obtenus lors de la session. On dispose pour cela des notations %, %%, %%%, etc. et %n, comme on l'a vu précédemment.

Cependant, une meilleure façon de procéder est de définir des variables. Une variable est une zone de la mémoire - désignée par un nom - où l’on stocke une valeur. Le nom d’une variable commence toujours par une lettre et il est d’usage que celle-ci soit une minuscule  afin d’éviter  une confusion avec les symboles prédéfinis par Mathematica qui commencent tous par une majuscule (Pi en est un exemple). Pour assigner une valeur à une variable, on utilise le signe =, qui signifie que l'on assigne une valeur à la variable, comme dans les mathématiques standards.

x=5
(x^2)

En ajoutant un point-virgule après une expression,  la résultat de celle-ci n’est pas affiché:

r = Sqrt[4^2 + 5^2];
perimetre = 2*Pi*r

Mathematica permet les assignations multiples, à l'aide des listes. La commande suivante assigne la valeur 2  à y et la valeur 4 à z:

{y,z}={2,4}

y+3 z

Il faut faire attention à plusieurs choses lorsque l'on définit des variables : la première est que Mathematica considère, à partir l'instruction x = 5, que je veux que x prenne toujours la valeur 5, à moins que je ne spécifie explicitement le contraire. Il s'agit donc d'une variable globale. Par ailleurs, toutes les assignations s’appliquent dans tous les fichiers .nb ouverts durant cette session.

Une des sources d'erreur les plus communes est d'oublier que l'on a fait une telle définition. La meilleure stratégie pour éviter cette erreur est donc de retirer l'assignation à une variable dès qu’elle n’est plus utilisée, ce qui est fait avec la fonction Clear[a, b, ... ]:

Clear[x,y,z, r, perimetre]

{x,y,z, r, perimetre}

Si nous voulons effacer le contenu de toutes les variables auxquelles nous avons assigné une valeur durant la session présente, nous pouvons utiliser la commande Clear["Global`*"].  Une stratégie plus radicale consiste à effacer le contenu de toutes les variables en quittant le noyau (menu “Evaluation > Quit Kernel” ou évaluer la fonction Quit[]).

Il est aussi possible de mettre une fonction Clear avec en paramètre le nom des variables dont nous avons besoin au début d’une nouvelle suite de commandes, mais il vaut mieux prendre l’habitude de “nettoyer” systématiquement après utilisation.

Assignations immédiates et différées

Observons la liste d'instructions suivante :

vitesse= 5
temps= 8
distance=vitesse*temps

temps = 10
distance

Nous constatons que quand bien même la valeur de la variable temps a été changée, la distance reste identique. La raison en est l’utilisation du symbole = qui évalue le produit vitesse*temps  immédiatement et assigne le résultat à la distance: on parle d’assignation immédiate. La valeur de la variable distance ne contient aucune trace de la façon dont elle a été obtenue. Pour voir le contenu d’une variable, nous plaçons un point d’interrogation devant celle-ci:

?distance

Pour que le construction du résultat soit conservée, il faut utiliser une assignation différée.  Celle-ci se fait avec le symbole :=. Dans le cas d’une assignation différée, l’expression qui détermine la valeur d’une variable n’est envoyée au Kernel qu’au moment où (et à chaque fois que) la variable est utilisée. Lors d’une affectation différée, il n’y a aucune sortie affichée.

vitesse:= 5
temps:= 8
distance:=vitesse*temps

distance

temps = 10;
distance

?distance

Clear["Global`*"]

§ 2.4 	Calcul symbolique

Remplacements

Nous avons vu précédemment la méthode pour définir des variables. Une assignation x = 3 indique à Mathematica de remplacer x par 3 partout où x apparaît. On a souvent besoin de faire des remplacements de ce type de façon plus contrôlée, par exemple sur une seule expression.

On obtient exactement ce comportement en tapant /. x → 3 après l'expression à évaluer. Le signe /. est formé d'une barre oblique et d'un point (sans espace) et → s’obtient en tapant [-] [>]. L'expression x -> 3 est appelée une règle (rule). Elle indique au programme de remplacer x par 3 dans l'expression qui la précède. Voici un autre exemple, où l'on remplace y par 1 + a.

1+(y^2)/.y->1+a

L'avantage de cette méthode est que la variable y n'a pas reçu de valeur globale:

y

Lorsqu'une expression algébrique contient plusieurs variables, on peut faire des remplacements multiples à l'aide d'une liste de règles:

(x+y) (((x-y))^2)/.{x->2,y->a-1}

On peut aussi mélanger les assignations et les remplacements.

t=1+(x^2)

t/.x->2 a

t

N'oublions pas de retirer la valeur de cette variable:

Clear[t]

Expressions  algébriques

Lorsqu’on donne comme input une expression algébrique quelconque, elle ne sera pas immédiatement transformée, par exemple, sous la forme factorisée. La raison en est que Mathematica ne peut pas deviner sous quelle forme l'utilisateur désire obtenir l'expression.

Pour factoriser un polynôme, il faudra donc le spécifier explicitement à l'aide de la fonction Factor. De façon analogue, on utilisera Expand pour développer un produit de facteurs:

Expand[(((x+1))^8)]

Factor[%]

Les opérations décrites ci-dessus ne sont pas les seules disponibles pour la manipulation des expressions algébriques. On dispose encore de fonctions telles que :

Voici quelques exemple d’utilisation de ces fonctions (on les retrouve toutes dans l’aide sous “Algebraic transformations” mais pensez aussi à regarder les fonctions suggérées par Mathematica)

e=(((((x-1))^2) (2+x))/((1+x) (((x-3))^2)));

Expand[e]

Together[%]

Simplify[%]

Cancel[(((x^2)+3 x+2)/((x^2)+4 x+4))]

Collect[x+3(x^2)+n x+m+k (x^2),{x}]

Il est possible de donner des conditions pour la simplification d’une expression:

Simplify[Sqrt[x^2+x^2]]

Simplify[%,x>0]

La fonction FullSimplify utilise un ensemble de transformations plus étendu pour effectuer le même travail que Simplify. Elle donne de meilleurs résultats dès que l'expression contient des racines ou des fonctions spéciales. Le travail de FullSimplify peut être long ! L'exemple suivant montre un cas où Simplify ne suffit pas:

f=(Sqrt[5+2 (Sqrt[6])]);
Simplify[f]

FullSimplify[f]

Clear[e,f]

Le cas des expressions trigonométriques est particulier.  Il sera traité dès que vous aurez vu la définition des fonctions trigonométriques à l’aide du cercle trigonométrique dans le cadre du cours de mathématiques.

§ 2.5 	Fonctions

Utilisation et définition

Les fonctions sont un constituant essentiel de Mathematica. Nous en avons déjà rencontrées plusieurs: Sqrt, N, Cos, Simplify,... Les arguments d'une fonction se mettent entre crochets [...]. Toutes les fonction prédéfinies de Mathematica commencent par une lettre majuscule.

L’utilisateur peut aussi définir ses propres fonctions en Mathematica. Par exemple, pour définir la fonction f(x) = (x^2) , on tape :

f[x_] := x^2
f[a]
f[3]
f[2 + 4 z]
3 + 2 y - 5 f[y]
?f

Dans le membre de gauche, l'argument "x" de la fonction est donné entre crochets et doit obligatoirement être suivi d'un tiret bas "_" (ou "underscore"), ce qui informe Mathematica que "x" est une variable muette qui devra être remplacée par l'argument avec lequel la fonction sera appelée.
Comme pour les variables, on peut effacer les fonctions qui viennent d'être définies par la fonction Clear:

Clear[f]

?f

Il est aussi possible de définir des fonctions de plusieurs variables:

v[r_,h_]:=Pi r^2 h (* volume d'un cylindre *)

v[4,8]

Clear[v]

Dans la définition d'une fonction, on utilise habituellement le signe “:=” qui signifie une assignation différée. Parfois, on peut vouloir forcer l'évaluation du membre de droite lors de la définition de la fonction et on utilise alors le signe de l'assignation immédiate “=”; mais il faut alors s'assurer que la variable "x" ne contient pas de valeur. Le choix de “=” crée notamment des problèmes lorsque la fonction se compose d’autres fonctions:

g[x_]:=Expand[(x^2)]
g[a+b]

h[x_]=Expand[(x^2)]
h[a+b]

Clear[g,h]

Notation post-fixe

L'opération "//" (appelée "pipeline", ou tube en français) permet d'appliquer une fonction au dernier résultat avec un syntaxe inversée: on parle de notation post-fixe. Ainsi, l'instruction x//g est donc équivalente à g[x]. Nous avons déjà utilisé la notation postfixe pour la fonction N. Voici un autre exemple d’utilisation:

(1/x)+(1/((x^2)-x))-(x/(x+1))

%//Together

§ 2.6	Résolution d’équations et inéquations

Équations

Mathematica permet de résoudre des équations (et inéquations) à l'aide des fonctions Solve et Reduce.  Une équation s’écrit avec une double égalité (“ ==“). Il faut distinguer ce symbole de l’égalité (“=“) qui sert à assigner une valeur à une variable:

x=5

x==6

L'expression logique  False  signifie que  la condition est fausse pour toutes les valeurs de  x , c'est-à-dire que l'ensemble des solutions est vide.

Clear[x]

Par exemple, si nous désirons résoudre l’équation (x^2)+1=0, nous procédons d’une des deux façons suivantes :

Reduce[x^2+1==0,x]

Solve[x^2+1==0,x]

Cette équation possède deux solutions qui ne sont pas réelles: elles font partie de l'ensemble des nombres complexes, ensemble que vous étudierez en (3^e) année dans le cadre du cours d’applications des mathématiques.

Si nous voulons nous limiter aux nombres réels, nous pouvons limiter la résolution à l’ensemble des nombres réel :

Reduce[x^2+1==0,x,Reals]

Solve[x^2+1==0,x,Reals]

Reduce a l’avantage de donner une expression logique parfaitement équivalente à l’équation initiale. La résolution d’équation est donc plus précise:

Reduce[ a x + b==0,x, Reals]

Le symbole && signifie “et” tandis que ||  signifie "ou". Le résultat précédent signifie donc que l’équation est toujours vérifiée lorsque a et b sont simultanément nulles, tandis que la solution est x=-(b/a)  si a est non nul. Nous constatons que la résolution avec Solve n’est pas aussi précise:

Solve[ a x + b==0,x, Reals]

Considérons un autre exemple:

eqn=2(x^3)-x+5==0;
Reduce[eqn,x,Reals]

Reduce[eqn,x]

Le résultat de Reduce avec la réduction aux nombres réels signifie que la solution est le premier zéro (la première racine) de la fonction x↦5-x+2 (x^3). Par contre, Reduce ne sait pas calculer la valeur exacte de cette racine. Si l’on ne se restreint pas aux nombres réels, on obtient deux solutions complexes supplémentaires, mais Reduce ne sait pas non plus les calculer explicitement. Nous arrivons à avoir des valeurs approchées avec la fonction N:

N[%]

Pour cette équation, la résolution avec Solve est plus performante qu’avec Reduce, à condition de ne pas restreindre la solution aux nombres réels.

Solve[eqn,x,Reals]

Solve[eqn,x]

Clear[eqn]

Inéquations

Reduce résout aussi des inéquations (les symboles ⩽ et ⩾ s’écrivent à l’aide de la palette, qui nous renseigne également sur les raccourcis clavier, ou  <= et >=). Il est donc possible de déterminer le signe d'une fonction et de dresser un tableau de signes:

f[x_]:=(x^2)-6x-6;
Reduce[f[x]==0,x]

Reduce[f[x]<0,x]

Reduce[f[x]≥0,x]

Clear[f]

Systèmes

Reduce et Solve résolvent aussi des systèmes de plusieurs équations à plusieurs inconnues. Le premier argument est une liste d’équations et le deuxième argument est la liste des inconnues:

Reduce[{x+y==m-2,x-2y==m},{x,y}]

Le premier argument peut aussi être une liste d' équations et d' inéquations :

Reduce[{(x^2)==4, x<0},x]

Des compléments sur l'utilisation de Reduce[...] et  Solve[...] seront donnés dans le chapitre Equations § 3 Résolution d'équations avec Mathematica.

§ 2.7	Listes

La liste est une structure de données très courante dans Mathematica, qui peut à la fois représenter un vecteur, un tableau de nombres, un ensemble ou même une expression algébrique.

Construction

Dans Mathematica, une liste est définie par l’énumération des éléments qu’elle contient, séparés par des virgules et délimité par des accolades. Voici la liste des chiffres paires:

chiffresPairs={0,2,4,6,8}

Un élément d’une liste peut être une liste. Par exemple, un triangle peut être représenté par les coordonnées de ses trois sommets, les coordonnées étant des listes de deux nombres :

triangle={{0,0},{3,4},{-1,1}}

Des fonctions permettent de générer des listes:

cube=Table[(i^3),{i,-2,5}]

Extraction

Pour extraire un élément d'une liste, on utilise le double crochet. Par exemple pour extraire le (3^(ème)) élément de la liste chiffresPairs, on procède de la façon suivante:

chiffresPairs[[3]]

triangle[[2]]

cube[[1]]

Il est aussi possible d'extraire plusieurs éléments; par exemple pour extraire les éléments numéros 1 et 3 de la liste chiffresPairs,

chiffresPairs[[{1,3}]]

triangle[[{2,3}]]

cube[[{2,4,6}]]

Étant donné le rôle central que joue la notion de liste en Mathematica, nous y reviendrons dans le chapitre 3.

Clear["Global`*"]

§ 2.8	Graphiques

Une des plus importantes caractéristiques de Mathematica est sa capacité de produire des graphiques de grande qualité. En effet les graphiques sont produits par le kernel de Mathematica directement dans le langage de description graphique PostScript, ce qui permet d' obtenir à l' impression une qualité exceptionnelle.

Représentation  graphique de fonctions

Pour dessiner la représentation graphique d'une fonction, on utilisera la fonction Plot de la manière suivante :

Plot[Sin[x],{x,0,2 π}]

Attention à la syntaxe de la fonction Plot : le premier argument n’est pas le nom de la fonction mais la définition de l’image de la variable donnée dans le deuxième argument!

Pour dessiner plusieurs fonctions sur le même système d'axes, on utilisera une liste de fonctions comme premier argument :

Plot[{Sin[x],Sin[2 x],Sin[3 x]},{x,-π,π}]

Options

Quand Mathematica dessine un graphique, il doit faire de nombreux choix : échelle des axes, échantillonnage des points à évaluer, proportions du dessin, etc. La plupart du temps, Mathematica fera des choix tout à fait valables. Toutefois, lorsque l'on veut obtenir les meilleurs résultats selon ses goûts particuliers, il est possible d'aider Mathematica à faire ces choix, ou encore d'imposer ses propres préférences. Le mécanisme utilisé est un principe général de Mathematica, la spécification des options.

Plot[f[x],{x,xmin,xmax},options]

Comme dernier argument de Plot, on peut spécifier une séquence de règles, qui donnera les valeurs aux différentes options. Lorsqu'on ne donne aucune valeur explicite pour une option, elle prend une valeur prédéfinie. On dit de cette valeur prédéfinie qu'elle est prise par défaut. Considérons la représentation graphique suivante:

f[t_]:=Sin[(t^2)]
Plot[f[t],{t,0,3}]

L'option PlotLabel permet de donner un titre au dessin:

Plot[f[t],{t,0,3},PlotLabel->"y="f[t]] (* Les guillemets indiquent du texte *)

On peut également donner, en même temps ou non, des titres aux axes:

Plot[f[t],{t,0,3},AxesLabel->{"t","y"},PlotLabel->"y="f[t]]

La fonction Plot possède un grand nombre d'options. Il est donc difficile de les connaître toutes ou de s'en souvenir. Il y a différents remèdes à ce problème:

Options[Plot]

De cette manière on obtient non seulement le nom de toutes les options, mais encore leur valeur par défaut. Ce mécanisme fonctionne évidemment pour toutes les fonctions qui ont des options, même celles qui ont été définies par l'utilisateur.

Si l’on veut des informations quant à la signification de telle ou telle option, il faut consulter l’aide.

Redessiner  et combiner  des dessins

En utilisant les options pour obtenir un dessin avec des réglages différents, on recalcule chaque fois tout le dessin, ce qui peut prendre du temps. On peut éviter cela en manoeuvrant de la façon suivante. On définit d'abord une variable qui contiendra tout le dessin (il est important d'utiliser le symbole =, et non :=, puisqu'il s'agit de ne pas tout recalculer à chaque fois),

myplot=Plot[f[t],{t,0,3}];

puis on spécifie les options désirées à l'aide de la commande Show :

Show[myplot,AxesLabel->{t,f[t]},PlotLabel->"y="f[t]]

Mathematica prend alors le dessin déjà produit et change les paramètres voulus.

Voici encore deux exemples d'options fréquemment utilisées dans les dessins.

L'option PlotRange permet de spécifier l'intervalle des valeurs en abscisse et en ordonnée, ou en ordonnée seulement.

Show[myplot,PlotRange->{{0,2},{0,1.2}}]

Show[myplot,PlotRange->{0,1.2}]

La dernière option dont on parlera ici est AspectRatio. Elle définit le rapport entre la hauteur et la largeur du dessin. Sa valeur par défaut est 1/GoldenRatio, c'est-à-dire l'inverse de la section d'or, afin de donner au dessin les proportions d'un rectangle d'or. Si l'on veut garder la même échelle en abscisse et en ordonnée, on doit donner à cette option la valeur Automatic.

Show[myplot,AspectRatio->Automatic]

Clear[myplot,f]

La fonction Show n'est pas seulement utile pour redessiner un graphique. Elle permet aussi de combiner plusieurs graphiques et/ou dessins.

plot1=Plot[(x^2),{x,-3,3}];
plot2=Plot[-(x^2),{x,-3,3},PlotStyle->Dashing[{0.03,0.02}]];
axesymetrie=
Graphics[
{Thickness[0.02],
Dashing[{0.1,0.05,0.005,0.05}],
Red,
Line[{{0,-5},{0,5}}]
}
];
Show[{plot1,plot2,axesymetrie},AspectRatio->Automatic,PlotRange->{-5,5}
]

Clear["Global`*"]

L’ajout d’un dessin (par exemple, une ligne brisée, un point,...) au graphe d’une fonction peut aussi se faire directement à l’aide de l’option Epilog.

Plot[x^2-2x-3,{x,-2,4},Epilog->{Red, PointSize[0.02],Point[{1,-4}]}]

Animations (facultatif)

Mathematica permet l'animation des graphiques. Il permet en fait de produire des images se suivant avec de légères modifications, à la manière des dessins animés, puis de les faire se succéder rapidement, afin de donner comme au cinéma l'illusion du mouvement.

On utilise pour cela la fonction Animate.

dessin[a_]:=Plot[Sin[x+a],{x,0,4π},ImageSize->{200,150}]
Animate[dessin[a],{a,0,2π}]

Si on préfère faire ses animations à la main, on utilise la fonction Manipulate.

Manipulate[dessin[a],{a,0,2π}]

Clear[dessin]

§ 2.9	Fichier d’extension

Mathematica propose plusieurs milliers de commandes telles Cos, N, Plot, Factor, Clear, ...

Il est possible de faire appel à des commandes supplémentaires définies dans des fichiers d'extension dénommés "Packages". Certains suppléments sont fournis par Wolfram Research à l'achat de Mathematica. Pour avoir, une liste exhaustive de ces extensions il faut rechercher "Standard Packages" dans l’aide.

Il est aussi possible de fabriquer ses propres suppléments (Packages définis par l'utilisateur) et d'enrichir ainsi le langage Mathematica en l'adaptant à ses besoins. Les "packages" créés au Collège du Sud pour les besoins de l'enseignement se trouvent sur Partage-Eleves/Disciplines/Appl_math/Packages locaux .

Dans tous les cas, il faut indiquer le nom du fichier dans lequel se trouve la définition des commandes supplémentaires.

§ 2.10	Méthode de travail

Lorsqu'on veut effectuer des calculs avec Mathematica, que faire lorsque "ça ne marche pas"?
Voici quelques conseils pratiques qui devraient vous aider.

(1^er) conseil : appliquer les "Premiers principes" à la syntaxe

Respectez les règles de syntaxe telles que

les commandes de Mathematica commencent par une lettre majuscule (par exemple Plot au lieu de plot);

les arguments des fonctions sont à mettre entre crochets (par exemple  Line[...], f[x], ...);

les arguments des fonctions sont séparés par des virgules (par exemple Plot[f[x], {x,-5,5}] au lieu de Plot[f[x]; {x,-5,5}]);

les accolades servent à définir des listes tandis que les parenthèses servent à définir l’ordre des opérations (par exemple Line[{{0,0}, {1,2}, {2,-1}}] s’écrit avec des accolades car Line s’applique à une liste de points; (2-π)/3 s’écrit avec des parenthèses car elles modifient l’ordre des opérations.

respectez les structures d’imbrications on peut avoir [{(...)}] mais jamais [({...)}].

Concernant les deux derniers points, l’insertion de retours à la ligne à chaque niveau d’imbrication et l’écriture immédiate de la fermetures des crochets, parenthèses ou accolades permettent d’éviter des erreurs.

(2^e) conseil : appliquer les commandes  aux objets voulus

Il faut soigneusement distinguer

l’assignation dont le symbole est = ou  := et qui attribue une valeur à une variable (par exemple x=5);

l'égalité dont le symbole est == et qui sert à définir une équation ou une expression booléenne (par exemple (x^2)-2 x+3==0 est vrai ou faux selon la valeur de x).

Avec Plot, on peut dessiner

une fonction sur un intervalle  (par exemple, Plot[f[x], {x, -4, 4}]);

ou une liste de fonctions sur un intervalle  (par exemple, Plot[{f[x], g[x]}, {x, -4, 4}]).

Avec Reduce, on peut résoudre

une équation en indiquant l’inconnue (par exemple Reduce[(x^2)==3, x, Reals]);

ou une liste d'équations en indiquant la liste des inconnues (par exemple, Reduce[{x+y == -3, 5 x - y == 1}, {x,y}, Reals]).

(3^e) conseil : corriger méthodiquement  les erreurs de syntaxe

Lorsqu'il rencontre une erreur, l'élève "bricoleur" peut être tenté d'essayer des modifications (comme ajouter des parenthèses, des accolades, etc) jusqu'à ce que "ça marche". Cette attitude conduit souvent à une impasse ou à une méthode aberrante.

Pour corriger les erreurs de syntaxe, il faut adopter une attitude plus méthodique. Voici deux éléments qui vont dans ce sens :

tenir compte des messages d’erreur et consulter l’aide.

Illustrons ceci par un exemple:

Plot[5x/(x-2)]

Le message d'erreur signale que la commande Plot doit être appelée avec deux arguments au moins, c'est-à-dire doit être de la forme
	Plot[arg1, arg2]
Ici, le premier argument est f[x] tandis que le deuxième argument manque. Pour savoir ce qui manque, on peut consulter l'aide (menu Aide) ou demander des informations sur Plot :

?Plot

On voit qu'il manque l'intervalle sur lequel la fonction doit être dessinée. Par exemple,

Plot[5x/(x+1), {x, -5, 5}]

(4^e) conseil : demander  des informations sur les symboles  utilisés

Exemple

Dans un premier exercice, un élève a utilisé la variable

x=7;

Plus tard, dans un autre exercice,

Reduce[(x^2)+4 x+3==0,x, Reals]

Informons-nous sur le symbole x:

?x

Le message signifie que x est une variable globale qui vaut 7. Il faut effacer sa valeur et recommencer :

Clear[x];
Reduce[(x^2)+4 x+3==0,x, Reals]

Autre exemple

Nous voulons tracer le graphe de y=(x^2). Afin d’éviter d’avoir les désagréments de l’exemple précédent, nous commençons par effacer le contenu des variables f et x.

Clear[f,x];
f[x_]=x 2;
Plot[f[x],{x,-4,4}]

Le résultat est aberrant puisqu’on obtient une droite au lieu d’obtenir une parabole. Voici une correction possible:

f[x]:=(x^2);
Plot[f[x],{x,-4,4}]

Le résultat ne change pas! Si aucune erreur de syntaxe n'est signalée mais qu'on n'obtient pas l'effet désiré, il est conseillé de demander des informations sur chaque symbole :

?x

Le message signifie que x est une variable globale qui n'a pas reçu de définition. Dans notre contexte, cette situation est normale.

?f

Le message signifie que le symbole f a reçu deux définitions qui ont été toutes deux mémorisées. Il nous faut donc effacer le contenu de f puis recommencer :

Clear[f,x];
f[x_]:=(x^2);
Plot[f[x],{x,-4,4}]

Voilà qui est mieux!

(5^e) conseil : si nécessaire, abandonner/recommencer l'exécution, forcer la fermeture de Mathematica

Que se passe-t-il lorsque l'ordinateur reste bloqué avec le message "En marche ..." sur la barre supérieure de la fenêtre ? Cela signifie que l'ordinateur est en train d'effectuer un long calcul, peut-être même un calcul sans fin.

Pour abandonner l'exécution

Par exemple, l'instruction suivante provoque un calcul astronomique :

FactorInteger[2^10000-1]

Pour abandonner l'exécution, on peut passer par le menu “Evaluation>Abort Evaluation” et on obtient alors l'output

Avant de poursuivre, il faut naturellement corriger l'instruction fautive :

FactorInteger[2^100-1]

Pour recommencer une nouvelle session

Si “Annuler l’évaluation” ne suffit pas, on peut “Quitter le noyau” par le menu “Evaluation>Quit Kernel>Local”. Après quoi il faut redonner au noyau tous les inputs nécessaires “Evaluationl>Evaluate Notebook”.

Pour forcer la fermeture de Mathematica

Dans certains cas, il peut arriver que Mathematica ne réponde plus et que l’accès à ses différents menus soit impossible. Il ne reste alors plus qu’à forcer l’ordinateur à fermer Mathematica. Pour cela on applique la combinaison de touche Ctrl|Alt|⌫ qui permet d’atteindre le gestionnaire des tâches de Windows. Dans l’onglet “Processus”, il faut alors faire un clic droit sur “Wolfram Mathematica” et sélectionner “Fin de tâche” : l’application va alors être fermée. Vous pouvez alors relancer Mathematica est reprendre le cahier sur lequel vous travailliez. Attention, il sera repris tel qu’enregistré lors de la dernière sauvegarde : tout qui a été fait entre ce moment et la fermeture forcée de Mathematica est perdu!

§2.11	Exercices

Consigne générale

Pour faire vos devoirs, créer un cahier

Enregistrer le tout sous le nom  NOM-Ex2-XaY.nb, où NOM est votre nom de famille et X et Y sont les numéros du premier et dernier exercice.

Exercice 2-1

Sans utiliser Mathematica, évaluer la sortie de chacune des instructions suivantes. Si l’instruction retourne une erreur, la corriger.

5*2*^3
Sqrt (0.25)
Sqrt[1/4]
-4^2
5/[3. - 1]

Exercice 2-2

a) 	Calculer le périmètre d’un pentagone régulier inscrit dans une cercle de 7.2 cm de rayon. On demande une valeur exacte
	simplifiée au maximum et une approximation à 3 chiffres significatifs.

b) 	Déterminer à 10 chiffres significatifs la longueur de l’arête d’un cube d’un volume de 98.76 m3.

Exercice 2-3

a) 	Définir la variable α=7.5° puis calculer les nombres suivants:

cos(α),      sin(α),      sin(48 α),     sin(360°)

b)	Pourquoi la valeur de sin(48 α) n'est-elle pas exacte?
	Proposer un nouvel input pour que Mathematica donne la valeur exacte de sin(48 α).

Exercice 2-4

Sans utiliser l’ordinateur, déterminer la sortie que  Mathematica donnerait lors de l’évaluation de la suite d’instructions ci-dessous.

Clear["Global`*"]
a=2; 
x=a+1;
y:=a+2;
a=10;
x+y

Exercice 2-5

Déterminer, à 3 chiffre significatifs,  l’aire et le périmètre d’un polygone régulier à n=7 côtés dont le cercle circonscrit a un rayon
r=5 cm.

Indication : écrire un suite d’instructions utilisant des variables de façon à ce qu’un changement des valeurs proposées ne doive être faite qu’à une seule place.

Exercice 2-6

Demander à Mathematica d'effectuer les calculs suivants et observer que le calcul opère aussi sur les unités :

a)	prixUnitaire = 5 fr/piece;
	quantite = 42 piece;
	prix = prixUnitaire*quantite

b)	acceleration = ((m/s)^2);
	newton = kg acceleration;
	joule = newton m;
	watt = joule/s;
	((watt/m)^2)

Exercice 2-7

Posons a=((1-x)/(1-x+(x^2))) et b=((1+x)/(1+x+(x^2))) et c=((a+b)/(b-a)). Calculer et simplifier c.

Exercice 2-8

Soit a=2 cm et b=3 cm les deux cathètes d'un triangle rectangle ABC. Calculer une approximation de la longueur de l'hypoténuse et de l'angle α  (opposé au côté a, en degrés).

Indication : Pour convertir les radians en degrés, utilisez la règle de conversion π (radians) = 180°. De plus écrire une suite d’instructions de façon à ce qu’un changement des valeurs proposées ne doive être à fait qu’à une seule place.

Exercice 2-9

Sans utiliser l’ordinateur, déterminer les sorties que  Mathematica donnerait lors de l’évaluation de la suite d’instructions ci-dessous.

Clear["Global`*"]
t=10;
v= a t;
t=1;
v
v/.{a->5}
v

Exercice 2-10

a) 	Simplifier (((a^3)+(b^3))/(a+b)).

b)	Effectuer la multiplication (x-2) (x-1) x (x+1) (x+2).

c)	Évaluer l’expression précédente si x=1.235789.

d)	Factoriser le polynôme (x^4)+35 (x^2)-50 x-10 (x^3)+24.

e) 	Réécrire l’expression a x+a+(a^3)x+4+5(a^3) d’abord en regroupant les termes selon la variable x, puis en regroupant les termes

selon la variable a.

f) 	Mettre l’expression a+b-((2ab)/(a+b)) au même dénominateur.

Exercice 2-11

Sans utiliser l’ordinateur, déterminer les sorties que  Mathematica donnerait lors de l’évaluation de la suite d’instructions ci-dessous.

Clear["Global`*"]
x=4;
f[x_]=x^2
f[3]
g[x_]:=x^3
g[3]

Exercice 2.12

Soit la fonction p(n) donnant le périmètre d’un polygone régulier à n côtés inscrit dans un cercle de rayon r=1/2.

a)	Définir la fonction p.

b)	Calculer la valeur exacte de p(5).

c)	Afin d'analyser ce qu'il se passe lorsque n devient grand travailler avec Limit. Expliquer le résultat.

Indication : écrire une suite d’instructions de façon à ce qu’un changement de la valeur du rayon ne doive être à faite qu’à une seule place.

Exercice 2-13

a)	 Déterminer le signe de f(x)=(x^2)(x+15)+75(x-1)+50.

b)	 Déterminer les solutions de l’équation 2 (cos^2)(x)=cos(x)+1  qui se trouvent dans l’intervalle [0;2π].

c)	Résoudre l'inéquation

(1/(x-3))+(3/(x+1))≤(x/((x^2)-2 x-3))

d)	Résoudre  le système d'inéquations

{({{(1/(x-3))+(3/(x+1))≤(x/((x^2)-2 x-3))}, {(x^2)≥8}})

Exercice 2-14

Former les listes suivantes:

a={11,16,21,26,...}                                                                     (20 termes)

b={3,6,12,24,48,...}                                                                 (12 termes)

c={(k^100),(k^98),(k^96),(k^94),...,(k^30)}

Calculer la somme du (14^e) terme de la liste a avec le (9^e) terme de la liste b.

Exercice 2-15

Résoudre  les équations suivantes d'inconnue x

(((m )^2)+1)(x^2)-4m x+1=0

pour m=-6,-5,...,6.

Indication : 	il s'agit d'une liste dont chacun des 13 éléments est la solution d'une équation.

Exercice 2-16

Définir une variable temps qui donne le nombre de minutes entières écoulées depuis ce matin minuit. 
Indication: travailler avec la fonction DateList[].

Exercice 2-17

Soit la fonctionf(x)=tan(x).

a)	Générer automatiquement la liste {-π,-3π/4,-π/2,...,π} .

b)	Représenter graphiquement la fonction f sur l’intervalle de -π à π en utilisant la liste précédente afin de graduer l’axe des 
	abscisses tous les π/4 (utiliser l'option Ticks).

c)	 Reprendre le graphique précédent,  tracer les asymptotes (droites verticales dont le graphe s’approche) en traitillé et nommer les 
	axes x et y (chercher l’option correspondante).

Exercice 2-18

a) Résoudre l'équation		(Sqrt[3 (x^2)+4])=((7x+5)/(x+1)).
Illustrez la situation par un graphique montrant l'intersection des deux courbes.

b) Résoudre le système d'équation
	(Piecewise[{{y=(x^3)-3x}, {y=((7x+5)/(x+1))}}])
Illustrer la situation par un graphique en y plaçant les points correspondant aux solutions. Utiliser pour cela la fonction Point.

§2.12	Exercices de répétition

Exercice 2-19

Déterminer le signe de la fonction f(x)=3(x^3)+4 (x^2)-19 x+10 puis dresser un tableau de signes de l'expression.

Exercice 2-20

Définir une fonction a(n) donnant l’aire exacte du disque dans lequel est inscrit un polygone régulier à n côtés de mesure c=1 cm. Calculer a(12) et réduire au maximum.

Exercice 2-21

Soit le fonction f(x)=((x+1)/(x-3)).

a)	Réduire l’expression ((f(2+h)-f(2))/h). Que représente ce résultat?

b)	Évaluer l’expression précédente pour h=0.1, 0.09, 0.08, ...,0.01.

c)	Résoudre graphiquement l’équation f(x)=(x^2).

d)	Calculer la solution de cette équation à 10 chiffres significatifs.

e)	Placer exactement sur le graphique de la partie c) le point utilisé pour la résolution graphique.

Indication : implémenter cet exercice de façon à ce que la modification d’une seule donnée (par exemple la définition de f) modifie automatiquement les réponses aux questions posées.

Exercice 2-22

Générer la figure suivante contenant 1000 points placés aléatoirement. Indication: utiliser la fonction RandomReal.

§2.13	Réponses

Exercice 2-1

10000, 0.5, (1/2), -16 et, après correction, 2.5.

Exercice 2-2

a) 	Le périmètre est de 42.3 cm.		b) 	L’arête mesure 4.62232375 cm.

Exercice 2-3

a)	 0.991445, 0.130526, -2.44929·(10^(-16)), 0 	 	b)	 sin(48α)=0

Exercice 2-4

15

Exercice 2-5

Périmètre: 30.4 cm; aire: 68.4(cm^2).

Exercice 2-6

a)	 210 fr		b) kg/(s^3)

Exercice 2-7

(1/(x^3))

Exercice 2-8

hypoténuse ≃ 3.600555, α ≃ 33.6901°

Exercice 2-9

10a, 50 et 10a.

Exercice 2-10

a) 	(a^2)-a b+(b^2)

b)	4 x-5 (x^3)+(x^5)

c)	-1.61099

d)	(-4+x) (-3+x) (-2+x) (-1+x)

e)	4+a+5 (a^3)+(a+(a^3)) x   et   4+a (1+x)+(a^3) (5+x)

f)	(((a^2)-2 ab+2 a b+(b^2))/(a+b))

Exercice 2-11

16, 16 et 27

Exercice 2-12

b)	5 (Sqrt[(5/8)-((Sqrt[5])/8)])

c)	Lorsque n croît, p(n) s’approche de π. Dans ce cas on dit que p(n) converge vers π lorsque n tend vers +∞ ou que la limite de 
	p(n) lorsque n tend vers +∞ est égale à π.

Exercice 2-13

a)	({{x, -∞,  , -5+(150^(1/3)),  , ∞}, {sgn(f(x)),  , - , 0, + ,  }})

b)	S={0,2π/3,4π/3,2π}

c)	S=]-∞; -1[ ⋃ [(8/3);3[

d)	S=]-∞;-2(Sqrt[2])] ⋃ [2(Sqrt[2]);3[

Exercice 2-14

a={11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106}
b={3,6,12,24,48,96,192,384,768,1536,3072,6144}
c={1,Sin[((3 π)/14)],-Sin[(π/14)],-Cos[(π/7)]}

844

Exercice 2-15

({{x==-0.6038940657510433`||x==-0.04475458289760537`}, {x==-0.7154740487324087`||x==-0.053756720498360513`}, {x==-0.8738620353177085`||x==-0.06731443527052683`}, {x==-1.1099019513592785`||x==-0.09009804864072156`}, {x==-1.46332495807108`||x==-0.13667504192892005`}, {x==-1.7071067811865475`||x==-0.2928932188134524`}, {False}, {x==0.2928932188134524`||x==1.7071067811865475`}, {x==0.13667504192892005`||x==1.46332495807108`}, {x==0.09009804864072156`||x==1.1099019513592785`}, {x==0.06731443527052683`||x==0.8738620353177085`}, {x==0.053756720498360513`||x==0.7154740487324087`}, {x==0.04475458289760537`||x==0.6038940657510433`}})

Exercice 2-17

Exercice 2-18

a)	S≈{-4.243182283793815`; -0.5799976082594346`;3.61089}

b)	S≈{(-0.6272197992381754`,1.634908195465476`);(2.384837383401882`,6.40913)}

Exercice 2-19

({{x, -∞,  , -1-(Sqrt[6]),  , (2/3),  , -1+(Sqrt[6]),  , ∞}, {sgn(f(x)),  , -, 0, +, 0, -, 0, +,  }})

Exercice 2-20

(2-(Sqrt[3])) π

Exercice 2-21

a)	(4/(-1 + h))

b)	{-4.44444,-4.3956,-4.34783,-4.30108,-4.25532,-4.21053,-4.16667,-4.12371,-4.08163,-4.0404}

c)	S≈{3.4}

d)	S≈{3.382975768}

e)