Maîtrise d'Informatique
Maîtrise d'ingénierie mathématique
Module de Calcul Formel
Année 2001-2002



Premier contact avec le système de Calcul Formel
MAPLE V.5



Remarques Pour visualiser convenablement les formules mathématiques sous netscape, il faut ajouter la ligne suivante à votre fichier .Xdefaults:
Netscape*documentFonts.charset*adobe-fontspecific: iso-8859-1
et redémarrer netscape.

1   Vue extérieure de maple

Le système maple est installé dans /Infos/maple/. Plusieurs exécutables se trouvent dans /Infos/maple/bin/. Parmi eux, la commande maple lance une session maple, et xmaple la lance avec son interface graphique. Faire le nécessaire pour que ces commandes soient effectives depuis n'importe où, et créer un répertoire où sauvegarder votre travail.

2   Démarrer avec maple

Lancez maple. Un prompt (>) attend vos instructions. On quitte maple par l'instruction quit.

On appelle l'aide de maple sur la commande cmd par ?cmd et en mode graphique on peut utiliser le menu Help en haut à droite de la fenêtre principale.

Dans les logiciels de calcul formel l'aide est primordiale car il est impossible de connaître toutes les commandes. Consulter l'aide doit être un réflexe devant une incertitude ou un problème.

3   Un peu de syntaxe

Une commande Maple se termine par un point-virgule ;. Si l'on ne souhaite pas voir l'affichage du résultat, on termine la commande par :

= représente l'égalité dans une équation, l'affectation est représentée par :=.

Avec Maple 5.5, %, %% et %%% représentent respectivement le résultat de la commande précédente, de la pénultième commande et de l'anté-pénultième commande Maple. Cela peut être utile quand on a tapé une expression dont l'évaluation a demandé un temps certain, mais dont on n'a pas nommé le résultat alors qu'on veut le ré-utiliser. On nomme alors le résultat par nom:=%;
    1=2;
    evalb(%);
    n1:=1;
    n1;
    n2:=2:
    n2;
    n1=n2;
    evalb(%);
    c;
    1000!;
    f:=%;
Pour revenir à une session vierge: restart;

Sous xmaple, une fenêtre maple apparaît à l'écran. La fenêtre maple peut contenir elle-même plusieurs fenêtres appelées feuilles de travail (worksheet). Vous devez voir une feuille de travail dans la fenêtre.

Ce qui suit vise à vous familiariser avec la feuille de travail de maple, les variables, la distinction entre le calcul exact et le calcul inexact, et vous donner un aperçu des possibilités d'un logiciel généraliste de CF.

4   La feuille de travail de maple

Une feuille de travail est un environnement d'édition qui comporte trois types de zones différentes : On passe d'une zone de type Maple input à une zone de type text input par le menu Insert. On peut passer d'une zone de type text input à une zone de type Maple input soit par le menu Insert, soit en tapant >.


1. Entrez les instructions suivantes:
5*17+3^3-1;
5*
17
+3^3-1
;
a:=3: b:= %+2;
%%; %;

2. Créez une nouvelle feuille de travail. Tapez-y
b;
restart;
a;b;
Revenez à la première feuille. Faites afficher les valeurs de a et b par
a;b;
Qu'en concluez-vous sur l'utilisation de plusieurs feuilles ? Quel est le rôle de l'instruction restart ?


3. Cherchez le bouton de la barre de menu qui permet de saisir du texte dans la feuille de travail. Rédigez vos remarques sur votre feuille de travail. Revenez en mode calcul et entrez les instructions
a:=7;b:=a;

4. Enregistrez votre feuille de travail au format par défaut (Maple WorkSheet) sous le nom tp1.mws dans votre répertoire de travail.

Quittez maple, relancez le logiciel et ouvrez votre feuille de travail tp1.mws. Faites afficher les valeurs de a et b. Que constatez-vous ?



Le menu Edit et la politique d'exécution de Maple

Vous disposez de commandes et boutons pour couper, copier, coller. Vous pouvez aussi utiliser la souris comme précisé plus haut, ou pour déplacer en glissant une partie sélectionnée, et la touche Suppr pour faire disparaitre la sélection.

