Cours de Calcul Formel
2
Depuis les ann´es 70 on sait utiliser l’ordinateur pour non seulement le calcul
num´erique en variable flottante et en prcision finie mais ´egalement pour le cal-
cul alg´ebrique c’est `a dire traitant des calculs avec paramtres, des polynˆomes,
des fractions. Par rapport au calcul num´erique traditionel, on chappe au cal-
cul d’erreur traditionel, et au probl`eme de propagation des erreurs, mais en
contrepartie le calcul formel traite des nombres de plus en plus gros, sur les-
quels les oprations sont de plus en plus longues `a ˆetre ex´ecutes.
Un exemple pour le calcul du d´eterminant d’une matrice A= (ai,j )1i,j25,
on peut vouloir utiliser la formule :
det(A) = X
σS25
²(σ)a1(1)a2(2) ···a25(25).
Or il y a dans cette somme 25! 1,55 ·1025 produit, en supposant qu’un
ordinateurs effectue 10 milliards de produits par seconde, il faudrait compter
49.000.000 d’ann´ees.
Il devient donc indispensable d’valuer le temps que mettra un algorithme
pour fournir un r´esultat avant mˆeme de le programmer. De mˆeme on voudrait
pouvoir comparer les algoritmes entre eux.
On trouve toute une s´erie de logiciels de calculs formels, les plus connues
sont Derive, Mathematica et Maple, mais aussi Mupad qui a l’avantage d’ˆetre
gratuit, nous choisissons de travailler sur Maple
Chapitre 1
Programmer sur Maple
S’agissant d’un langage de calcul formel deux utilisations sont possibles, l’une
de boites noires, on utilise des fonctionalit´es d´eja enregistr´es dans les bi-
bliot`eques du programme, Maple en l’occurence, en se servant de l’aide en
ligne et des manuels. On explorera en Travaux Pratiques les diff´erentes fonc-
tionnalit´es de Maple, mais dans cet expos´e on s’attachera essentiellement aux
rudiments n´ecessaires `a la programmation de proc´edures simples.
1.1 Structures it´eratives et conditionnelles
1.1.1 Les boucles
La structure g´en´erale pour d´efinir une boucle it´erative est :
for...from...by...to...while...do
ici est plac´e le corps de la boucle
od ;
La commande for introduit le nom de la variable qui sert de compteur ;
from fixe la valeur initiale de ce compteur, by la valeur de l’incr´ementation
r´ealis´ee `a chaque tour de la boucle ;
to pr´ecise la valeur finale du compteur ;
quant `a while, il permet d’introduire une condition suppl´ementaire qui si
elle n’est pas r´ealis´ee, arrˆete la boucle.
3
4CHAPITRE 1. PROGRAMMER SUR MAPLE
Chacun des termes for...from...by...to...while peut ˆetre omis, pourvu que
cela garde un sens et n’entrainne pas la cr´eation d’une boucle infernale :
si c’est from qui est absent le compteur commencera `a 1, si c’est by le comp-
teur progressera de 1 `a chaque tour de boucle.
Exemples :
Calculez la somme des carr´es des nombres impairs plus petit que 1000 :
>som :=0 : # initialisation
for i by 2 while i2<1000
do som :=som+i2
od :
>som ; # ´evaluation
5456
>i ;
33
1.1.2 Les tests
Les test se font `a l’aide de la structure :
if...then...else...fi ;
if introduit une quantit´e bool´eenne (qui aura pour valeur true ou false) ; `a la
suite de then et de else, qui peut ˆetre omis on ´ecrit des s´equences d’op´eration
`a r´ealiser suivant la valeur du bool´een. Si l’on veut faire plus compliqu´e, on
a aussi la structure :
if...then...elif...then...elif... ... ...then...else...fi ;
et ceci avec autant de elif...then que l’on voudra.
Ainsi on peut calculer la somme des carr´es des premiers nombres premiers
dont la somme ne d´epasse pas 1000 :
>som1 :=4 :
>for i from 3 by 2 while i2<1000 do
if isprime(i) then som1 :=som1+i2;
fi ;
od ;
>som1 ;
3358
1.1. STRUCTURES IT ´
ERATIVES ET CONDITIONNELLES 5
1.1.3 Proedures
Un programme s’´ecrit sous forme de proc´edure. La d´efinition d’une proc´edure
se fait de la mani`ere suivante :
nom de la proedure := proc(s´equence de param`etres)
local...# s´equence de param`etres locales
option... ;
ici le corps de la proedure
end ;
Les deux lignes commen¸cant par option et local peuvent ˆetre omises. La
commande local introduit les variables internes `a la d´efinition de la proc´edure.
Toute variable non d´eclar´ee locale est consid´er´ee comme globale et conserve
sa valeur hors la proc´edure.
Exemples :
Voici une proc´edure qui retourne la somme des carr´es des nombres premiers
dont le carr´e ne d´epasse pas x:
>somp :=proc(x)
local i,s ;
s :=4 ; i :=3 ;
for i by 2 while i2<x do
if isprime(i) then s :=s+i2;
fi ;
od :
s ;
end ;
># exemple d’application :
>somp(1000), somp(12865) ;
3358,122705
>s ;
s
1.1.4 R´ecursivit´e
Une proc´edure est dite r´ecursive si lors de son ex´ecution elle fait appel `a elle
mˆeme. Sinon on dit que la proc´edure est it´erative. Les r´ep´etitions sont alors
g´er´es par des boucles d´efinies `a l’aide de for ou de while.
Un exemple de proc´edure r´ecursive, la fonction puissance : x7→ xn, et le
1 / 41 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !