Fonctions :                                                                                                                                  Fonctions à une seule  variables :

Maple permet à l’utilisateur de créer ses propres fonctions soit à seule une variable soit à plusieurs : Par exemple taper « f:=x->x^2; » définit la fonction f telle que « f(x)=x2 ».

>f :=xàx^2+x+1 ;

>f(2) ;

>f(sqrt(2)) ;

>f:= xàif x>0 then x^(1/3) else 3*x^2 fi;

« f:=x->piecewise(x>3,x^2,x-5); » définit une fonction f telle que f(x)=x2 pour x supérieur à 3, et f(x)=x-5 sinon.
Attention : avant d'évaluer cette fonction il vous faudra taper « readlib(piecewise): ».

Fonctions de plusieurs variables

Pour définir la fonction f de deux variables telle que  f(x,y) = x2 + y2 - 3 ,il suffit de taper        « f:=(x,y)->x^2+y^2-3; ».                                                                                                            On peut alors taper, par exemple, « f(2,5); »

Comment effectuer des répétitions ?

La boucle FOR :

* Essayez : for k from 1 to 3 do print(k,k^2);od; On aurait pu utiliser une écriture plus classique :

for k from 1 to 3
   do
     print(k,k^2);
   od;

Pour cela il suffit de taper « Majuscule+Entrée » au lieu de « Entrée » à la fin de chaque ligne.
En tapant « Entrée » à la dernière ligne, toutes les autres seront exécutées (c'est l'entrée de « od; » qui provoque l'exécution du « for »). Essayez maintenant cela :

for k from 1 by .5 to 3
   do
     print (k,k^2);
   od;

* Deux autres syntaxes différentes :                                                                                                                 for var from debut by int to fin while condition do ... od;             ou : for var in expression while condition do ... od;                      

  Exemple : r:=2.0; for i from 2 to 50 by 2 do r:=r*i*i/(i+1)/(i-1) od;                    Si « from » ou « by » n'apparaît pas, le champ correspond ant vaut 1.

Exemple de boucle « for » avec « in » : Comment calculer le maximum d'une liste d'entiers ?

m:=-infinity; L:=[2,-1,4,5,7,-9]; for x in L do m:=max(x,m); od;

Boucle « do...od; » seule : c'est une boucle infinie. Pour en sortir il faut utiliser l'instruction « break ».

i:=0;
do
  i:=i+1;
  if i>=10 then break fi;
od;

d'autres boucles :

* En utilisant l’aide essayer d’explorer un autre type de boucle la boucle WHILE

*  On peut parfois avantageusement remplacer une boucle « for » par des instructions « seq » (séquence) :

seq(i^2,i=1..10); seq(x,i=1..5);
convert([seq(i^2,i=1..10)],`+`);

On peut aussi utiliser l'opérateur « $ » pour itérer :

x$5; f(i)$i=1..6;

Autres structures de contrôles : les tests : 

Syntaxe : if cond then ... elif cond then ... else ... fi;
Les parties entre crochets («  » et «  » sont optionnelles.
« cond » désigne les conditions.                                                                                                Exemple : voici une procédure qui affiche le nombre de jours dans un mois désigné par son numéro (1 pour janvier, 2 pour février, 3 pour mars, etc...).

   if n>12 or n<0 then print (`impossible`)
     elif n=2 then print(`Il y a 28 jours`)
     elif n=4 or n=6 or n=9 or n=11 then print (`il y a 30 jours`)
     else print (`il y a 31 jours`);
   fi;

 

Exercices :

1)  Définir la fonction f(x)=x3-y3 si x#y et f(x)=3x2   sinon.

2) Afficher les entiers de 27 à 152.

3) Écrire les fonctions suivantes :

1.     hypotenuse (longueur,largeur)

2.     perimetreDuCercle (rayon)

3.     barycentre (x1,coef1,x2,coef2)

4.     sommeDesPremiersEntiers (n)

 

4) Afficher les entiers de 27 à 52 en ligne.

 

 

Solutions

  for i from 27 to 152 do i; od;

  Solution :

hypotenuse:=(l,r)->sqrt(l*l+r*r);
perimetreDuCercle:=r->Pi*2*r;
barycentre:=(x1,coef1,x2,coef2)->(x1*coef1+x2*coef2)/(coef1+coef2);
sommeDesPremiersEntiers:=n->n*(n+1)/2; # n premiers entiers NON NULS

  Solution :

s:=NULL:
for i from 27 to 52 do s:=s,i: od:
s;