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;

[Maple Math]

> 4!;

[Maple Math]

Appel à des fonctions

> sqrt(4); sqrt(5);

[Maple Math]

[Maple Math]

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));

[Maple Math]

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;

[Maple Math]

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);

[Maple Math]

On peut aussi modifier la valeur d'une variable par une nouvelle affectation

> a := 31^2;

[Maple Math]

> sqrt(a);

[Maple Math]

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;

[Maple Math]

En SCHEME, une commande équivalente aurait amené un message d'erreur du type unbound variable

> sqrt(c);

[Maple Math]

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;

[Maple Math]

[Maple Math]

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;

[Maple Math]

[Maple Math]

> restart;

> a;c;

[Maple Math]

[Maple Math]

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

<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;

[Maple Math]

[Maple Math]

L'interprète donne deux réponses pour les deux commandes 1; et 2; puisque la condition [Maple Math] est vraie.

> if 1=0 then

> 1;2;

> fi;

Pas de réponse étant donné que la condition [Maple Math] est fausse.

> if 1=1 then

> 1;

> else

> 2;

> fi;

[Maple Math]

> if 1=0 then

> 1;

> else

> 2;

> fi;

[Maple Math]

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;

[Maple Math]

>

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

<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;

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

>

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

<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 [Maple Math] .

> k-1;

[Maple Math]

Vérification

> evalf(sqrt(n));

[Maple Math]

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);

[Maple Math]

> f(0);

[Maple Math]

> diff(f(x),x);

[Maple Math]

Ici x est une variable muette. En effet on a

> f(y);f(xi);

[Maple Math]

[Maple Math]

mais

> f;

[Maple Math]

> whattype(f);

[Maple Math]

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;

[Maple Math]

> f(2);

[Maple Math]

> f(-2);

[Maple Math]

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>

)

<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);

[Maple Math]

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;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> bonjour(10);

[Maple Math]

[Maple Math]

[Maple Math]

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;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> iter(34);

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

Et pourtant compteur est inconnu à l'exterieur de la procédure. En effet

> compteur;

[Maple Math]

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);

[Maple Math]

> 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);

[Maple Math]

> plot({f(x),g(x)},x=-2..2);

Surfaces

> restart;

> f:=(x,y)->exp(-(x^2+y^2));

[Maple Math]

> 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);

[Maple Math]

> animate(f(x,epsilon),x=-2..2,epsilon=0.1..1);

[Maple Math]

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.`);