| Maîtrise d'Informatique Maîtrise d'ingénierie mathématique | Module de Calcul Formel Année 2001-2002 |
|---|
Netscape*documentFonts.charset*adobe-fontspecific: iso-8859-1et redémarrer netscape.
1=2;
evalb(%);
n1:=1;
n1;
n2:=2:
n2;
n1=n2;
evalb(%);
c;
1000!;
f:=%;
Pour revenir à une session vierge: restart;5*17+3^3-1; 5* 17 +3^3-1 ; a:=3: b:= %+2; %%; %;
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 ?
a:=7;b:=a;
assigned(v1);
v1:=1;
assigned(v1);
unassign('v1');
v1;
assigned(v1);
v1:=1;
assigned(v1);
v1:=`v1`;
assigned(v1);
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;
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 ?
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).
a := 1/3; a1:= a-sqrt(2); a2:= a-sqrt(2.0); a3:= sqrt(-1);
b := a^1000; evalf (b); evalf(pi); evalf(Pi);
c := 1/3.0; d := c^1000;
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].
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.
?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.
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);
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);
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
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);
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);
factor(sum(i^2,i=0..n));
sum(1/n^2,n=1..infinity);
sum(x^n/(n-1)!,n=1..infinity);
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);
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);
plot([t*cos(5*t), sin(5*t)*t-t,t=0..2*Pi]);
plot([1/100*t^2,t,t=0..15*Pi],coords=polar);
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).
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.