L'affichage ne reflète pas l'état de la mémoire. C'est l'ordre des opérations qu'on a effectuées qui compte et non pas l'endroit de la feuille où elles se trouvent. La commande Execute du menu Edit peut servir à faire exécuter les instructions d'une feuille de calcul qu'on ouvre ou à reprendre l'exécution d'une partie de feuille qui a été modifiée.

5   Noms et variables


5. Quand on tape seulement le nom d'une variable, on en voit le contenu. Une variable contient son propre nom avant sa première affectation. Pour savoir si c'est le cas :
    assigned(v1);
    v1:=1;
    assigned(v1);
    unassign('v1');
    v1;
    assigned(v1);
    v1:=1;
    assigned(v1);
    v1:=`v1`;
    assigned(v1);

6. Une variable est désignée par un nom. Certaines chaînes de caractères contenant des caractères spéciaux ne conviennent pas. Mais on peut former un nom avec n'importe quelle chaîne entourée de backquotes (accent grave `). Pour les chaînes sans aucun caractère spécial, cela ne change rien; il n'y a pas de différence entre toto et `toto` par exemple. Essayez
restart;
drole de nom := 5; `drole de nom` := 6;
a:=-7/2; a+4:=5;  `a+4`:=5; 
a+4; `a+4`;
7+nom+6+drole;
un/deux; `un/deux`;
toto.txt:=3;
`toto.txt`:=4;

7. À quoi servent respectivement := et le guillemet (accent aigu ' ou quote en anglais) ? Ne pas confondre les accents : l'utilisation de backquotes ne modifie pas la valeur de la variable puisque x:=`x` correspond à x:=x.
restart;
3/2*x-2*y+3.12;
x:=1;
p:= 3*x*y-4*x+y+1;
p_avec_backquotes := 3*`x`*y-4*`x`+y+1;
p_avec_quotes := 3*'x'*y-4*'x'+y+1;
assigned(x); assigned(q);
x:='x'; 
q:= 3*x*y-4*x+y+1;
assigned(x); assigned(q);
À quoi servent les fonctions assigned et anames ?
Ne pas confondre := avec l'égalité. Essayez q=p; q; et q:=p; q;.


8. Quelle est la valeur de l'intégrale ò- ¥¥ exp(- x2)dx ? (voir l'aide sur int). Faites afficher cette intégrale mais pas sa valeur.


9. Être attentif à différencier minuscules et majuscules en maple :
sin(Pi); sin(pi);
I*I; i*i; 
Pi/2; pi/2;
sin(Pi/2); sin(pi/2);
Remarquez que l'affichage graphique peut-être trompeur (vous pouvez passer à un autre type d'affichage pour les zones de sortie avec Output Display du menu Options).

6   Calcul exact et calcul inexact


10. Quelles sont les constantes mathématiques prédéfinies ? Le symbole Pi correspond-t'il à un nombre exact ou non ? Comment obtient-on le nombre e ?


11. Les nombres affectés aux variables ci-dessous sont-ils exacts ou inexacts ?
a := 1/3; a1:= a-sqrt(2); a2:= a-sqrt(2.0);
a3:= sqrt(-1);

12. Le nombre z=(1+i(3)1/2/1-i) est-il exact ? Que fait maple pour l'évaluer ? Calculer sa partie réelle, imaginaire. Convertir z en forme polaire.


13. Spécifiez la fonction evalf utilisée ci--dessous.
b := a^1000;
evalf (b);
evalf(pi); evalf(Pi);

14. Le nombre affecté à la variable c est--il exact ou inexact ?
c := 1/3.0;
d := c^1000;

15. Quel est le nombre le plus précis, evalf(b) ou d ? Calculez leur racine millième. Donnez un avantage et un inconvénient du calcul exact vis--à--vis du calcul inexact.


16. Il est possible de travailler avec des entiers de longueur arbitraire. Calculez 331000. Affectez la valeur à a.

Soit b=1000!. Calculez b puis tapez ifactor(%). Qu'obtient-on ? Déduisez de cette forme combien il y a de zéros à la fin de 1000!.

De la même manière, l'arithmétique décimale peut-être aussi précise que vous le voulez. Calculez (3.0)1/2 puis recommencez après avoir fixé le nombre de décimales à 200 (voir Digits).

Affichez la valeur exacte de a/b puis une approxition numérique à l'aide de evalf.


17. Calculez ò12 ln x dx.
Calculez une primitive de la fonction sin2(x). Vérifiez le résultat en dérivant puis en simplifiant.

