Université
DEUG MIAS 1ère année
2002/2003
Option culturelle : calcul scientifique
Premier contact avec Maple
Introduction à MAPLE
Généralités
MAPLE est un logiciel développé à l'université de Waterloo au Canada, depuis le début des années 1980. Son nom est une contraction de MAthematical PLEasure , et désigne en plus l'érable dont la feuille est l'emblème du Canada. La version que vous utilisez actuellement est la version V R5 pour Windows 9x.
MAPLE est essentiellement un logiciel de calcul (mais il peut aussi servir pour rédiger des documents comme celui que vous êtes en train de lire).
À la différence d'un grand nombre d'autres systèmes de calcul, MAPLE permet d'effectuer des calculs (exacts) non seulement sur des nombres (entiers, rationnels, complexes, algébriques,...) mais aussi sur des symboles (polynômes, fractions rationnelles par exemple). Grâce à une riche bibliothèque de fonctions, il permet de traiter la quasi totalité des calculs auquel un étudiant de DEUG Sciences peut être confronté (calcul de dérivées, d'intégrales, résolution d'équations polynômiales, d'équations différentielles, calculs matriciels, etc ...). Il permet de plus de réaliser des graphiques en 2 ou 3D.
On dit de tels logiciels qu'ils sont des systèmes de calcul formel ou encore de calcul symbolique .
Il existe bien d'autres logiciels de calcul formel. Citons entre autres MATHEMATICA, MACSYMA, REDUCE, MuPaD.
Premiers pas avec MAPLE
Les commandes
Une feuille de travail en MAPLE (comme celle que vous lisez actuellement) comprend :
du texte (en général de couleur noire) qui présente la nature du travail effectué, des commentaires (ou des exercices comme dans cette feuille).
des commandes (en général de couleur rouge) qui expriment les calculs que vous demandez à MAPLE. Les lignes où apparaissent ces commandes sont le plus souvent précédées du symbole > (appelé "invite" ou "prompt"). Une commande peut être écrite sur plusieurs lignes si on le veut, mais elle doit se terminer par un ; ou un :
des résultats de calculs (en général de couleur bleue) effectués par MAPLE
Exercice Tapez la commande 12 + 3 ; après le prompt qui suit (n'oubliez pas le ; )
>
Tapez maintenant la même commande sur quatre lignes (un item par ligne) en tapant sur la touche Entrée entre chaque item.
>
Enfin tapez une dernière fois la commande, mais terminée cette fois-ci par :
>
Remarque :
Il est important de savoir que MAPLE distingue les lettres MAJUSCULES des minuscules (sous peine de voir certains résultats étranges ou frustrants).
Insérer des lignes de commandes
L'aide de MAPLE
Sauvegarder une feuille de travail
Bibliographie
Commandes de base
Le but de cette partie est de donner une idée rapide des différents types de commandes que vous pouvez utiliser afin de dialoguer avec MAPLE. Il n'est bien entendu pas question de faire une présentation exhaustive des différentes fonctions (plusieurs milliers) qu'offre ce logiciel, ni même de présenter les structures de données disponibles (séquences, listes, ensembles, tableaux, matrices ...). Il s'agit plutôt de permettre le plus rapidement possible l'écriture de petites procédures.
Une session de travail avec MAPLE se présente souvent sous forme d'un dialogue (avec l'interprète du langage de MAPLE). Vous tapez une commande (terminée par : ou par ;) et MAPLE l'évalue puis affiche (si la commande a été suivie d'un ;) le résultat.
Dans ce qui suit un certain nombre de commandes ont été écrites, vous avez à les valider en plaçant le curseur à leur niveau et en tapant sur la touche Entrée.
Expressions simples :
Expressions arithmétiques
> (3*2^5+8)/50;
> 4!;
Appel à des fonctions
> sqrt(4); sqrt(5);
Notez que la seconde racine est exprimée de manière symbolique : MAPLE fait des calculs EXACTS sauf si on lui demande le contraire, avec la commande evalf par exemple.
> evalf(sqrt(5));
Variables et affectations :
Une variable est l'association d'un nom et d'une valeur .
Affecter une variable c'est associer une valeur à une variable. La commande d'affectation se fait en suivant la syntaxe
<nom> := <expression>
> a := 25^2;
La commande précédente est l'équivalent (d'un certain point de vue) à l'expression SCHEME
(define a (* 25 25))
On peut ensuite utiliser la variable a dans d'autres calculs
> sqrt(a);
On peut aussi modifier la valeur d'une variable par une nouvelle affectation
> a := 31^2;
> sqrt(a);
Enfin, à la différence de bien d'autres langages informatiques, il n'est pas nécessaire d'avoir affecté une variable pour pouvoir l'utiliser dans des expressions.
Par exemple, on peut affecter à la variable c le carré de b
> c := b^2;
En SCHEME, une commande équivalente aurait amené un message d'erreur du type unbound variable
> sqrt(c);
C'est cette possibilité de travailler symboliquement avec des noms de variables qui fait de MAPLE un logiciel de calcul formel .
Il faut savoir aussi que MAPLE distingue les lettres minuscules des lettres MAJUSCULES. Ainsi les variables a et A ne sont pas les mêmes comme le montrent les commandes suivantes :
> a; A;
Pour terminer, signalons qu'un certain nombre de variables sont prédéfinies dans MAPLE (par exemple la variable I a pour valeur un nombre complexe dont le carré est -1). L'utilisateur peut à tout moment "désaffecter" ses variables en utilisant la commande restart
> a;c;
> restart;
> a;c;
Instruction conditionnelle :
Syntaxe de l'instruction conditionnelle simple
if <condition> then
<commandes> # commandes à exécuter si <condition> est vrai
fi
Syntaxe de l'instruction conditionnelle complète
if <condition> then
<commandes 1> # commandes à exécuter si <condition> est vrai
else
<commandes 2> # commandes à exécuter si <condition> est faux
fi
où <condition> est une expression booléenne, c'est-à-dire une expression pouvant prendre les valeurs Vrai (true en MAPLE) et Faux (false en MAPLE), et <commandes> est une suite d'une ou plusieurs commandes (séparées par des ;).
Pour des information plus complètes sur l'instruction conditionnelle consultez l'aide sur if .
Exemples :
> if 0=0 then
> 1;2;
> fi;
L'interprète donne deux réponses pour les deux commandes 1; et 2; puisque la condition est vraie.
> if 1=0 then
> 1;2;
> fi;
Pas de réponse étant donné que la condition est fausse.
> if 1=1 then
> 1;
> else
> 2;
> fi;
> if 1=0 then
> 1;
> else
> 2;
> fi;
Examinons de plus près la commande suivante
> if timoleon<0 then
> 1;
> else
> 2;
> fi;
Error, cannot evaluate boolean
Le message d'erreur provient du fait que la variable timoleon n'ayant aucune valeur numérique, MAPLE ne sait pas évaluer la condition.
Donnons maintenant la valeur 0 à la variable timoleon :
> timoleon:=0:
> if timoleon<0 then
> 1;
> else
> 2;
> fi;
>
Répétition non conditionnelle (boucle for) :
Pour répéter un nombre déterminé de fois une ou plusieurs commandes, on utilise la commande for dont voici la syntaxe (il existe d'autres formes de cette commande) :
for <indice> from <debut> to <fin> do
<commandes>
od
où <indice> est une variable, <debut> et <fin> les bornes de l'intervalle que doit parcourir la variable <indice>
Exemple :
Calcul des carrés des 10 premiers entiers
> for k from 1 to 10 do
> k^2;
> od;
>
Répétition conditionnelle (boucle while) :
Pour répéter plusieurs fois une ou plusieurs commandes tant que une certaine condition est vérifiée, on utilise la commande while dont voici la syntaxe :
while <condition> do
<commandes>
od
où <condition> est une expression booléenne.
Exemple :
Calcul de la racine carrée entière d'un entier n :
> n := 123456789: # l'entier dont on cherche la racine carrée
> k := 1: # le premier candidat
> while k*k<=n do # tant que le carré de k ne dépasse pas n
> k := k+1; # on passe au candidat suivant
> od: # on termine par : pour ne pas voir toutes les étapes de calcul
Lorsque la recherche est terminée, k est le premier entier dont le carré dépasse n , par conséquent la racine carrée entière de n est .
> k-1;
Vérification
> evalf(sqrt(n));
Programmation : flèches et procédures
La flèche
On peut fabriquer très facilement des fonctions en Maple de la manière suivante :
f:=(x1,x2,..,xn)-> expression(x1,x2,..,xn);
ce qui signifie littéralement :
"on definit f comme la fonction qui aux variables (x1, x2, ..., xn) associe expression (x1, x2, .., xn)"
Exemples
1
> f:=x->exp(-x^2);
> f(0);
> diff(f(x),x);
Ici x est une variable muette. En effet on a
> f(y);f(xi);
mais
> f;
> whattype(f);
2
On peut construire une fonction en utilisant des structures de contrôle :
> restart;
> f:=x-> if x >0 then ln(x) else 0 fi;
> f(2);
> f(-2);
Les procédures
Procédures :
Une procédure en MAPLE est un moyen de regrouper une suite de commandes susceptible d'être utilisée souvent, et de la nommer. Dans ce sens, une procédure est affectée à une variable (comme en SCHEME).
La syntaxe d'une procédure est la suivante (pour une présentation plus complète voir l'aide sur proc )
proc (<paramètres>)
local <variables> ;
<commandes>
end
c'est l'équivalent à ce qu'en SCHEME on écrit
( lambda (<paramètres>)
<expression>
)
où
<paramètres> est une suite de noms séparés par une virgule qui servent à représenter les valeurs qui seront fournies lors d'un appel à la procédure.
<variables> est une suite de noms séparés par une virgule qui désignent les variables locales à la procédure (d'où le mot local !) n'ayant pas d'existence en dehors de cette procédure. Si aucune variable locale n'est nécessaire, on omet simplement cette déclaration.
<commandes> est une suite de commandes séparées par des point-virgule.
Nota : Pour changer de ligne sans changer de section dans une feuille de calcul, appuyer simultanément sur " Shift "et " Return ".
Chaque ligne de commande, sauf la ligne comportant " proc " doit se terminer soit par " ; " soit par " : "
exemple 1
Exemple :
procédure de calcul de la racine carrée entière d'un entier positif ou nul
Définition de la procédure
> racineCarree := proc(n)
> local k;
> k := 1;
> while k*k<=n do
> k := k+1;
> od;
> k-1;
> end:
Deux appels à cette procédure
> racineCarree(100); racineCarree(n);
Error, (in racineCarree) cannot evaluate boolean
exemple2
> restart;
>
bonjour:=proc(n)
print("bonjour");
print("une approximation rationnelle de" ,Pi^2/6 , "est ", sum(1/i^2,i=1..n));
print("merci et a bientot");
end;
> bonjour(10);
Variables locales et variables globales
Outre les variables transmises comme paramètres dans une procédure, on distingue deux types de variables :
les variables locales
Elles sont utilisées durant l'exécution de la procédure mais ne sont pas accessibles à l'exterieur de celle-ci.
Exemple
> restart;
>
iter:=proc(n)
local compteur,i;
compteur:=0;
for i from 1 to n do
if floor(n/i)=n/i then print(i," est un diviseur de ", n) ;
compteur:=compteur+1:
fi;
od;
print("On compte", compteur," diviseurs de", n);
end;
> iter(34);
Et pourtant compteur est inconnu à l'exterieur de la procédure. En effet
> compteur;
Relancer la procédure en enlevant "i" dans l'ensemble des variables locales. Que constatez-vous ?
les variables globales
Graphiques
Les possibilités graphiques de Maple sont assez larges, et différentes options sont utilisables suivant les "packages" utilisés.
Représentation des fonctions à une variable
> restart;
> f:=x->exp(-x^2);
> plot(f(x),x=-2..2);
On peut préférer des points à une courbe et changer de couleur :
> plot(f(x),x=-2..2,style=point,color=blue);
On peut représenter plusieurs graphes sur le même dessin ; le premier argument de plot sera une liste (de fonctions par exemple) : {fonction1, fonction2, ...,fonctionp} :
> g:=x->diff(f(x),x);
> plot({f(x),g(x)},x=-2..2);
Surfaces
> restart;
> f:=(x,y)->exp(-(x^2+y^2));
> plot3d(f(x,y),x=-2..2,y=-2..2);
Graphique animé
On peut représenter, successivement et sur un même dessin , le graphe d'une fonction dépendant d'un paramètre, lorsque celui-ci parcours un ensemble de valeurs. A cet effet, on doit faire appel au "package" plots.
> restart;
> with(plots)
>
>
Warning, premature end of input
> f:=(x,epsilon)->exp(-x^2/epsilon);
> animate(f(x,epsilon),x=-2..2,epsilon=0.1..1);
La commande display
Encore plus fort : on peut faire afficher sur un même graphique plusieurs commandes graphiques. Il faut pour cela appeler le package plots.
> restart;with(plots):
>
commande1:=plot(ln(1+x),x=0..1,y=0..1,style=line):
commande2:=plot(x-x^2/2+x^3/3,x=-0..1,y=0..1,style=point):
> display({commande1,commande2},axes=boxed,title=`ln(1+x) et son d.l.`);