Logiciels libres et enseignement

Favoriser l’usage de logiciels libres et de formats ouverts

Auteur : Équipe PARI, Laboratoire A2X, Université de Bordeaux I, dirigée par Henri Cohen

Description du logiciel

PARI-GP est un ensemble de logiciels destiné principalement à la pratique du calcul sur les nombres, les fonctions ou les matrices, dans un contexte à coloration très arithmétique.

Il y a tout d’abord un calculateur en mode texte qu’on peut appeler au moyen de la commande gp. Le calculateur gp n’est pas a priori un outil de calcul formel, mais il possède néanmoins quelques capacités dans ce domaine. Les fonctions mathématiques accessibles sont tr%Eès avancées et couvrent bien entendu tout le champ de l’enseignement secondaire (même très au delà, jusqu’à la recherche pointue en arithmétique ; mais il n’est bien sûr pas nécessaire d’avoir de telles connaissances pour exploiter les possibilités de base de PARI).

PARI comporte par ailleurs une librairie libpari permettant l’inclusion de routines mathématiques avancées dans des programmes en code C, sur laquelle nous ne nous étendrons pas.

Pour les premiers pas, on pourra appeler l’aide en ligne en tapant un simple point d’interrogation ?, et la documentation complète en tapant deux points d’interrogations consécutifs (??). L’aide en ligne contextuelle sur une fonction s’obtient en précédant le nom de la fonction d’un point d’interrogation :

? ? exp
exp(x): exponential of x

(le premier point d’interrogation, ici, est le prompt de gp, qui est lui aussi un point d’interrogation !)

Exemples d’utilisation

Notons tout d’abord qu’une interface utilisateur pour pari existe dans le logiciel de traitement de textes TeXmacs, permettant simplement d’insérer dans un document en cours d’élaboration le résultat d’un calcul. PARI se distingue par un niveau de performances absolument phénoménal pour les calculs en multiprécision sur les nombres. Les calculs suivants faits avec une précision de 1000 décimales exactes s’effectuent en un temps si faible que ce temps reste imperceptible à l’utilisateur...

GP/PARI CALCULATOR Version 2.1.0 (released)
i586 running linux (ix86 kernel) 32-bit version
(readline v4.1 enabled, extended help available)

Copyright (C) 2000 The PARI Group

PARI/GP is free software, covered by the GNU General Public License, and
comes WITHOUT ANY WARRANTY WHATSOEVER.

Type ? for help, \q to quit.
Type ?12 for how to get moral (and possibly technical) support.

realprecision = 28 significant digits
seriesprecision = 16 significant terms
format = g0.28

parisize = 4000000, primelimit = 500000
? \p 1000
realprecision = 1001 significant digits (1000 digits displayed)
? Pi
%1 =
3.14159265358979323846264338327950288419716939937510582097494459
2307816406286208998628034825342117067982148086513282306647093844
6095505822317253594081284811174502841027019385211055596446229489
5493038196442881097566593344612847564823378678316527120190914564
8566923460348610454326648213393607260249141273724587006606315588
1748815209209628292540917153643678925903600113305305488204665213
8414695194151160943305727036575959195309218611738193261179310511
8548074462379962749567351885752724891227938183011949129833673362
4406566430860213949463952247371907021798609437027705392171762931
7675238467481846766940513200056812714526356082778577134275778960
9173637178721468440901224953430146549585371050792279689258923542
0199561121290219608640344181598136297747713099605187072113499999
9837297804995105973173281609631859502445945534690830264252230825
3344685035261931188171010003137838752886587533208381420617177669
1473035982534904287554687311595628638823537875937519577818577805
32171226806613001927876611195909216420199

? exp(Pi*sqrt(163))
%2 =
262537412640768743.999999999999250072597198185688879353856337336
9908627075374103782106479101186073129511813461860645041930838879
4975386404490572871447719681485232243203911647829148864228272013
1178317065010452226878014448417703469694633557076817238876810009
2370653951938650636275765788855822394811427691210083088665110728
4710623465811298183012459132836100064982665923651726178830863710
7864521955281542746651096110014725020979046393817787125750098036
5779223064312165113108738059929824233558494561239956769997843596
4864096003266482443521306491599303270530753256568618388265483309
8028466962428738847518444368385307341150444694788400594644691316
8212059294605454216375489189006015035687286293314006363226814635
1612163764864131429342351600214180513528287731960179813917884407
1506629949190934962773962072341353025575781802811802102063409749
9392383729033036173981663360032261262088666411718053832855897000
2735722645233287010649586367726698687384859165698266261741988551
15684430332735123103243307572733164953615