7   Packages

Le noyau de maple est réduit mais des bibliothèques sont disponibles pour fournir de nombreuses fonctions. On les appelle packages. Regardez l'aide. Le package linalg, qui contient les fonctions relatives aux matrices, est par exemple couramment utilisé.

Certaines fonctions des packages s'obtiennent directement :
    nextprime(7);
mais elles ont généralement besoin d'une forme d'appel plus longue :
    cyclotomic(7,x);
    numtheory[cyclotomic](7,x);
Trouvez dans l'aide le moyen d'éviter l'appel à la forme de référence package[fonction,options].

8   Entiers et rationnels

    2+2;
    2^10;
    7^500;
    200!;
    ifactor(200!);
    igcd(1000!,7^500);
    1153*(3^58+4^40)/(29!-7^36);
et pour en voir une valeur décimale approchée
    evalf(%);
avec f pour flottante.

Maintenant tapez
    ?numtheory
C'est le premier exemple de package. Certaines fonctions s'obtiennent directement :
    nextprime(10^20);
alors que d'autres ont besoin d'une forme d'appel plus longue :
    cyclotomic(7,x);
    numtheory[cyclotomic](7,x);
ou :
    with(numtheory,cyclotomic):
    cyclotomic(8,x);
Ces deux dernières formes d'appel sont censées toujours marcher. La notation package[fonction,options] est la forme de référence, elle est sans aucune ambiguité et pour lever une ambiguité (si deux fonctions de deux packages différents portent le même nom) il suffit de revenir à cette notation.

9   Calcul matriciel

    a:=array([[1,x,y],[x,y,z],[y,z,1]]);
    a[1,2];
Le package linalg contient les fonctions relatives aux matrices.
    linalg[det](a);
    linalg[charpoly](a,lambda);
    ?vandermonde
    b:=linalg[vandermonde]([x,y,z]);
    linalg[det](%);
    factor(%);
    m:=array(1..5,1..5);
    for i from 1 to 5 do
      for j from 1 to 5 do
        m[i,j]:=1/(i+j-1)
      od;
    od;
    evalm(m);
    H:=linalg[hilbert](5);
    linalg[multiply](a,b);
    evalm(a &* b);

10   Calculs polynomiaux

10.1   Manipulations de base

On a vu plus haut un exemple d'utilisation de factor. Voici quelques manipulations plus simples :
    p:=x^5*y+3*x^2+1;
    degree(p,x);
    coeff(p,x,2);
    expand((x+1)^20);
    expand((1+x*x^2)^5);
    sort(%);
    factor(x^4-1);
    factor(x^4-1,I);
    f:=(1+x*(1+y))^2/(1-y^2);
    collect(f,x);
    collect(f,x,normal);
    p:=x^3*y^2+2*x*y^2-9*x*y^3+5*x;
    q:=x^4+x^2+1;
    pq:=p*q;
    expand(pq);
    collect(%,x);
    coeff(%,x,3);
un peu plus de vrai calcul :
    P:=x^10+u*x+1; 
    Q:=2*x^3+v*x^2-1;
    rem(P,Q,x);
on a aussi le pgcd
    gcd(P,Q);
et la version Bezout (plus lente) :
    gcdex(P,Q,x,U,V);
on a donc UP+V Q=1 comme on peut le vérifi er
    normal(U*P+V*Q);
On peut aussi manipuler des fractions
    f:=7/((x+1)^7-x^7-1);
    convert(f,parfrac,x);

10.2   Résolution d'équations

On peut rechercher des racines exactement
    solve(1/f,x);
    solve(a*x^2+b*x+c,x);
    solve(a*x^3+b*x^2+c*x+d,x);
ou numériquement
    fsolve(f=1,x);
on peut aussi trouver les racines complexes d'un polynôme
    fsolve(numer(f-1),x,complex);
Toutes les solutions ne s'expriment pas facilement
    solve(x^7+x+1,x);
On peut manipuler cet objet avec evala (a pour algèbrique)
    alias(alpha=%);
    evala(Normal((alpha^5+1)/(alpha^2-1)));
On peut aussi compter le nombre de racines sur un intervalle de IR
    readlib(sturm):
    sturm(sturmseq(x^7+x+1,x),x,-infinity,infinity);
et quelques autres simplifications sont possibles
    sum(x^10,x=RootOf(x^4+a*x+b,x));
