Echantillon des possibilités de Maple

www.maplesoft.com

Maple est un calculateur symbolique. Par exemple, un nombre rationnel non simplifiable reste sous la forme réduite de fraction et non sous la forme d'une approximation décimale

> 13/21+5/3;

16/7

De même

> sqrt(2)*sin(Pi/3);

1/2*sqrt(2)*sqrt(3)

Par défaut, l'arithmétique entière de Maple est émulée et le nombre de chiffres n'est pratiquement pas restreint par le nombre de bits du processeur

> 54!-3^50;

230843697339241380472092742683027581083278564571090...

Ici le processeur a 32 bits, mais le nombre de chiffres que peut contenir un nombre entier est de plus de 268 millions. Inutile de dire que l'on n'a pas souvent l'occasion de travailler avec de tels nombres !

> kernelopts(wordsize);
kernelopts(maxdigits);

32

268435448

Maple peut aussi calculer avec une arithmétique décimale dont la précision n'est (pratiquement) pas limitée.

> evalf[60](Pi/2);

1.5707963267948966192313216916397514420985846996875...

> evalf(sqrt(2)*sin(Pi/3));

1.224744872

Maple est avant tout destiné à manipuler des "objets" symboliques, comme ici un produit de facteurs

> p:=(x-2)*(x-3)*(x+3)*(x^2-2*x+1);

p := 
(x-2)*(x-3)*(x+3)*(x^2-2*x+1)

que l'on peut développer...

> Polynome:=expand(p);

Polynome 
:= x^5-4*x^4-4*x^3+34*x^2-45*x+18

ou mettre en facteurs.

> factor(Polynome);

(x-2)*(x-3)*(x+3)*(x-1)^2

Maple permet la création de fonctions symboliques

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

f := 
proc (x, y) options operator, arrow; sin(x^2)*...

ou de représentations graphiques...

> plot([f(z,-z),f(z,-2)],z=0..2*Pi);

[Maple 
Plot]

de toutes natures, paramétriques, en coordonnées polaires, elliptiques, hyperboliques,...et animées

> plots[animate]([cos(t),sin(3*t+phi),t=0..2*Pi],phi=0..2*Pi,numpoints=80,frames=50);

[Maple 
Plot]

Maple sait dériver...

> Diff(f(phi,u),phi$2):%=value(%);

Diff(sin(phi^2)*exp(u),`$`(phi,2)) = -4*sin(phi^2)*...

intégrer,...

> A:=Int(Int(f(s,t),s=0..x),t=0..y):a:=value(A):A=a;

Int(Int(sin(s^2)*exp(t),s = 0 .. x),t = 0 .. y) = 1...

effectuer des manipulations sur des expressions,...

> A=factor(a);

Int(Int(sin(s^2)*exp(t),s = 0 .. x),t = 0 .. y) = 1...

> simplify(cos(3*t)-sin(2*t));

4*cos(t)^3-3*cos(t)-2*sin(t)*cos(t)

> convert(binomial(n,m),factorial);

n!/m!/(n-m)!

et représenter des surfaces en 3D de toutes natures.

> plot3d(a,x=-1..1,y=-1..1,axes=boxed);

[Maple 
Plot]

Il peut faire des développements en série,...

> series(cos(x^2)*exp(-x),x);

series(1-1*x+1/2*x^2-1/6*x^3-11/24*x^4+59/120*x^5+O...

des développements asymptotiques,...

> asympt(ln(x!),x,3);

(ln(x)-1)*x+ln(sqrt(2)*sqrt(Pi))+1/2*ln(x)+O(1/x)

ou calculer des séries formelles. Maple connaît un très grand nombre de fonctions dites spéciales.

> Sum(((-1)^k)/((k+1)!)^2,k=0..infinity):%=value(%);

Sum((-1)^k/(k+1)!^2,k = 0 .. infinity) = hypergeom(...

> convert(%,StandardFunctions);

Sum((-1)^k/(k+1)!^2,k = 0 .. infinity) = 1-BesselJ(...

On peut également faire des hypothèses de calcul

> simplify(ln(y^2/x));

ln(y^2/x)

En effet, l'expression suivante n'est équivalente à la précédente que si y est réel positif...

> simplify(ln(y^2/x)) assuming y>0;

2*ln(y)+ln(1/x)

Alors que si y est seulement réel...

> simplify(ln(y^2/x)) assuming y::real;

ln(y^2)+ln(1/x)

Toutes les fonctions numériques de Maple sont définies sur le corps des complexes.

Naturellement on peut créer des matrices à éléments numériques, décimaux, symboliques,...

> M:=Matrix([[2,x],[conjugate(x),-1]]);

M := 
_rtable[95714904]

> S:=Matrix(2,2,shape=scalar[3]);

S := 
_rtable[96409328]

calculer des expressions d'algèbre matricielle (ici le produit de l'inverse de M par S),...

> M^(-1).S;

_rtable[96411524]

résoudre des systèmes linéaires avec, éventuellement, la méthode de son choix,...

> LinearAlgebra[LinearSolve](M,Vector([-1,3]),method='LU');

_rtable[96391328]

calculer des valeurs propres, etc.

> LinearAlgebra[Eigenvalues](M);

_rtable[96391368]

Maple sait résoudre des équations

> eq:=exp(-x^2)=1/x:eq;

exp(-x^2) = 1/x

Une représentation graphique montre que cette équation n'a pas de solution réelle (les courbes ne se coupent pas)

> plot([rhs(eq),lhs(eq)],x=-3..3,-2..2);

[Maple 
Plot]

Pourtant Maple donne une réponse

> solve(eq);

exp(-1/2*LambertW(-2))

qui est une solution complexe...

> evalf(%);

.6143632453-.6810654879*I

Maple sait aussi résoudre des équations différentielles

> eqd:=diff(y(x),x$2)=ln(1/x)-exp(-x^2):eqd;

diff(y(x),`$`(x,2)) = ln(1/x)-exp(-x^2)

> dsolve(eqd);

y(x) = 
1/2*ln(1/x)*x^2+3/4*x^2-1/2*sqrt(Pi)*x*erf(x...

avec aussi des conditions initiales : y(1)=1, y '(1)=0

> dsolve({eqd,y(1)=1,D(y)(1)=0});

y(x) = 
1/2*ln(1/x)*x^2+3/4*x^2-1/2*sqrt(Pi)*x*erf(x...

On peut aussi trouver des possibilités assez inattendues...

> convert(1.*miles+2.*yard+3.*ft+2.5*inches,metric);

1.609344000*km+2.806700000*m

> convert(1.,units,year[standard],year[Julian]);

.9993155373

Maple possède un langage de programmation, permet de créer des librairies de programmes, de lire des fichiers, d'en céer, etc...

L'apparente simplicité des commandes ne doit pourtant pas laisser croire que les manipulations sont toujours faciles. Un apprentissage et une certaine expérience seront nécessaires pour aborder des problèmes réels.