Tour d'horizon des fonctionnalites
Premiers essais
> int(1/(1+x^2),x=0..infinity);
> sin(%);
> plot(sin(x),x=-Pi..Pi);
> p1:=%:
> series(sin(x),x=Pi,8);
> series(sin(x),x,8);
> convert(%,polynom);
> p2:=plot(%,x=-3*Pi/2..3*Pi/2):
> plots[display](p1,p2);
> plot3d(x^2-y^2,x=-10..10,y=-10..10);
Les fonctions d'aide
> ?plot
Entiers et rationnels
> 2+2;
> 2^10;
> 7^500;
> 100!;
> 1000!;
> igcd(1000!,7^500);
> 1000!/7^500;
> ?numtheory
C'est le premier exemple de package. Le help est omis ici, mais on y voit que certaines fonctions s'obtiennent directement :
> nextprime(10^20);
alors que d'autres ont besoin d'une forme d'appel plus longue :
> numtheory[cyclotomic](7,x);
ou :
> with(numtheory,cyclotomic):
> cyclotomic(8,x);
Algbre linaire
La syntaxe des matrices
> A:=array([[1,x,y],[x,y,z],[y,z,1]]);
Le package linalg contient les fonctions relatives aux matrices
> ?linalg
> linalg[det](A);
> linalg[charpoly](A,lambda);
> B:=subs(x=2,y=3,z=4,eval(A));
> linalg[jordan](B,'P');
> P;
> eval(P);
Le produit de matrices
> linalg[multiply](A,B);
ou
> evalm(A &* B);
Calculs polynomiaux
> p:=x^5*y+3*x^2+1;
> degree(p,x);
> coeff(p,x,2);
> expand((x+1)^20);
> factor(%);
un polynme alatoire :
> randpoly(x);
> factor(%);
Ceci prouve l'irrductibilit.
> f:=(1+x*(1+y))^2/(1-y^2);
> collect(f,x);
> collect(f,x,normal);
Un peu plus de vrai calcul :
> P:=x^10-v*x^9-x+v;Q:=2*x^3+5*u*x^2+2*u^2*x+x+2*u;
> 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
, avec
> 'U'=U,'V'=V;
On peut verifier
> normal(U*P+V*Q);
Bien sr, la primalit relative ne survit pas la spcialisation :
> resultant(P,Q,x);
> factor(%);
> gcd(P,subs(u=-3,Q));
On peut aussi manipuler des fractions
> f:=7/((x+1)^7-x^7-1);
> convert(f,parfrac,x);
recherche des racines exactement
> solve(1/f,x);
> solve(a*x^3+b*x^2+c*x+d,x);
ou numeriquement
> fsolve(f=1,x);
on peut aussi trouver les racines complexes d'un polynome
> fsolve(numer(f-1),x,complex);
> fsolve(numer(f-1),x);
> Digits:=100:
> 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 algebrique)
> alias(alpha=%);
> evala(Normal((alpha^5+1)/(alpha^2-1)));
On peut aussi compter le nombre de racines sur un intervalle de R
> 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));
Primitives, equations differentielles
> int(1/(x^2-2),x);
> int(exp(x^2),x);
> int(exp(x^3),x);
> int(tanh(x^2),x);
Ceci prouve qu'il n'y a pas de primitive elementaire.
Des intgrales dfinies (par recherche en table) :
> int(exp(-x^2)*log(x),x=0..infinity);
et un peu de transformes de Fourier
> ?inttrans
> inttrans[fourier](1/(1+x^2),x,s);
> plot(%,s=-10..10);
> deq:=diff(y(x),x,x)^2=(1+diff(y(x),x))^3;
> subs(x=0,diff(y(x),x));
> %;
Error, wrong number (or type) of parameters in function diff
> 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));
Un (tout petit) peu d'EDP :
> ?PDEtools
> ?examples,vib_membrane
Suites et series
> 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);
Quelques sommations definies
> sum(n!*z^n/(2*n+1)!,n=0..infinity);
Developpement en series
> f:=(sin(Pi/(6+x))+cos(Pi/(3+x)))^(1/x);
> series(f,x,4);
> series(arccos(1-x),x);
> asympt(n!,n);
>
Une session reelle est un melange de tout ca, avec experimentations, calculs de valeurs numeriques, petites procedures,...