On peut aussi s'attaquer à des systèmes d'équations :
    solve({3*w+4*x-2*y+z=-2, w-x+2*y+2*z=7, 4*w-3*x+4*y-3*z=2, -w+x+6*y-z=1},
          {w, x, y, z});
    solve({x+y+z=a, x+2*y-a*z=0, b*z+a*y=0}, {x, y, z});
Pour en savoir un peu plus sur les polynômes :
    ? polynom

11   Primitives, équations différentielles, intégrales définies

    int(1/(x^2-2),x);
    int(exp(x^2),x);
    int(exp(x^3),x);
    deq:=diff(y(x),x,x)^2=(1+diff(y(x),x))^3;
    dsolve({deq,y(0)=0,D(y)(0)=1},y(x));
    deq:=(x^3/2-x^2)*diff(y(x),x,x)+(2*x^2-3*x+1)*diff(y(x),x)+(x-1)*y(x);
    dsolve(deq,y(x));
et une intégrale définie
    int(sqrt(x^2),x=-1..0);

12   Suites et séries

    rsolve({u(n+2)=u(n+1)+u(n),u(0)=1,u(1)=1},u(n));
    v:=(3*n^3-10*n^2-9*n+11)*(n+1)!*2^n/(2*n+3)!/(n-5)/(n-4);
    Sum(v,n)=sum(v,n);

12.1   Quelques sommations définies

    factor(sum(i^2,i=0..n));
    sum(1/n^2,n=1..infinity);
    sum(x^n/(n-1)!,n=1..infinity);

12.2   Développement en série

    f:=(sin(Pi/(6+x))+cos(Pi/(3+x)))^(1/x);
    series(f,x,4);
    taylor(f,x=0,4);
    convert(%,polynom);
    series(arccos(1-x),x);
    asympt(n!,n);

13   Graphiques 2D

Attention, certaines fonctions ne sont accessibles que par le package plots.

Tracer une fonction y=f(x)
    plot(3*x^3-10*x^2+4,x=-10..10);
    plot(3*x^3-10*x^2+4,x=-5..5);
    plot(3*x^3-10*x^2+4,x=-1..4);
    plot(sin);
    f:=x->-x^4+10*x^3-12;
    plot(f);
Il existe beaucoup d'options (voir l'aide à partir de plot)

    plot(x*sin(10/x),x=-0.5..0.5,numpoints = 10);
    plot(x*sin(10/x),x=-0.5..0.5);
    plot(x*sin(10/x),x=-0.5..0.5,numpoints = 100);
    plot(x*sin(10/x),x=-0.5..0.5,numpoints = 100,axes=BOXED);
    plot(x*sin(10/x),x=-0.5..0.5,numpoints = 100,axes=FRAMED);
    plot(x*sin(10/x),x=-0.5..0.5,numpoints = 100,axes=NONE);
La spécification d'un intervalle vertical peut se révéler utile
    plot((1/x),x=-0.2..0.2);
    plot((1/x),x=-0.2..0.2,numpoints=100);
    plot((1/x),x=-0.2..0.2,y=-100..100);

13.1   Courbes paramétrées

    plot([t*cos(5*t), sin(5*t)*t-t,t=0..2*Pi]);

13.2   Coordonnées polaires

plot([r(t),theta(t),t=range of t ],h,v,coords=polar); avec r(t) la distance à l'origine, theta(t) l'angle de rotation, h et v les intervalles horizontaux et verticaux.
    plot([1/100*t^2,t,t=0..15*Pi],coords=polar);

14   Fichiers

    currentdir();
Vous pouvez modifier le répertoire dans lequel s'écrivent et se lisent les fichiers par currentdir("chemin du nouveau répertoire");
    save g,p,q,r,toto;
    save g,p,q,r,"toto.m";
Noter la différence de contenu des fichiers ainsi créés par Maple (utiliser cat ou more dans un shell par exemple).

Quelle différence lorsque Maple charge ces fichiers?
    restart;

    read toto;
    p;q;r;
    restart
    read "toto.m";
    p;q;r;
Pour finir, on sauvegarde la feuille de travail. On pourra ensuite comparer les deux sortes de fichiers texte sous lesquels on peut sauvegarder. Éditer un petit fichier de commandes que vous chargerez dans Maple.


Ce document a été traduit de LATEX par HEVEA.