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 :
-
zones de Maple input qui sont les zones actives d'entrée
des commandes (par défaut en rouge),
- zones de text input pour les commentaires(par
défaut en noir),
- zones d'output dans lesquelles Maple affiche les
résultats (par défaut en bleu).
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.