Bien entendu, l’intérêt d’effectuer des calculs avec une telle précision n’est en général que purement « sportif », mais c’est agréable de savoir qu’on peut le faire... Il est possible à tout moment de rappeler les commandes déjà effectuées à l’aide des flèches du clavier, et de réutiliser les variables %1, %2... déjà calculées dans les calculs ultérieurs :

? \p 40
realprecision = 48 significant digits (40 digits displayed)
? %1+%2
%3 = 262537412640768747.1415926535890433110598

PARI-gp est donc une calculatrice d’une puissance et d’une efficacité considérable. Un point commode est qu’une variable littérale non affectée est considérée comme une variable libre (c’est-à-dire une indéterminée d’un polynôme)

? (3*x+1)*(2*x-1)*(x-4)
%4 = 6*x^3 - 25*x^2 + 3*x + 4

? (3*x+1)*(2*x-1)*(x-4)/((3*x-1)*(2*x+1)*(x-4))
%5 = (6*x^2 - x - 1)/(6*x^2 + x - 1)

On peut donc faire aisément des calculs sur les polynômes et fractions rationnelles, les simplifications étant faites de façon automatique lorsque c’est possible. Dans le cas de fonctions transcendantes, gp va calculer sans préavis le développement en série au lieu du développement polynomial :

? sin(x)
%6 = x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 - 1/39916800*x^11 + 1/6227020800*x^13 - 1/1307674368000*x^15 + O(x^16)

Mais nous dépassons ici largement le niveau du Lycée... Noter qu’on peut utiliser plusieurs variables ou paramètres simultanément, et affecter ensuite les valeurs de certaines :

? (1+a*x)*(a+x)
%7 = a*x^2 + (a^2 + 1)*x + a

? a=2
%8 = 2
? (1+a*x)*(a+x)
%9 = 2*x^2 + 5*x + 2

Bien entendu, on dispose aussi d’un arsenal impressionnant de fonctions arithmétiques (taper ? 4 pour en avoir la liste, 4 étant le numéro de la rubrique NUMBER THEORETICAL functions)

? primes(20)
%10 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]

? gcd(360,336)

%11 = 24

? binomial(120,71)
%12 = 12930805958841513897337547991361800

Dans tous ces contextes, il y a un certain nombre de possibilités de calcul formel, notamment la dérivation des fractions rationnelles et des séries :

? deriv(1/x)
%13 = -1/x^2

? deriv(sin(x))-cos(x)
%14 = O(x^15)

? deriv(1/sin(x))
%15 = -x^-2 + 1/6 + 7/120*x^2 + 31/3024*x^4 + 127/86400*x^6 + 73/380160*x^8 + 1414477/59439744000*x^10 + 8191/2874009600*x^12 + O(x^13)

Signalons pour terminer que gp est une puissante calculatrice programmable, dotée d’instructions de programmation interne dont voici la liste :

? ? 11

addhelp alias allocatemem break default error
extern for fordiv forprime forstep forsubgroup
forvec getheap getrand getstack gettime global
if input install kill next print
print1 printp printp1 printtex quit read
reorder return setrand system trap type
until whatnow while write write1 writetex

et que Pari possède aussi de fortes capacités de calcul matriciel. Nous ne nous étendrons pas longuement sur ces aspects puisqu’aussi bien les concepts de base de la programmation que de l’algèbre linéaire ne figurent plus aujourd’hui au programme du Lycée (on peut sans doute le regretter... amateurs ne pas s’abstenir) :

? [1,2;-2,1]*[3,4;-5,7]
%16 =
[-7 18]
[-11 -1]

? [1,2;-2,1]^(-1)
%17 =
[1/5 -2/5]
[2/5 1/5]

Recherche avancée