Cascmd FR

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 849

Calcul formel

et
Mathmatiques
avec
Xcas
Rene De Graeve
Matre de Confrence Grenoble I

2
Remerciements

Je remercie :
Bernard Parisse pour ses prcieux conseils et ses remarques sur ce texte,

c 2002, 2006 Rene De Graeve, [email protected]



La copie, la traduction et la redistribution de ce document sur support lectronique
ou papier sont autoriss pour un usage non commercial uniquement. Lutilisation
de ce document des fins commerciales est interdite sans laccord crit du dtenteur du copyright. Cette documentation est fournie en ltat, sans garantie daucune
sorte. En aucun cas le dtenteur du copyright ne pourra tre tenu pour responsable
de dommages rsultant de lutilisation de ce document.
Ce document est disponible ladresse Internet suivante :
http://www-fourier.ujf-grenoble.fr/~parisse/cascmd_fr.pdf

3
Prface

Bernard Parisse
Matre de Confrences lUniversit de Grenoble I
Dveloppeur du logiciel de calcul formel giac et de son interface Xcas. La version jour se rcupre sur ;
http://www-fourier.ujf-grenoble.fr/parisse/giac.html

Table des matires


0.1

. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
giac

55
55
55
55
56
56
56
57
57
57

Linterface Xcas
1.1 Mise en route de linterface Xcas . . . . . . . . . . . . . . . . .
1.1.1 Sous Unix . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 Sous Windows . . . . . . . . . . . . . . . . . . . . . . .
1.1.3 Sous MacOS . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Les diffrents niveaux dentre . . . . . . . . . . . . . . . . . . .
1.3 Que voit-on au dmarrage ? . . . . . . . . . . . . . . . . . . . . .
1.4 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1 Le menu Fich . . . . . . . . . . . . . . . . . . . . . . .
1.4.2 Le menu Edit . . . . . . . . . . . . . . . . . . . . . . .
1.4.3 Le menu Cfg . . . . . . . . . . . . . . . . . . . . . . . .
1.4.4 Le menu Aide . . . . . . . . . . . . . . . . . . . . . . .
1.4.5 Les menus des commandes de calcul . . . . . . . . . . . .
1.5 Comment bien grer son espace de travail . . . . . . . . . . . . .
1.5.1 Pour slectionner ou dslectionner un niveau . . . . . . .
1.5.2 Pour remplir les niveaux . . . . . . . . . . . . . . . . . .
1.6 Les diffrentes configurations . . . . . . . . . . . . . . . . . . . .
1.6.1 Configuration du Cas . . . . . . . . . . . . . . . . . . . .
1.6.2 Configuration du graphique avec le menu :
CfgIConfiguration graphique . . . . . . . . .
1.6.3 Configuration gnrale . . . . . . . . . . . . . . . . . . .
1.7 Les diffrentes configurations avec les commandes . . . . . . . .
1.7.1 Le fichier .xcasrc . . . . . . . . . . . . . . . . . . . .
1.7.2 La configuration gnrale et la fonction : widget_size
1.7.3 La configuration du cas avec la fonction : cas_setup . .
1.7.4 Nombres de chiffres significatifs : Digits DIGITS . .

59
59
59
59
59
59
61
62
62
64
65
67
69
71
71
71
72
72

0.2

Style de lindex et notations . . . . . . . . . . . . . . . .


0.1.1 Notes concernant lindex de ce manuel . . . . . .
0.1.2 Remarques concernant les notations . . . . . . . .
La librairie giac et ses interfaces sous Unix . . . . . . .
0.2.1 Interface Xcas . . . . . . . . . . . . . . . . . . .
0.2.2 Interface en ligne de commande . . . . . . . . . .
0.2.3 Interface texmacs . . . . . . . . . . . . . . . . .
0.2.4 Interface emacs . . . . . . . . . . . . . . . . . .
0.2.5 Utilisation dans un programme ou un module C++
0.2.6 Savoir avec quelle version on travaille : version

73
74
74
74
75
75
76

TABLE DES MATIRES


1.7.5

1.8

1.9

1.10

1.11

1.12

1.13

Choix du mode de langage Xcas ou Maple ou MuPad ou


TI89 : maple_mode . . . . . . . . . . . . . . . . . . . .
1.7.6 Choix de lunit dangle : angle_radian . . . . . . . .
1.7.7 Choix du mode approximatif ou exact : approx_mode .
1.7.8 Choix du mode rel ou complexe : complex_mode . . .
1.7.9 Variables relles ou complexes : complex_variables
Laide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8.1 Aide gnrale . . . . . . . . . . . . . . . . . . . . . . . .
1.8.2 Aide sur une fonction : findhelp ou ? . . . . . . . . .
Sauver et imprimer . . . . . . . . . . . . . . . . . . . . . . . . .
1.9.1 Pour sauver une session . . . . . . . . . . . . . . . . . .
1.9.2 Pour sauver un tableur . . . . . . . . . . . . . . . . . . .
1.9.3 Pour sauver un programme . . . . . . . . . . . . . . . . .
1.9.4 Pour imprimer . . . . . . . . . . . . . . . . . . . . . . .
Traduction Latex . . . . . . . . . . . . . . . . . . . . . . . . . .
1.10.1 Traduction Latex dune entre : latex TeX . . . . . . .
1.10.2 Imprimer la session ou/et la convertir en un fichier Latex .
1.10.3 Traduction Latex dun cran de gomtrie . . . . . . . . .
1.10.4 Traduction Latex de lcran DispG . . . . . . . . . . . .
1.10.5 Traduction Latex de lcran 3-d : graph3d2tex . . . .
Traduction Mathml . . . . . . . . . . . . . . . . . . . . . . . . .
1.11.1 Traduction Mathml dune expression : mathml . . . . . .
1.11.2 Traduction Mathml du tableur . . . . . . . . . . . . . . .
Traduction de fichiers Maple en fichier Xcas ou Mupad . . . . .
1.12.1 Fichier Maple traduit en fichier Xcas : maple2xcas . .
1.12.2 Fichier Maple traduit en fichier Mupad : maple2mupad .
Traduction dun fichier Mupad en un fichier Xcas ou Maple . . .
1.13.1 Fichier Mupad traduit en fichier Xcas : mupad2xcas . .
1.13.2 Fichier Mupad traduit en fichier Maple : mupad2maple .

Saisie
2.1 Pour crire un commentaire : Alt+c . . . . . . . . . . .
2.2 Lditeur dexpressions . . . . . . . . . . . . . . . . . .
2.2.1 Comment diter une quation . . . . . . . . . .
2.2.2 Comment slectionner . . . . . . . . . . . . . .
2.2.3 Comment diter une chane de caractres . . . .
2.2.4 Utilit de lditeur dexpressions . . . . . . . . .
2.3 Les diteurs de matrices et les tableurs . . . . . . . . . .
2.3.1 Les sauvegardes dun tableur . . . . . . . . . . .
2.3.2 Les menus dun tableur . . . . . . . . . . . . . .
2.3.3 La configuration dun tableur . . . . . . . . . . .
2.3.4 Les boutons dun tableur . . . . . . . . . . . . .
2.4 Les commandes deffacement . . . . . . . . . . . . . .
2.4.1 Effacer dans le tableur . . . . . . . . . . . . . .
2.4.2 Effacer lcran DispG de gomtrie : ClrGraph
2.4.3 Effacer les crans de gomtrie : erase . . . .
2.4.4 Effacer une ligne de commande : touche esc . .

78
79
79
79
79
80
81
81
81
82
82
82
82
83
83
83
83
84
84
85
85
85
85
85
86
86
86
86

87
. . . . . 87
. . . . . 88
. . . . . 88
. . . . . 89
. . . . . 89
. . . . . 90
. . . . . 90
. . . . . 90
. . . . . 90
. . . . . 91
. . . . . 92
. . . . . 92
. . . . . 92
ClrDraw 92
. . . . . 92
. . . . . 93

TABLE DES MATIRES

2.4.5

2.5

2.6

Effacer les noms des variables dune seule lettre minuscule : rm_a_z . . . . . . . . . . . . . . . . . . . . . . . 93
2.4.6 Effacer toutes les variables : rm_all_vars . . . . . . . 93
Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
2.5.1 Le nom des variables et la variable CST . . . . . . . . . . 94
2.5.2 Laffectation : := => sto Store . . . . . . . . . . . 94
2.5.3 Laffectation par rfrence dans une variable dsignant un
lment dune liste ou dune matrice : =< . . . . . . . . 97
2.5.4 Lincrmentation dune variable : += -= *= /= . . . . 98
2.5.5 Archiver et dsarchiver des variables et leur contenu : archive
unarchive . . . . . . . . . . . . . . . . . . . . . . . . 99
2.5.6 Copier sans lvaluer le contenu dune variable : CopyVar 99
2.5.7 Faire une hypothse sur une variable : assume supposons100
2.5.8 Faire une hypothse supplementaire sur une variable : additionally104
2.5.9 Connaitre les hypothses faites sur une variable : about . 104
2.5.10 Effacer le contenu dune variable : purge DelVar . . . 105
2.5.11 Effacer le contenu de toutes les variables : restart . . . 106
2.5.12 Accs aux rponses : ans(n) . . . . . . . . . . . . . . . 106
2.5.13 Pour ne pas afficher la rponse : nodisp :; . . . . . . . 106
2.5.14 Accs aux questions : quest(n) . . . . . . . . . . . . . 107
Les rpertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.6.1 Comment crer un rprtoire sur vtre disque dur . . . . . 107
2.6.2 Comment sauver un fichier dans un rprtoire de vtre
disque dur . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.6.3 Comment crer un rprtoire de travail : NewFold . . . . 108
2.6.4 Comment aller dans un rprtoire de travail : SetFold . 108
2.6.5 Nom du rprtoire en cours : GetFold . . . . . . . . . . 109
2.6.6 Effacer un rprtoire vide : DelFold . . . . . . . . . . . 109
2.6.7 Comment connaitre les variables et les rprtoires crs :
VARS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.6.8 Lire un fichier depuis Xcas : read . . . . . . . . . . . . 109

Le graphique
3.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Lcran graphique et ses boutons . . . . . . . . . . . . . . . .
3.3 La configuration de lcran graphique . . . . . . . . . . . . .
3.4 Configuration graphique avec cfg . . . . . . . . . . . . . . .
3.5 Pour transformer un graphique en un fichier Latex . . . . . . .
3.6 Graphe dune matrice de transition probabiliste :
graphe_probabiliste . . . . . . . . . . . . . . . . . .
3.7 Graphe dune fonction : plotfunc funcplot DrawFunc
3.7.1 Graphe en 2-d . . . . . . . . . . . . . . . . . . . . . .
3.7.2 Graphe en 3-d . . . . . . . . . . . . . . . . . . . . . .
3.7.3 Graphe "3-d" avec les couleurs de larc en ciel . . . .
3.7.4 Graphe en "4D" . . . . . . . . . . . . . . . . . . . . .
3.8 Graphe 2-d pour compatibilit Maple : plot graphe . . . .
3.9 Surface 3-d pour compatibilit Maple plot3d graphe3d .
3.10 Graphe dune droite et les tangentes un graphe . . . . . . . .

.
.
.
.
.

.
.
.
.
.

111
111
112
113
113
114

. . 114
Graph117
. . 117
. . 118
. . 119
. . 119
. . 120
. . 121
. . 122

TABLE DES MATIRES

3.11

3.12
3.13
3.14
3.15

3.16

3.17
3.18
3.19
3.20
3.21
3.22
3.23
3.24

3.10.1 Trac dune droite : line droite . . . . . . . . . . . . 122


3.10.2 Trac dune droite horizontale en 2-d : LineHorz . . . . 123
3.10.3 Trac dune droite verticale en 2-d : LineVert . . . . . 123
3.10.4 Tangente un graphe en 2-d : LineTan droite_tangente123
3.10.5 Tangente en un point dun graphe en 2-d : tangent tangente124
3.10.6 Trac dune droite donne par un point et sa pente : DrawSlp125
3.10.7 Intersection dun graphe en 2-d avec les axes . . . . . . . 125
Reprsentation graphique dinquations 2 variables : plotinequation
inequationplot . . . . . . . . . . . . . . . . . . . . . . . . 125
3.11.1 Aire sous une courbe : area aire . . . . . . . . . . . . 126
Reprsentation graphique de laire sous une courbe : tracer_aire
graphe_aire aire_graphe plotarea areaplot . . . 127
Lignes de niveaux : plotcontour contourplot
DrwCtour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Graphe dune fonction par niveaux de couleurs : plotdensity
densityplot . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Courbe implicite : plotimplicit implicitplot . . . . . 130
3.15.1 Courbe implicite en 2-d . . . . . . . . . . . . . . . . . . 130
3.15.2 Surface implicite en 3-d . . . . . . . . . . . . . . . . . . 131
Courbe et surface en paramtrique : plotparam paramplot
DrawParm courbe_parametrique . . . . . . . . . . . . . 132
3.16.1 Courbe 2-d en paramtrique . . . . . . . . . . . . . . . . 132
3.16.2 Surface 3-d en paramtrique : plotparam paramplot
DrawParm courbe_parametrique . . . . . . . . . 133
Courbes de Bzier : bezier . . . . . . . . . . . . . . . . . . . . 133
Courbe en polaire : plotpolar polarplot DrawPol courbe_polaire134
Trac dune suite rcurrente : plotseq seqplot graphe_suite135
Le champ des tangentes : plotfield fieldplot . . . . . . 135
Trac de solutions dquation diffrentielle : plotode odeplot 136
Trac interactif des solutions dquation diffrentielle : interactive_plotode
interactive_odeplot . . . . . . . . . . . . . . . . . . . . 138
Trac interactif des solutions dquation diffrentielle dans un niveau de gomtrie : plotfield fieldplot et plotode odeplot139
Faire une animation en 2-d, 3-d ou "4D" . . . . . . . . . . . . . . 140
3.24.1 Animation dun graphe 2-d :animate . . . . . . . . . . 140
3.24.2 Animation dun graphe 3-d :animate3d . . . . . . . . . 140
3.24.3 Animation dune squence dobjets graphiques :animation141

Calcul numrique
4.1 Codage des rels et des dcimaux . . . . . . . . . . . . . . . . .
4.1.1 Un exemple : codage de 3.1 et de 3 . . . . . . . . . . . .
4.1.2 Diffrence de codage entre (3.1-3) et 0.1 . . . . . . . . . .
4.2 valuation des rels : evalf approx et Digits . . . . . . . .
4.3 Quelques fonctions . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Solution approche dune quation : newton . . . . . . .
4.3.2 Calcul approch du nombre driv : nDeriv . . . . . . .
4.3.3 Calcul approch dintgrales avec la mthode de Romberg :
romberg nInt . . . . . . . . . . . . . . . . . . . . . .

145
145
145
146
146
150
150
151
151

TABLE DES MATIRES

4.3.4

4.4
4.5

4.6

4.7
4.8
4.9

Calcul approch dintgrales par une quadrature de Gauss


adaptative 15 points : gaussquad . . . . . . . . . . .
4.3.5 Solution approche de y=f(t,y) : odesolve . . . . . . .
4.3.6 Solution approche du systme v=f(t,v) : odesolve . .
Rsolution numrique dquations avec nSolve . . . . . . . . .
Rsolution dquations avec fsolve . . . . . . . . . . . . . . .
4.5.1 fsolve avec loption bisection_solver . . . . . .
4.5.2 fsolve avec loption brent_solver . . . . . . . . .
4.5.3 fsolve avec loption falsepos_solver . . . . . . .
4.5.4 fsolve avec loption newton_solver . . . . . . . .
4.5.5 fsolve avec loption secant_solver . . . . . . . .
4.5.6 fsolve avec loption steffenson_solver . . . . .
Rsolution des systmes dquations avec fsolve . . . . . . . .
4.6.1 fsolve avec loption dnewton_solver . . . . . . . .
4.6.2 fsolve avec loption hybrid_solver . . . . . . . .
4.6.3 fsolve avec loption hybrids_solver . . . . . . . .
4.6.4 fsolve avec loption newtonj_solver . . . . . . . .
4.6.5 fsolve avec loption hybridj_solver . . . . . . . .
4.6.6 fsolve avec loption hybridsj_solver . . . . . . .
Rsolution sur C dquations ou de systmes cfsolve . . . . . .
Racines numriques dun polynme : proot . . . . . . . . . . .
Factorisation numrique dune matrice : cholesky qr lu svd

152
152
154
155
155
156
157
157
157
158
158
159
159
159
159
160
160
160
160
161
162

Les units et les constantes physiques


163
5.1 Les units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5.1.1 La notation des units . . . . . . . . . . . . . . . . . . . 163
5.1.2 Les calculs avec des units . . . . . . . . . . . . . . . . . 163
5.1.3 La conversion dun objet-unit dans une autre unit : convert
convertir => . . . . . . . . . . . . . . . . . . . . . . 164
5.1.4 Les changements dunits en units MKSA : mksa . . . . 166
5.1.5 Les conversions entre degr Clsius et degr Fahrenheit :
Celsius2Fahrenheit et Fahrenheit2Celsius 166
5.1.6 Mise en facteur dune unit : ufactor . . . . . . . . . . 167
5.1.7 Simplifier une unit : usimplify . . . . . . . . . . . . 167
5.1.8 Les prfixes disponibles pour les noms dunits . . . . . . 168
5.2 Les constantes physiques . . . . . . . . . . . . . . . . . . . . . . 168
5.2.1 La notation des constantes physiques . . . . . . . . . . . 168
5.2.2 Bibliothque des constantes physiques . . . . . . . . . . . 168

Les fonctions de calcul formel


6.1 Les constantes symboliques : e pi infinity inf i
6.2 Les boolens . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Les valeurs dun boolen : true false . . . .
6.2.2 Les tests : ==, !=, >, >=, <, <= . . . . .
6.2.3 Les oprateurs boolens : or xor and not .
6.2.4 Transformer une expression en liste : exp2list
6.3 valuation des boolens : evalb . . . . . . . . . . . .
6.4 Les oprateurs bit bit . . . . . . . . . . . . . . . . . .

171
euler_gamma171
. . . . . 171
. . . . . 171
. . . . . 171
. . . . . 172
. . . . . 173
. . . . . 173
. . . . . 174

10

TABLE DES MATIRES

6.5

6.6

6.7

6.4.1 Les oprateurs bitor, bitxor, bitand . . . . . . 174


6.4.2 Distance de Hamming bit bit : hamdist . . . . . . . . 175
Les chanes de caractres . . . . . . . . . . . . . . . . . . . . . . 175
6.5.1 criture dune chane ou dun caractre : " . . . . . . . . 175
6.5.2 criture du caractre "retour la ligne" : "\n" . . . . . . 176
6.5.3 Longueur dune chane : size length . . . . . . . . . 176
6.5.4 Dbut, milieu et fin dune chane : head mid tail . . 177
6.5.5 Partie droite et gauche dune chane : droit ou right,
gauche ou left . . . . . . . . . . . . . . . . . . . . 177
6.5.6 Concatnation dune suite de mots : cumSum . . . . . . . 177
6.5.7 Le code ASCII dun caractre : ord . . . . . . . . . . . . 178
6.5.8 Le code ASCII dune chane : asc . . . . . . . . . . . . 178
6.5.9 La chane associe une suite dASCII : char . . . . . . 179
6.5.10 Reprer un caractre dans une chane : inString . . . . 179
6.5.11 Concatner des objets en une chane : cat . . . . . . . . 180
6.5.12 Concatner des objets en une chane : + . . . . . . . . . . 180
6.5.13 Pour concatner des nombres et des chanes : cat + . . . 181
6.5.14 Pour transformer un nombre rel ou entier en une chane :
string . . . . . . . . . . . . . . . . . . . . . . . . . . 181
6.5.15 Pour transformer un nombre rel en une chane : format 182
6.5.16 Pour transformer une chane en un nombre ou en une commande : expr . . . . . . . . . . . . . . . . . . . . . . . 182
criture en base b dun entier . . . . . . . . . . . . . . . . . . . . 183
6.6.1 Transformer un entier en la liste des coefficients de son
criture en base b : convert convertir . . . . . . . 183
6.6.2 Transformer la liste des coefficients d une criture en base
b en un entier : convert convertir . . . . . . . . . 184
Les entiers (et les entiers de Gauss) . . . . . . . . . . . . . . . . . 185
6.7.1 La factorielle : factorial . . . . . . . . . . . . . . . . 185
6.7.2 Le PGCD : gcd igcd . . . . . . . . . . . . . . . . . . 185
6.7.3 Le PGCD : Gcd . . . . . . . . . . . . . . . . . . . . . . 188
6.7.4 Le PGCD dune liste dentiers : lgcd . . . . . . . . . . . 188
6.7.5 Le PPCM : lcm . . . . . . . . . . . . . . . . . . . . . . 189
6.7.6 Factoriser un entier : ifactor factoriser_entier 189
6.7.7 Liste des facteurs dun entier : facteurs_premiers
ifactors . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.7.8 Matrice des facteurs dun entier : maple_ifactors . . 191
6.7.9 Liste des diviseurs dun entier : idivis divisors . . 191
6.7.10 Quotient entier infix de la division euclidienne : div . . 192
6.7.11 Quotient entier de la division euclidienne : iquo intDiv 192
6.7.12 Reste entier de la division euclidienne : irem remain
smod mods mod % . . . . . . . . . . . . . . . . . . . 193
6.7.13 Le quotient et le reste de la division euclidienne : iquorem 194
6.7.14 Test de parit : even est_pair . . . . . . . . . . . . . 194
6.7.15 Test de non parit : odd est_impair . . . . . . . . . 195
6.7.16 Test de pseudo-primalit : is_pseudoprime . . . . . . 195
6.7.17 Test de primalit : is_prime isprime isPrime . . 196
6.7.18 Nombre pseudo-premier : nprimes . . . . . . . . . . . 197

TABLE DES MATIRES


6.7.19
6.7.20
6.7.21
6.7.22
6.7.23
6.7.24
6.7.25
6.7.26

11

N-ime nombre pseudo-premier : ithprime . . . . . . . 198


Nombre pseudo-premier aprs n : nextprime . . . . . . 198
Nombre pseudo-premier avant n : prevprime . . . . . . 198
Le n-ime nombre premier : ithprime . . . . . . . . . 198
Identit de Bzout : iegcd igcdex bezout_entiers199
Rsolution de au+bv=c dans Z : iabcuv . . . . . . . . . 199
Restes chinois : ichinrem, ichrem . . . . . . . . . . 199
Reste chinois pour des polynmes connus modulo plusieurs
entiers : ichinrem, ichrem . . . . . . . . . . . . . . 200
6.7.27 Reste chinois pour des listes dentiers : chrem . . . . . . 201
6.7.28 Rsolution de a2 + b2 = p dans Z : pa2b2 . . . . . . . . 202
6.7.29 Indicatrice dEuler : euler Phi . . . . . . . . . . . . . 202
6.7.30 Symbole de Legendre : legendre_symbol . . . . . . 203
6.7.31 Symbole de Jacobi : jacobi_symbol . . . . . . . . . . 204
6.8 Analyse combinatoire . . . . . . . . . . . . . . . . . . . . . . . . 204
6.8.1 La factorielle : factorial ! . . . . . . . . . . . . . . 204
6.8.2 Les coefficients binomiaux : comb nCr . . . . . . . . . 205
6.8.3 Les arrangements : perm nPr . . . . . . . . . . . . . . 205
6.8.4 Les nombres entiers alatoires : rand alea hasard . 206
6.9 Les rationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
6.9.1 Transformer un nombre dcimal en rationnel : exact
float2rational . . . . . . . . . . . . . . . . . . . . 206
6.9.2 Partie entire et fractionnaire : propfrac propFrac . 207
6.9.3 Numrateur dune fraction aprs simplification : numer,
getNum . . . . . . . . . . . . . . . . . . . . . . . . . . 207
6.9.4 Dnominateur dune fraction aprs simplification : denom
getDenom . . . . . . . . . . . . . . . . . . . . . . . . . 208
6.9.5 Numrateur et dnominateur dune fraction : f2nd fxnd 208
6.9.6 Simplification dun couple : simp2 . . . . . . . . . . . . 209
6.9.7 Dveloppement en fraction continue dun rel : dfc . . . 209
6.9.8 Transformer une fraction continue en un rel : dfc2f . . 211
6.9.9 Le nime nombre de Bernoulli : bernoulli . . . . . . . 212
6.9.10 Accs aux fonctions de PARI/GP : commande pari . . . 213
6.10 Les rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
6.10.1 valuer un rel et nombre de digits : evalf et Digits,
DIGITS) . . . . . . . . . . . . . . . . . . . . . . . . . . 213
6.10.2 Les fonctions infixes de base sur les rels : +,-,*,/, 215
6.10.3 Les fonctions prefixes de base sur les rels : rdiv . . . . 216
6.10.4 La fonction racine n-ime : root . . . . . . . . . . . . . 216
6.10.5 La fonction exponentielle integrale Ei : Ei . . . . . . . . 217
6.10.6 La fonction cosinus integral Ci : Ci . . . . . . . . . . . . 218
6.10.7 La fonction sinus integral Si : Si . . . . . . . . . . . . . 219
6.10.8 La fonction de Heaviside : Heaviside . . . . . . . . . 220
6.10.9 La distribution de Dirac : Dirac . . . . . . . . . . . . . 221
6.10.10 La fonction erf : erf . . . . . . . . . . . . . . . . . . . 221
6.10.11 La fonction erf c : erfc . . . . . . . . . . . . . . . . . . 222
6.10.12 La fonction : Gamma . . . . . . . . . . . . . . . . . . . 223
6.10.13 La fonction incomplte : igamma . . . . . . . . . . . . 224

12

TABLE DES MATIRES


6.10.14 La fonction : Beta . . . . . . . . . . . . . . . . . . . . 225
6.10.15 Les derives de la fonction DiGamma : Psi . . . . . . . . 226
6.10.16 La fonction : Zeta . . . . . . . . . . . . . . . . . . . . 227
6.10.17 Les fonctions de Airy : Airy_Ai et Airy_Bi . . . . . . 227
6.11 Les permutations . . . . . . . . . . . . . . . . . . . . . . . . . . 228
6.11.1 Permutation alatoire : randperm . . . . . . . . . . . . 228
6.11.2 Permutation prcdente : prevperm . . . . . . . . . . . 228
6.11.3 Permutation suivante : nextperm . . . . . . . . . . . . 229
6.11.4 Dcomposition en cycles : permu2cycles . . . . . . . 229
6.11.5 Produit de cycles : cycles2permu . . . . . . . . . . . 229
6.11.6 Transformer un cycle en permutation : cycle2perm . . 230
6.11.7 Transformer une permutation en une matrice : permu2mat 230
6.11.8 Reconnaitre une permutation : is_permu . . . . . . . . 231
6.11.9 Reconnaitre un cycle : is_cycle . . . . . . . . . . . . 231
6.11.10 Composition de deux permutations : p1op2 . . . . . . . 231
6.11.11 Produit dun cycle et dune permutation : c1op2 . . . . . 232
6.11.12 Produit dune permutation et dun cycle : p1oc2 . . . . . 232
6.11.13 Produit de deux cycles : c1oc2 . . . . . . . . . . . . . . 232
6.11.14 Signature dune permutation : signature . . . . . . . . 233
6.11.15 Inverse dune permutation : perminv . . . . . . . . . . . 233
6.11.16 Inverse dun cycle : cycleinv . . . . . . . . . . . . . . 233
6.11.17 Ordre dune permutation : permuorder . . . . . . . . . 233
6.11.18 Groupe engendr par deux permutations : groupermu . 234
6.12 Les complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
6.12.1 Les fonctions de base sur les complexes : +,-,*,/, . . 234
6.12.2 La partie relle dun nombre complexe : re real . . . . 234
6.12.3 La partie imaginaire dun nombre complexe : im imag . 235
6.12.4 criture des complexes sous la forme re(z)+i*im(z) :
evalc . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
6.12.5 Le module dun nombre complexe : abs . . . . . . . . . 235
6.12.6 Largument dun nombre complexe : arg . . . . . . . . . 235
6.12.7 Le nombre complexe normalis : normalize unitV . 236
6.12.8 Le nombre complexe conjugu : conj . . . . . . . . . . 236
6.12.9 Multiplier par le complexe conjugu : mult_c_conjugate
multiplier_conjugue_complexe . . . . . . . . . 236
6.12.10 Barycentre de complexes : barycenter barycentre 237
6.13 Les expressions algbriques . . . . . . . . . . . . . . . . . . . . 237
6.13.1 Quest-ce qune expression . . . . . . . . . . . . . . . . . 237
6.13.2 Pour valuer une expression : eval . . . . . . . . . . . . 238
6.13.3 Pour changer le niveau dvaluation : eval_level . . . 241
6.13.4 Pour valuer une expression en mode Maple : evala . . 243
6.13.5 Pour ne pas valuer une expression : quote hold ou 243
6.13.6 Pour forcer valuer une expression : unquote . . . . . 243
6.13.7 Distributivit : expand fdistrib developper . . 243
6.13.8 Forme canonique : canonical_form . . . . . . . . . . 244
6.13.9 Multiplier par la quantit conjugue : mult_conjugate
multiplier_conjugue . . . . . . . . . . . . . . . . 244
6.13.10 Sparation des variables : split . . . . . . . . . . . . . 245

TABLE DES MATIRES

6.14

6.15

6.16

6.17

6.18

13

6.13.11 Factorisation : factor factoriser . . . . . . . . . . 246


6.13.12 Factorisation dans C : cFactor factoriser_sur_C
cfactor . . . . . . . . . . . . . . . . . . . . . . . . . . 248
6.13.13 Zros dune expression : zeros . . . . . . . . . . . . . . 249
6.13.14 Zros complexe dune expression : cZeros . . . . . . . 249
6.13.15 Regrouper et simplifier : regrouper regroup . . . . 250
6.13.16 Dvelopper et simplifier : normal . . . . . . . . . . . . 250
6.13.17 Simplifier : simplify simplifier . . . . . . . . . . 251
6.13.18 Pour rcrire les rsultats selon son choix : autosimplify252
6.13.19 Simplifier laide de fractions rationnelles : ratnormal 253
6.13.20 Substituer une valeur une variable : | . . . . . . . . . . 253
6.13.21 Substituer une valeur une variable : subst substituer253
6.13.22 Substituer une valeur une variable (compatibilit Maple
et Mupad) : subs . . . . . . . . . . . . . . . . . . . . . 254
6.13.23 Substituer dans une expression, une expression algbrique
par une variable : algsubs . . . . . . . . . . . . . . . . 256
6.13.24 liminer une (ou des) variable(s) dans une liste dquations : eliminate . . . . . . . . . . . . . . . . . . . . 256
6.13.25 valuer une primitive : preval . . . . . . . . . . . . . . 258
6.13.26 Sous-expression dune expression : part . . . . . . . . . 258
Valeurs de un . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
6.14.1 Tableau de valeurs des termes dune suite : tablefunc
table_fonction . . . . . . . . . . . . . . . . . . . . 258
6.14.2 Valeurs dune suite rcurrente ou dun systme de suites
rcurrentes : seqsolve . . . . . . . . . . . . . . . . . . 259
6.14.3 Valeurs dune suite rcurrente ou dun systme de suites
rcurrentes : rsolve . . . . . . . . . . . . . . . . . . . 261
6.14.4 Tableau de valeurs et graphe dune suite rcurrente : tableseq
table_suite et plotseq graphe_suite . . . . . 262
Les fonctions infixes ou oprateur . . . . . . . . . . . . . . . . . 263
6.15.1 Les oprateurs usuels :+, -, *, /, . . . . . . . . . 263
6.15.2 Les autres oprateurs de Xcas . . . . . . . . . . . . . . . 263
6.15.3 Dfinition dun oprateur : user_operator . . . . . . 264
Les fonctions et les expressions de variables symboliques . . . . . 265
6.16.1 Diffrence entre fonction et expression . . . . . . . . . . 265
6.16.2 Transformer une expression en une fonction : unapply . 265
6.16.3 Sommet et feuille dune expression : sommet feuille
op . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
6.17.1 Les fonctions ayant plusieurs usages . . . . . . . . . . . . 268
6.17.2 Les fonctions usuelles . . . . . . . . . . . . . . . . . . . 269
6.17.3 Dfinition dune fonction . . . . . . . . . . . . . . . . . . 271
6.17.4 Composition de fonctions : @ . . . . . . . . . . . . . . . . 273
6.17.5 Puissance n-ime de composition dune fonction : @@ . . 274
6.17.6 Definir une fonction avec lhistorique : as_function_of 274
Drivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
6.18.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . 276
6.18.2 Calcul du taux daccroissement : taux_accroissement 276

14

TABLE DES MATIRES

6.19

6.20

6.21

6.22

6.23

6.18.3 Fonction drive dune fonction : function_diff


fonction_derivee . . . . . . . . . . . . . . . . . . 277
6.18.4 Derives et derives partielles dune expression et derives
dune fonction : diff derive deriver . . . . . . 278
Intgration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
6.19.1 Primitive et intgrale dfinie : integrate Int integrer
int integration . . . . . . . . . . . . . . . . . . . 282
6.19.2 Primitive et intgrale dfinie : risch . . . . . . . . . . . 284
6.19.3 Somme indice finie et infinie et primitive discrte : sum . 285
6.19.4 Somme de Riemann : sum_riemann . . . . . . . . . . . 289
6.19.5 Intgration par parties : integrer_par_parties_dv
ibpdv et integrer_par_parties_u ibpu . . . . 292
6.19.6 Changement de variables : subst substituer . . . . 295
6.19.7 Longueur dun arc de courbe : arcLen . . . . . . . . . . 295
Maximum, minimum, tableau de valeurs et graph . . . . . . . . . 296
6.20.1 Maximum et minimum dune expression : fMax fMin . 296
6.20.2 Tableau de valeurs et graphe : tablefunc table_fonction
et plotfunc . . . . . . . . . . . . . . . . . . . . . . . 297
Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
6.21.1 Limites : limit limite . . . . . . . . . . . . . . . . 298
6.21.2 Limite et intgrale . . . . . . . . . . . . . . . . . . . . . 300
Rcrire des expressions transcendantes et trigonomtriques . . . 301
6.22.1 Dvelopper une expression transcendante et trigonomtrique :
texpand tExpand developper_transcendant 301
6.22.2 Rassembler les termes de mme nature : combine . . . . 303
Les expressions trigonomtriques . . . . . . . . . . . . . . . . . . 303
6.23.1 Les diffrentes fonctions trigonomtriques . . . . . . . . 303
6.23.2 Dvelopper une expression trigonomtriques : trigexpand304
6.23.3 Linariser une expression trigonomtrique : tlin
lineariser_trigo . . . . . . . . . . . . . . . . . . 304
6.23.4 Augmenter la phase de 2 dans les expressions trigonomtriques : shift_phase . . . . . . . . . . . . . . . . . . 304
6.23.5 Rassembler les sinus et les cosinus de mme angle : tcollect
tCollect rassembler_trigo . . . . . . . . . . . 305
6.23.6 Simplifier : simplify simplifier . . . . . . . . . . 306
6.23.7 Transformer les arccos en arcsin : acos2asin . . . . . . 306
6.23.8 Transformer les arccos en arctan : acos2atan . . . . . . 306
6.23.9 Transformer les arcsin en arccos : asin2acos . . . . . . 307
6.23.10 Transformer les arcsin en arctan : asin2atan . . . . . . 307
6.23.11 Transformer les arctan en arcsin : atan2asin . . . . . . 307
6.23.12 Transformer les arctan en arccos : atan2acos . . . . . . 307
6.23.13 Transformer les exponentielles complexes en sin et en cos :
sincos exp2trig . . . . . . . . . . . . . . . . . . . 308
6.23.14 Transformer tan(x) en sin(x)/cos(x) : tan2sincos . . . 308
6.23.15 Transformer sin(x) en cos(x)*tan(x) : sin2costan . . . 309
6.23.16 Transformer cos(x) en sin(x)/tan(x) : cos2sintan . . . 309
6.23.17 Transformer tan(x) avec sin(2x) et cos(2x) : tan2sincos2309
6.23.18 Transformer tan(x) avec cos(2x) et sin(2x) : tan2cossin2309

TABLE DES MATIRES

15

6.23.19 Transformer une expression trigonomtrique en fonction


de tan(x/2) : halftan . . . . . . . . . . . . . . . . . . . 310
6.23.20 Transformer les expressions trigonomtriques et hyperboliques en tan(x/2) et en exp(x) : halftan_hyp2exp . . 310
6.23.21 Transformer avec des fonctions trigonomtriques inverses
en logarithmes : atrig2ln . . . . . . . . . . . . . . . . 311
6.23.22 Transformer une expression trigonomtrique en des exponentielles complexes : trig2exp . . . . . . . . . . . . . 311
6.23.23 Simplifier en privilgiant les sinus : trigsin . . . . . . 311
6.23.24 Simplifier en privilgiant les cosinus : trigcos . . . . . 312
6.23.25 Simplifier en privilgiant les tangentes : trigtan . . . . 312
6.23.26 Recriture dune expression avec diffrentes options : convert
convertir => . . . . . . . . . . . . . . . . . . . . . . 312
6.24 Transforme de Fourier . . . . . . . . . . . . . . . . . . . . . . . 313
6.24.1 Les coefficients de Fourier : fourier_an et fourier_bn
ou fourier_cn . . . . . . . . . . . . . . . . . . . . . 313
6.24.2 Transforme de Fourier discrte . . . . . . . . . . . . . . 317
6.24.3 La transforme de Fourier rapide : fft . . . . . . . . . . 321
6.24.4 Linverse de la transforme de Fourier rapide : ifft . . . 322
6.24.5 Un exercice utilisant fft . . . . . . . . . . . . . . . . . 322
6.25 Les Exponentielles et les Logarithmes . . . . . . . . . . . . . . . 323
6.25.1 Transformer les fonctions hyperboliques en exponentielles :
hyp2exp . . . . . . . . . . . . . . . . . . . . . . . . . . 323
6.25.2 Dvelopper les exponentielles : expexpand . . . . . . . 324
6.25.3 Dvelopper les logarithmes : lnexpand . . . . . . . . . 324
6.25.4 Linariser les exponentielles : lin lineariser . . . . 324
6.25.5 Regrouper les log : lncollect . . . . . . . . . . . . . 325
6.25.6 Transformer une puissance en produit de puissances :
powexpand . . . . . . . . . . . . . . . . . . . . . . . . 325
6.25.7 Transformer une puissance en une exponentielle : pow2exp325
6.25.8 Transformer exp(n*ln(x)) en puissance : exp2pow . . . . 325
6.25.9 crire avec des exponentielles complexes : tsimplify . 326
6.26 Les polynmes . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
6.26.1 Les polynmes une variable poly1[...] . . . . . . . 326
6.26.2 Les polynmes plusieurs variables . . . . . . . . . . . . 326
6.26.3 Transformer le format interne dense rcursif en une criture polynmiale : poly2symb r2e . . . . . . . . . . . 327
6.26.4 Transformer le format interne creux distribu du polynme
en une criture polynmiale : poly2symb r2e . . . . . 328
6.26.5 Transformer un polynme en une liste (format interne rcursif dense) : symb2poly e2r . . . . . . . . . . . . . 329
6.26.6 Transformer un polynme au format interne : e2r symb2poly331
6.26.7 Transformer un polynme au format interne en une liste et
rciproquement : convert . . . . . . . . . . . . . . . . 332
6.26.8 Coefficients dun polynme : coeff coeffs . . . . . . 332
6.26.9 Degr dun polynme : degree . . . . . . . . . . . . . . 333
6.26.10 Valuation dun polynme : valuation ldegree . . . 333

16

TABLE DES MATIRES


6.26.11 Coefficient du terme de plus haut degr dun polynme :
lcoeff . . . . . . . . . . . . . . . . . . . . . . . . . . 334
6.26.12 Coefficient du terme de plus bas degr dun polynme :
tcoeff . . . . . . . . . . . . . . . . . . . . . . . . . . 334
6.26.13 valuation dun polynme : peval polyEval . . . . . 335
6.26.14 Mise en facteur de xn dans un polynme : factor_xn . 335
6.26.15 PGCD des coefficients dun polynme : content . . . . 335
6.26.16 Partie primitive dun polynme : primpart . . . . . . . 336
6.26.17 Factorisation sur les entiers : collect . . . . . . . . . . 337
6.26.18 Factorisation : factor factoriser . . . . . . . . . . 338
6.26.19 Factorisation sans facteur carr : sqrfree . . . . . . . . 339
6.26.20 Liste des facteurs dun polynme : factors . . . . . . . 339
6.26.21 valuer un polynme : horner . . . . . . . . . . . . . . 340
6.26.22 criture selon les puissances de (x-a) : ptayl . . . . . . 340
6.26.23 Calcul avec les racines exactes dun polynme : rootof . 341
6.26.24 Racines exactes dun polynme : roots . . . . . . . . . 342
6.26.25 Coefficients dun polynme dfini par ses racines : pcoeff
pcoef . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
6.26.26 Troncature dordre n : truncate . . . . . . . . . . . . . 342
6.26.27 Convertir un dveloppement limit en polynme : convert
convertir . . . . . . . . . . . . . . . . . . . . . . . . 343
6.26.28 Convertir un polynme de n variables en une liste : convert
convertir . . . . . . . . . . . . . . . . . . . . . . . . 344
6.26.29 Convertir une liste en polynme de n variables : convert
convertir . . . . . . . . . . . . . . . . . . . . . . . . 344
6.26.30 Polynmes alatoires : randpoly randPoly . . . . . 344
6.26.31 Changer lordre des variables : reorder . . . . . . . . . 345
6.26.32 Liste alatoire : ranm . . . . . . . . . . . . . . . . . . . 345
6.26.33 Interpolation de Lagrange : lagrange interp . . . . 346
6.26.34 Les splines naturelles : spline . . . . . . . . . . . . . . 347
6.27 Arithmtique des polynmes . . . . . . . . . . . . . . . . . . . . 349
6.27.1 Liste des diviseurs dun polynme : divis . . . . . . . . 349
6.27.2 Quotient euclidien de 2 polynmes : quo . . . . . . . . . 350
6.27.3 Quotient euclidien : Quo . . . . . . . . . . . . . . . . . . 351
6.27.4 Reste euclidien de 2 polynmes : rem . . . . . . . . . . . 352
6.27.5 Reste euclidien : Rem . . . . . . . . . . . . . . . . . . . . 353
6.27.6 Quotient et reste euclidien : quorem divide . . . . . . 354
6.27.7 PGCD de polynmes par lalgorithme dEuclide : gcd igcd355
6.27.8 PGCD de deux polynmes par lalgorithme dEuclide : Gcd 357
6.27.9 Choisir lalgorithme du PGCD de deux polynmes : ezgcd
heugcd modgcd psrgcd . . . . . . . . . . . . . . . 358
6.27.10 PPCM de deux polynmes : lcm . . . . . . . . . . . . . 359
6.27.11 Idendit de Bzout : egcd gcdex . . . . . . . . . . . . 360
6.27.12 Rsolution polynmiale de au+bv=c : abcuv . . . . . . . 361
6.27.13 Les restes chinois : chinrem . . . . . . . . . . . . . . . 362
6.27.14 Polynme cyclotomique : cyclotomic . . . . . . . . . 363
6.27.15 Suites de Sturm et nombre de de changements de signe de
P sur ]a; b] : sturm . . . . . . . . . . . . . . . . . . . . 364

TABLE DES MATIRES

6.28

6.29

6.30

6.31

6.32

6.33

17

6.27.16 Nombre de changements de signe sur ]a; b] : sturmab . 364


6.27.17 Suites de Sturm : sturmseq . . . . . . . . . . . . . . . 365
6.27.18 Matrice de Sylvester de deux polynmes : sylvester . 366
6.27.19 Rsultant de deux polynmes : resultant . . . . . . . 367
Polynmes orthogonaux . . . . . . . . . . . . . . . . . . . . . . 370
6.28.1 Polynme de Legendre : legendre . . . . . . . . . . . 370
6.28.2 Polynme de Hermite : hermite . . . . . . . . . . . . . 371
6.28.3 Polynme de Laguerre : laguerre . . . . . . . . . . . . 371
6.28.4 Polynme de Tchebychev de 1-ire espce : tchebyshev1372
6.28.5 Polynme de Tchebychev de 2-ime espce : tchebyshev2373
Base et rduction de Grbner . . . . . . . . . . . . . . . . . . . . 373
6.29.1 Base de Grbner : gbasis . . . . . . . . . . . . . . . . 373
6.29.2 Rduction par rapport une base de Grbner : greduce . 374
6.29.3 Test dappartenance dun polynme ou dune liste de polynmes un idal donn par une base de Groebner : in_ideal375
6.29.4 Construire un polynme de n variables : genpoly . . . . 376
Les fractions rationnelles . . . . . . . . . . . . . . . . . . . . . . 377
6.30.1 Numrateur : getNum . . . . . . . . . . . . . . . . . . . 377
6.30.2 Numrateur aprs simplification : numer . . . . . . . . . 377
6.30.3 Dnominateur : getDenom . . . . . . . . . . . . . . . . 377
6.30.4 Dnominateur aprs simplification : denom . . . . . . . . 378
6.30.5 Numrateur et dnominateur : f2nd fxnd . . . . . . . . 378
6.30.6 Simplifier : simp2 . . . . . . . . . . . . . . . . . . . . . 378
6.30.7 Rduire au mme dnominateur : comDenom . . . . . . . 379
6.30.8 Partie entire et fractionnaire : propfrac . . . . . . . . 379
6.30.9 Dcomposition en lments simples : partfrac =>+ . 379
6.30.10 Dcomposition en lments simples sur C : cpartfrac . 380
Racines exactes dun polynme . . . . . . . . . . . . . . . . . . . 380
6.31.1 Encadrement exact des racines complexes dun polynme :
complexroot . . . . . . . . . . . . . . . . . . . . . . 380
6.31.2 Encadrement exact des racines relles dun polynme avec
leur multiplicit : realroot . . . . . . . . . . . . . . . 381
6.31.3 Encadrement exact des racines relles dun polynme : VAS 383
6.31.4 Encadrement exact des racines relles positives dun polynme : VAS_positive . . . . . . . . . . . . . . . . . . 384
6.31.5 Borne suprieure des racines relles positives dun polynme : posubLMQ . . . . . . . . . . . . . . . . . . . . . 384
6.31.6 Borne infrieure des racines relles positives dun polynme : poslbdLMQ . . . . . . . . . . . . . . . . . . . . 385
6.31.7 Valeurs exactes des racines rationnelles dun polynme :
rationalroot . . . . . . . . . . . . . . . . . . . . . . 385
6.31.8 Valeurs exactes des racines complexes rationnelles dun
polynme : crationalroot . . . . . . . . . . . . . . 386
Fraction rationnelle, ses racines et ses ples exacts . . . . . . . . 386
6.32.1 Racines et ples exacts dune fraction rationnelle : froot 386
6.32.2 Coefficients dune fraction rationnelle dfinie par ses racines et ses ples : fcoeff . . . . . . . . . . . . . . . . 387
Le calcul modulaire dans Z/pZ ou dans Z/pZ[x] . . . . . . . . . 387

18

TABLE DES MATIRES

6.34

6.35

6.36

6.37

6.33.1 Dvelopper et rduire : normal . . . . . . . . . . . . . . 388


6.33.2 Addition dans Z/pZ ou dans Z/pZ[x] : + . . . . . . . . . 388
6.33.3 Soustraction dans Z/pZ ou Z/pZ[x] : - . . . . . . . . . . 389
6.33.4 Multiplication dans Z/pZ ou Z/pZ[x] : * . . . . . . . . . 389
6.33.5 Quotient : quo . . . . . . . . . . . . . . . . . . . . . . . 390
6.33.6 Remainder : rem . . . . . . . . . . . . . . . . . . . . . . 390
6.33.7 Quotient and remainder : quorem . . . . . . . . . . . . . 390
6.33.8 Division dans Z/pZ ou Z/pZ[x] : / . . . . . . . . . . . . 391
6.33.9 Puissance dans Z/pZ et dans Z/pZ[x] : . . . . . . . . . 392
6.33.10 Calcul de an mod p ou de A(x)n mod (x), p : powmod
powermod . . . . . . . . . . . . . . . . . . . . . . . . . 392
6.33.11 Inverse dans Z/pZ : inv ou / . . . . . . . . . . . . . . . 393
6.33.12 Transformer un entier en sa fraction modulo p : fracmod
iratrecon . . . . . . . . . . . . . . . . . . . . . . . . 393
6.33.13 PGCD dans Z/pZ[x] : gcd . . . . . . . . . . . . . . . . 394
6.33.14 Factorisation dans Z/pZ[x] : factor factoriser . . 394
6.33.15 Dterminant dune matrice de Z/pZ : det . . . . . . . . 395
6.33.16 Inverse dune matrice de Z/pZ : inv inverse . . . . . 395
6.33.17 Rsolution dun systme linaire de Z/pZ : rref . . . . 395
6.33.18 Construction dun corps de Galois : GF . . . . . . . . . . 396
6.33.19 Factorisation dun polynme coefficients dans un corps
de Galois : factor . . . . . . . . . . . . . . . . . . . . 398
Le calcul modulaire comme Maple dans Z/pZ[x] . . . . . . . . . 398
6.34.1 Quotient euclidien : Quo . . . . . . . . . . . . . . . . . . 398
6.34.2 Reste euclidien : Rem . . . . . . . . . . . . . . . . . . . . 399
6.34.3 PGCD dans Z/pZ[x] : Gcd . . . . . . . . . . . . . . . . 400
6.34.4 Factorisation dans Z/pZ[x] : Factor . . . . . . . . . . . 400
6.34.5 Dterminant dune matrice de Z/pZ : Det . . . . . . . . . 401
6.34.6 Inverse dune matrice de Z/pZ : Inverse . . . . . . . . 401
6.34.7 Rsolution dun systme linaire de Z/pZ : Rref . . . . 402
Dveloppements limits et asymptotiques . . . . . . . . . . . . . 403
6.35.1 Division selon les puissances croissantes : divpc . . . . 403
6.35.2 Dveloppement limit : taylor . . . . . . . . . . . . . 403
6.35.3 Dveloppement limit : series . . . . . . . . . . . . . 404
6.35.4 Dveloppement rciproque dun dveloppement en sries
en 0 : revert . . . . . . . . . . . . . . . . . . . . . . . 406
6.35.5 Rsidu dune expression en un point : residue . . . . . 406
6.35.6 Dveloppement de Pad : pade . . . . . . . . . . . . . . 407
Les plages de valeurs . . . . . . . . . . . . . . . . . . . . . . . . 408
6.36.1 Dfinition dune plage de valeurs : a1..a2 . . . . . . . . 408
6.36.2 Pour accder aux bornes dune plage de valeurs : left
gauche right droit . . . . . . . . . . . . . . . . . 409
6.36.3 Centre dune plage de valeurs : interval2center . . 410
6.36.4 Plages de valeurs dfinies par leur centre : center2interval410
Les intervalles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
6.37.1 Dfinition : i[] . . . . . . . . . . . . . . . . . . . . . . 411
6.37.2 Somme de 2 intervalles . . . . . . . . . . . . . . . . . . . 412
6.37.3 Oppos dun intervalle . . . . . . . . . . . . . . . . . . . 412

TABLE DES MATIRES

19

6.37.4 Produit de 2 intervalles . . . . . . . . . . . . . . . . . . . 412


6.37.5 Inverse dun intervalle . . . . . . . . . . . . . . . . . . . 413
6.37.6 Pour accder aux bornes dun intervalle : left gauche
right droit . . . . . . . . . . . . . . . . . . . . . . 413
6.37.7 Milieu dun intervalle : midpoint milieu . . . . . . 413
6.37.8 Union de 2 intervalles : union . . . . . . . . . . . . . . 413
6.37.9 Intersection de 2 intervalles : intersect . . . . . . . . 414
6.37.10 Tester si un lment est dans un intervalle : contains . 414
6.37.11 Convertir un nombre en un intervalle : convert . . . . . 414
6.38 Les squences . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
6.38.1 Dfinition : seq[] () . . . . . . . . . . . . . . . . . . 415
6.38.2 Concatner deux squences : , . . . . . . . . . . . . . . . 415
6.38.3 Pour accder un lment dune squence : [] . . . . . . 415
6.38.4 Pour extraire une sous-squence dune squence : [] . . . 416
6.38.5 Pour fabriquer une squence ou une liste : seq $ . . . . 416
6.38.6 Pour transformer une squence en liste : [] nop . . . . . 419
6.38.7 Leffet de loprateur + sur deux squences . . . . . . . . 419
6.39 Les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
6.39.1 Dfinition : set[] . . . . . . . . . . . . . . . . . . . . . 420
6.39.2 Tester si 2 ensembles (ou listes) sont inclus(e) lun(e) dans
lautre :is_included, est_inclus . . . . . . . . . 420
6.39.3 Union de deux ensembles ou de deux listes : union . . . 421
6.39.4 Intersection de deux ensembles, de deux listes : intersect422
6.39.5 Diffrence de deux ensembles ou de deux listes : minus . 422
6.40 Les listes ou les vecteurs . . . . . . . . . . . . . . . . . . . . . . 423
6.40.1 Les diffrentes listes . . . . . . . . . . . . . . . . . . . . 423
6.40.2 Aplatir une liste : flatten . . . . . . . . . . . . . . . . 423
6.40.3 Accs un lment ou une sous-liste dune liste : at [] 424
6.40.4 Extraire une sous-liste dune liste : mid . . . . . . . . . . 425
6.40.5 Avoir le premier lment dune liste : head . . . . . . . . 426
6.40.6 Supprimer un lment dans une liste : suppress . . . . 426
6.40.7 Avoir la liste prive de son premier lment : tail . . . . 426
6.40.8 Partie droite et gauche dune liste : droit ou right,
gauche ou left . . . . . . . . . . . . . . . . . . . . 426
6.40.9 Avoir la liste permute : revlist . . . . . . . . . . . . 427
6.40.10 Avoir la liste permute partir de son n-ime lment :
rotate . . . . . . . . . . . . . . . . . . . . . . . . . . 427
6.40.11 Avoir la liste permute partir de son n-ime lment :
shift . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
6.40.12 Modifier un lment dune liste : subsop . . . . . . . . . 428
6.40.13 Transformer une liste en squence : op makesuite . . 429
6.40.14 Transformer une squence en liste : makevector [] . 430
6.40.15 Longueur dune liste : size nops length . . . . . . 430
6.40.16 Longueur dune liste de listes : sizes . . . . . . . . . . 430
6.40.17 Concatner deux listes ou une liste et un lment : concat
augment . . . . . . . . . . . . . . . . . . . . . . . . . . 431
6.40.18 Rajouter un lment la fin dune liste : append . . . . . 431
6.40.19 Rajouter un lment au dbut dune liste : prepend . . . 432

20

TABLE DES MATIRES

6.41

6.42

6.43
6.44

6.40.20 Trier : sort . . . . . . . . . . . . . . . . . . . . . . . . 432


6.40.21 Trier une liste selon lordre croissant : SortA et sorta 435
6.40.22 Trier une liste selon lordre dcroissant : SortD sortd 436
6.40.23 Slectionner des lments dune liste : select . . . . . . 437
6.40.24 Supprimer des lments dune liste : remove . . . . . . . 438
6.40.25 Tester si un lment est dans une liste : member . . . . . 438
6.40.26 Tester si un lment est dans une liste : contains . . . . 439
6.40.27 Compter les lments dune liste ou dune matrice vrifiant
une proprit : count . . . . . . . . . . . . . . . . . . . 439
6.40.28 Nombre dlments ayant une valeur donne : count_eq 441
6.40.29 Nombre dlments infrieurs une valeur : count_inf 442
6.40.30 Nombre dlments suprieurs une valeur : count_sup 443
6.40.31 Somme des lments dune liste : sum add . . . . . . . 443
6.40.32 Somme cumule des lments dune liste : cumSum . . . 444
6.40.33 Produit indic : product mul . . . . . . . . . . . . . . 445
6.40.34 Appliquer une fonction dune variable aux lments dune
liste : map apply of . . . . . . . . . . . . . . . . . . 447
6.40.35 Appliquer une fonction de plusieurs variables un polynme donn au format interne :map . . . . . . . . . . . . 449
6.40.36 Appliquer une fonction de 2 variables aux lments de 2
listes : zip . . . . . . . . . . . . . . . . . . . . . . . . . 450
6.40.37 Faire une liste de zros : newList . . . . . . . . . . . . 451
6.40.38 Faire une liste avec une fonction : makelist . . . . . . 451
6.40.39 Faire une liste alatoire : randvector . . . . . . . . . . 452
6.40.40 Liste des diffrences de termes conscutifs : deltalist 454
6.40.41 Faire une matrice avec une liste : list2mat . . . . . . . 455
6.40.42 Faire une liste avec une matrice : mat2list . . . . . . . 455
Fonctions utiles pour les vecteurs et les composantes dun vecteur 455
6.41.1 Les normes dun vecteur : maxnorm l1norm l2norm
norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
6.41.2 Pour normaliser les composantes dun vecteur : normalize
unitV . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
6.41.3 Somme terme terme de deux listes : + .+ . . . . . . . . 456
6.41.4 Diffrence terme terme de deux listes : - .- . . . . . . 457
6.41.5 Produit terme terme de deux listes : .* . . . . . . . . . 458
6.41.6 Quotient terme terme de deux listes : ./ . . . . . . . . . 458
6.41.7 Le produit scalaire : scalar_product dotprod dot
dotP * scalar_Product produit_scalaire . 459
6.41.8 Le produit vectoriel : cross crossP crossproduct 460
Fonctions utiles pour les statistiques : mean moyenne, variance,
stddev ecart_type, stddevp, ecart_type_population,
stdDev, median, quantile, quartiles, quartile1,
quartile3, boxwhisker, moustache . . . . . . . . . . 460
Les tableaux indics par des chanes : table . . . . . . . . . . . 462
Les matrices particulires . . . . . . . . . . . . . . . . . . . . . . 463
6.44.1 Matrice identit : idn identity . . . . . . . . . . . . 463
6.44.2 Matrice de zros : newMat matrix . . . . . . . . . . . 464
6.44.3 Matrice alatoire : ranm randMat randmatrix . . . 464

TABLE DES MATIRES

21

6.44.4 Diagonale dune matrice ou matrice dune diagonale : diag


BlockDiagonal . . . . . . . . . . . . . . . . . . . . . 467
6.44.5 Bloc de Jordan : JordanBlock . . . . . . . . . . . . . 467
6.44.6 Matrice de Hilbert : hilbert . . . . . . . . . . . . . . . 467
6.44.7 Matrice de Vandermonde : vandermonde . . . . . . . . 468
6.45 Cration et arithmtique des matrices . . . . . . . . . . . . . . . . 468
6.45.1 Pour valuer une matrice : evalm . . . . . . . . . . . . . 468
6.45.2 Addition et soustraction de deux matrices : + - .+ .- . 468
6.45.3 Multiplication de deux matrices : * &* . . . . . . . . . . 469
6.45.4 Addition des lments dune mme colonne dune matrice :
sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
6.45.5 Somme cumule des lments dune mme colonne dune
matrice : cumSum . . . . . . . . . . . . . . . . . . . . . 469
6.45.6 Multiplication des lments dune mme colonne dune
matrice : product . . . . . . . . . . . . . . . . . . . . . 469
6.45.7 Elvation dune matrice une puissance entire : & . . 470
6.45.8 Produit de Hadamard : hadamard product . . . . . . 470
6.45.9 Produit de Hadamard (version infixe) : .* . . . . . . . . 471
6.45.10 Division de Hadamard (version infixe) : ./ . . . . . . . 471
6.45.11 Puissance de Hadamard (version infixe) : . . . . . . . . 471
6.45.12 Extraire un ou des lment(s) dune matrice : at . . . . . 472
6.45.13 Modifier un lment ou une ligne dune matrice contenue
dans une variable : := et =< . . . . . . . . . . . . . . . . 474
6.45.14 Modifier un lment ou une ligne dune matrice : subsop 476
6.45.15 Redimensionner une matrice ou un vecteur : REDIM . . . 478
6.45.16 Remplacer une partie dune matrice ou dun vecteur : REPLACE479
6.45.17 Extraire des lignes ou des colonnes dune matrice (compatibilit Maple) : row col . . . . . . . . . . . . . . . . . 480
6.45.18 Supprimer des lignes ou des colonnes dune matrice :
delrows delcols . . . . . . . . . . . . . . . . . . . 480
6.45.19 Extraire une sous-matrice dune matrice (compatibilit TI) :
subMat . . . . . . . . . . . . . . . . . . . . . . . . . . 481
6.45.20 Redimensionner une matrice ou un vecteur : redim . . . 482
6.45.21 Remplacer une partie dune matrice ou dun vecteur : replace483
6.45.22 Ajouter une ligne une autre : rowAdd . . . . . . . . . . 484
6.45.23 Multiplier une ligne par une expression : mRow et scale
SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
6.45.24 Ajouter k fois une ligne une autre : mRowAdd et scaleadd
SCALEADD . . . . . . . . . . . . . . . . . . . . . . . . . 484
6.45.25 changer deux lignes : rowSwap swaprow rowswap 485
6.45.26 changer deux colonnes : colSwap swapcol colswap485
6.45.27 Faire une matrice avec une liste de matrices : blockmatrix485
6.45.28 Faire une matrice avec deux matrices : semi_augment . 486
6.45.29 Faire une matrice avec deux matrices : augment concat 487
6.45.30 Faire une matrice avec une fonction : makemat . . . . . 488
6.45.31 Dfinir une matrice : matrix . . . . . . . . . . . . . . . 488
6.45.32 Rajouter une colonne une matrice : border . . . . . . 489

22

TABLE DES MATIRES

6.46

6.47

6.48

6.49

6.45.33 Compter les lments dune matrice vrifiant une proprit :


count . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
6.45.34 Compter les lments ayant une valeur donne : count_eq 490
6.45.35 Compter les lments plus petits quune valeur donne :
count_inf . . . . . . . . . . . . . . . . . . . . . . . . 491
6.45.36 Compter les lments plus grands quune valeur donne :
count_sup . . . . . . . . . . . . . . . . . . . . . . . . 491
6.45.37 Fonctions utiles pour les colonnes dune matrice : mean
ou moyenne, stddev ou ecart_type, variance,
median, quantile, quartiles, boxwhisker ou
moustache . . . . . . . . . . . . . . . . . . . . . . . . 492
6.45.38 Dimension dune matrice : dim . . . . . . . . . . . . . . 493
6.45.39 Nombre de lignes : rowdim rowDim nrows . . . . . 494
6.45.40 Nombre de colonnes : coldim colDim ncols . . . . 494
Algbre linaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
6.46.1 Transpose dune matrice : tran transpose . . . . . 494
6.46.2 Inverse dune matrice : inv inverse / . . . . . . . . 495
6.46.3 Trace dune matrice : trace . . . . . . . . . . . . . . . 495
6.46.4 Dterminant dune matrice : det . . . . . . . . . . . . . 495
6.46.5 Dterminant dune matrice creuse : det_minor . . . . . 496
6.46.6 Rang dune matrice : rank . . . . . . . . . . . . . . . . 497
6.46.7 Matrice adjointe : trn . . . . . . . . . . . . . . . . . . . 497
6.46.8 Matrice quivalente : changebase . . . . . . . . . . . . 497
6.46.9 Base dun sous espace vectoriel : basis . . . . . . . . . 498
6.46.10 Base de lintersection de deux sous espaces vectoriels :
ibasis . . . . . . . . . . . . . . . . . . . . . . . . . . 498
6.46.11 Image dune application linaire : image . . . . . . . . . 498
6.46.12 Noyau dune application linaire : kernel nullspace
ker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
6.46.13 Noyau dune application linaire : Nullspace . . . . . 499
6.46.14 Espace engendr par les colonnes dune matrice : colspace499
6.46.15 Espace engendr par les lignes dune matrice : rowspace 500
Programmation linaire . . . . . . . . . . . . . . . . . . . . . . . 500
6.47.1 La commande Xcas : simplex_reduce . . . . . . . . 500
6.47.2 criture matricielle et algorithme du simplexe . . . . . . . 502
6.47.3 Premier cas : 3 arguments . . . . . . . . . . . . . . . . . 504
6.47.4 Deuxime cas : un argument . . . . . . . . . . . . . . . . 505
6.47.5 Passage de la forme standard la forme canonique . . . . 505
Les diffrentes norme dune matrice . . . . . . . . . . . . . . . . 506
6.48.1 Norme de Frobenius dune matrice : frobenius_norm 507
6.48.2 Norme dune matrice avec la norme des lignes : rownorm
rowNorm . . . . . . . . . . . . . . . . . . . . . . . . . . 507
6.48.3 Norme dune matrice avec la norme des colonnes : colnorm
colNorm . . . . . . . . . . . . . . . . . . . . . . . . . . 507
6.48.4 La triple norme dune matrice : matrix_norm et l1norm,
l2norm ou norm ou specnorm, linfnorm . . . . . . 508
6.48.5 Norme : COND cond . . . . . . . . . . . . . . . . . . . 512
Rduction des matrices . . . . . . . . . . . . . . . . . . . . . . . 513

TABLE DES MATIRES

6.50

6.51

6.52

6.53

23

6.49.1 Valeurs propres : eigenvals eigenvalues . . . . . 513


6.49.2 Matrice de Jordan : egvl eigVl . . . . . . . . . . . . . 514
6.49.3 Vecteurs propres : egv eigenvectors eigenvects
eigVc . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
6.49.4 Matrice de Jordan rationnelle : rat_jordan . . . . . . 515
6.49.5 Matrice de passage et matrice de Jordan : jordan . . . . 517
6.49.6 Puissance n dune matrice carre : matpow . . . . . . . . 518
6.49.7 Polynme caractristique : pcar charpoly . . . . . . 519
6.49.8 Polynme caractristique dune matrice creuse de grande
dimension : pcar_hessenberg . . . . . . . . . . . . . 520
6.49.9 Polynme minimal : pmin . . . . . . . . . . . . . . . . . 520
6.49.10 Comatrice : adjoint_matrix . . . . . . . . . . . . . 521
6.49.11 Matrice compagnon dun polynme : companion . . . . 522
6.49.12 Rduction de Hessenberg dune matrice : hessenberg . 523
6.49.13 Forme normale de Hermite : ihermite . . . . . . . . . 525
6.49.14 Forme normale de Smith : ismith . . . . . . . . . . . . 525
Les isomtries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
6.50.1 Reconnaitre une isomtrie : isom . . . . . . . . . . . . . 526
6.50.2 Trouver la matrice dune isomtrie : mkisom . . . . . . . 527
Factorisation des matrices . . . . . . . . . . . . . . . . . . . . . . 528
6.51.1 Dcomposition de Cholesky : cholesky . . . . . . . . . 528
6.51.2 Dcomposition QR : qr . . . . . . . . . . . . . . . . . . 529
6.51.3 Dcomposition QR (compatible TI) : QR . . . . . . . . . 529
6.51.4 Dcomposition LQ (compatible HP) : LQ . . . . . . . . . 529
6.51.5 Dcomposition LU : lu . . . . . . . . . . . . . . . . . . 530
6.51.6 Dcomposition LU (compatible TI) : LU . . . . . . . . . . 531
6.51.7 Valeurs singulires (compatible HP) : SVL svl . . . . . 532
6.51.8 Singular value decomposition : svd . . . . . . . . . . . . 532
6.51.9 Singular value decomposition (compatible HP) : SVD . . . 533
6.51.10 Recherche dune base de vecteurs courts dun rseau : lll 534
Les formes quadratiques . . . . . . . . . . . . . . . . . . . . . . 535
6.52.1 Matrice dune forme quadratique : q2a . . . . . . . . . . 535
6.52.2 Transformer une matrice en une forme quadratique : a2q . 535
6.52.3 Mthode de Gauss : gauss . . . . . . . . . . . . . . . . 535
6.52.4 Algorithme du gradient conjugu : conjugate_gradient536
6.52.5 Procd de Gramschmidt : gramschmidt . . . . . . . . 536
6.52.6 Trac dune conique : conic conique . . . . . . . . . 537
6.52.7 Rduction dune conique : conique_reduite
reduced_conic . . . . . . . . . . . . . . . . . . . . . 537
6.52.8 Trac dune quadrique : quadrique . . . . . . . . . . . 539
6.52.9 Rduction dune quadrique : quadrique_reduite
reduced_quadric . . . . . . . . . . . . . . . . . . . 539
Les expressions de plusieurs variables . . . . . . . . . . . . . . . 541
6.53.1 Le gradient : derive deriver diff grad . . . . . 541
6.53.2 Le Laplacien : laplacian . . . . . . . . . . . . . . . . 541
6.53.3 La matrice hessienne : hessian . . . . . . . . . . . . . 542
6.53.4 La divergence : divergence . . . . . . . . . . . . . . . 542
6.53.5 Le rotationnel : curl . . . . . . . . . . . . . . . . . . . 543

24

TABLE DES MATIRES

6.54

6.55

6.56

6.57

6.58

6.53.6 Le potentiel : potential . . . . . . . . . . . . . . . . . 543


6.53.7 Champ flux conservatif : vpotential . . . . . . . . . 543
quations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
6.54.1 crire une quation : equal . . . . . . . . . . . . . . . . 544
6.54.2 Transformer une quation en diffrence : equal2diff . 544
6.54.3 Transformer une quation en une liste : equal2list . . 544
6.54.4 Pour avoir le membre de gauche dune quation : left
gauche lhs . . . . . . . . . . . . . . . . . . . . . . . 545
6.54.5 Pour avoir le membre de droite dune quation : right
droit rhs . . . . . . . . . . . . . . . . . . . . . . . . 545
6.54.6 Rsolution dquations : solve resoudre . . . . . . . 546
6.54.7 Rsoudre des quations dans C : resoudre_dans_C
csolve cSolve . . . . . . . . . . . . . . . . . . . . 548
Les systmes linaires . . . . . . . . . . . . . . . . . . . . . . . . 549
6.55.1 Matrice dun systme : syst2mat . . . . . . . . . . . . 549
6.55.2 Rduction de Gauss dune matrice : ref . . . . . . . . . 549
6.55.3 Rduction de Gauss-Jordan : rref gaussjord . . . . 550
6.55.4 Rsolution de A*X=B : simult . . . . . . . . . . . . . 553
6.55.5 tape de la rduction de Gauss-Jordan dune matrice : pivot554
6.55.6 Rsoudre un systme linaire : linsolve
resoudre_systeme_lineaire . . . . . . . . . . . 554
6.55.7 Norme minimale dun systme linaire : LSQ . . . . . . . 555
6.55.8 Rsolution dune rcurrence linaire : reverse_rsolve 556
Les quations diffrentielles . . . . . . . . . . . . . . . . . . . . 557
6.56.1 quations diffrentielles : desolve deSolve dsolve 558
6.56.2 Transforme de Laplace et transforme de Laplace inverse :
laplace ilaplace invlaplace . . . . . . . . . . 568
Transforme en z et transforme en z inverse . . . . . . . . . . . . 571
6.57.1 Transforme en z dune suite, la fonction ztrans : ztrans 571
6.57.2 Transforme en z inverse dune fraction rationnelle, la fonction invztrans : invztrans . . . . . . . . . . . . . . . 572
Autres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
6.58.1 Ngliger les petites valeurs : epsilon2zero . . . . . . 573
6.58.2 Liste des variables : lname indets . . . . . . . . . . . 574
6.58.3 Liste des variables et des expressions : lvar . . . . . . . 574
6.58.4 Liste des variables et des expressions algbriques : algvar 575
6.58.5 Test de la prsence dune variable dans une expression : has575
6.58.6 valuation numrique : evalf . . . . . . . . . . . . . . 576
6.58.7 Approximation rationnelle : float2rational exact 576

Les fonctions de statistique


577
7.1 Les fonctions de Xcas de statistique 1 variable . . . . . . . . . 577
7.1.1 La moyenne : mean moyenne . . . . . . . . . . . . . . 577
7.1.2 Lcart-type : stddev ecart_type . . . . . . . . . . 578
7.1.3 Lcart-type de la population : ecart_type_population
stddevp stdDev . . . . . . . . . . . . . . . . . . . . 579
7.1.4 La variance : variance . . . . . . . . . . . . . . . . . . 580
7.1.5 La mdiane : median . . . . . . . . . . . . . . . . . . . 580

TABLE DES MATIRES


7.1.6
7.1.7
7.1.8
7.1.9
7.1.10
7.1.11
7.1.12
7.1.13
7.1.14
7.1.15

7.2

7.3

25

Diffrentes valeurs statistiques : quartiles . . . . . . . 581


Le premier quartile : quartile1 . . . . . . . . . . . . . 581
Le troisime quartile : quartile3 . . . . . . . . . . . . 582
Les dciles : quantile . . . . . . . . . . . . . . . . . . 582
Le regroupement en classes : classes . . . . . . . . . . 583
Regroupement de termes : accumulate_head_tail . 584
La boite moustaches : boxwhisker moustache . . 584
Lhistogramme : histogram histogramme . . . . . 584
Les frquences : frequencies frequences . . . . 585
Les frquences cumules : cumulated_frequencies
frequences_cumulees . . . . . . . . . . . . . . . . 586
7.1.16 Dessiner un diagramme en batons : diagramme_batons 588
7.1.17 Dessiner un diagramme en camembert : camembert . . 589
Les fonctions statistiques 2 variables . . . . . . . . . . . . . . . 589
7.2.1 La covariance : covariance . . . . . . . . . . . . . . . 590
7.2.2 La corrlation : correlation . . . . . . . . . . . . . . 591
7.2.3 Covariance et corrlation : covariance_correlation 593
7.2.4 Le nuage de points : scatterplot nuage_points . 594
7.2.5 Ligne polygonale : polygonplot ligne_polygonale594
7.2.6 Ligne polygonale : listplot plotlist . . . . . . . 595
7.2.7 Ligne polygonale et nuage de points : polygonscatterplot
ligne_polygonale_pointee . . . . . . . . . . . . 595
7.2.8 Interpolation linaire : linear_interpolate . . . . . 596
7.2.9 Rgression linaire : linear_regression . . . . . . 597
7.2.10 Graphe de la rgression linaire :
linear_regression_plot . . . . . . . . . . . . . . 597
7.2.11 Rgression exponentielle : exponential_regression 598
7.2.12 Graphe de la rgression exponentielle :
exponential_regression_plot . . . . . . . . . . 599
7.2.13 Rgression logarithmique : logarithmic_regression599
7.2.14 Graphe de la rgression logarithmique :
logarithmic_regression_plot . . . . . . . . . . 601
7.2.15 Rgression polynmiale : polynomial_regression 601
7.2.16 Graphe de la rgression polynomiale :
polynomial_regression_plot . . . . . . . . . . 602
7.2.17 Rgression puissance : power_regression . . . . . . 602
7.2.18 Graphe de la rgression puissance :
power_regression_plot . . . . . . . . . . . . . . 603
7.2.19 Rgression logistique : logistic_regression . . . 603
7.2.20 Graphe de la rgression logistique :
logistic_regression_plot . . . . . . . . . . . . 605
Les fonctions alatoires de Xcas . . . . . . . . . . . . . . . . . . 605
7.3.1 Pour initialiser les nombres alatoires : srand randseed
RandSeed . . . . . . . . . . . . . . . . . . . . . . . . . 605
7.3.2 Tirage quirparti rand alea hasard . . . . . . . . 606
7.3.3 Tirage alatoire sans remise de p objets parmi n : rand
alea hasard . . . . . . . . . . . . . . . . . . . . . . 609
7.3.4 Tirage selon une loi binomiale : randbinomial . . . . 610

26

TABLE DES MATIRES

7.4

7.3.5 Tirage selon une loi multinomiale : randmultinomial 610


7.3.6 Tirage selon une loi de Poisson : randpoisson . . . . . 611
7.3.7 Tirage selon une loi normale : randnorm randNorm . 611
7.3.8 Tirage selon une loi exponentielle : randexp . . . . . . 612
7.3.9 Matrice alatoire : ranm randmatrix randMat . . . 612
Densit, fonction de rpartition et leur inverse . . . . . . . . . . . 613
7.4.1 Probabilit que X gale k lorsque X B(n, p) : binomial613
7.4.2 Fonction de rpartition de la loi binomiale : binomial_cdf614
7.4.3 Fonction de rpartition inverse de la loi binomiale : binomial_icdf614
7.4.4 Probabilit que X gale k lorsque X N egBin(n, p) :
negbinomial . . . . . . . . . . . . . . . . . . . . . . 615
7.4.5 Fonction de rpartition de la loi binomiale ngative : negbinomial_cdf615
7.4.6 Fonction de rpartition inverse de la loi binomiale ngative : negbinomial_icdf . . . . . . . . . . . . . . . 616
7.4.7 Probabilit que X gale [k0 , k1 ..kj ] + K lorsque X suit
une loi multinomiale de probabilit [p0 , p1 , ..pj ] = P :
multinomial . . . . . . . . . . . . . . . . . . . . . . 617
7.4.8 Probabilit pour que X gale k lorsque X P() : poisson618
7.4.9 Fonction de rpartition de Poisson : poisson_cdf . . . 618
7.4.10 Fonction de rpartition inverse de Poisson : poisson_icdf618
7.4.11 Densit de probabilit de la loi normale : loi_normale
normald . . . . . . . . . . . . . . . . . . . . . . . . . . 619
7.4.12 Fonction de rpartition de la loi normale : normal_cdf
normald_cdf . . . . . . . . . . . . . . . . . . . . . . 619
7.4.13 Fonction de rpartition inverse normale : normal_icdf
normald_icdf . . . . . . . . . . . . . . . . . . . . . . 620
7.4.14 Complment 1 de la fonction de rpartition de la loi normale : UTPN . . . . . . . . . . . . . . . . . . . . . . . . 621
7.4.15 Densit de probabilit de la loi de Student : student
studentd . . . . . . . . . . . . . . . . . . . . . . . . . 621
7.4.16 Fonction de rpartition de la loi de Student : student_cdf622
7.4.17 Fonction de rpartition inverse de Student : student_icdf622
7.4.18 Complment 1 de la fonction de rpartition de la loi de
Student : UTPT . . . . . . . . . . . . . . . . . . . . . . . 623
7.4.19 Densit de probabilit de la loi du 2 : chisquare chisquared623
7.4.20 Fonction de rpartition de la loi du 2 : chisquare_cdf 623
7.4.21 Fonction inverse de la fonction de rpartition de la loi du
2 : chisquare_icdf . . . . . . . . . . . . . . . . . . 624
7.4.22 Complment 1 de la fonction de rpartition de la loi du
2 : UTPC . . . . . . . . . . . . . . . . . . . . . . . . . . 624
7.4.23 Densit de probabilit de la loi de Fisher-Sndcor : fisher
fisherd snedecor snedecord . . . . . . . . . . 624
7.4.24 La fonction de rpartition de la loi de Fisher-Sndcor :
fisher_cdf snedecor_cdf . . . . . . . . . . . . . 625
7.4.25 Inverse de la fonction de rpartition de la loi de FisherSndcor : fisher_icdf snedecor_icdf . . . . . 625
7.4.26 Complment 1 de la fonction de rpartition de la loi de
Fisher-Sndcor : UTPF . . . . . . . . . . . . . . . . . . 626

TABLE DES MATIRES


7.4.27
7.4.28
7.4.29
7.4.30
7.4.31
7.4.32
7.4.33
7.4.34
7.4.35
7.4.36
7.4.37

7.5

27

Densit de probabilit de la loi gamma : gammad . . . . . 626


Fonction de rpartition de la loi gamma : gammad_cdf . 626
Fonction de rpartition inverse de la loi gamma : gammad_icdf627
Densit de probabilit de la loi beta : betad . . . . . . . 627
Fonction de rpartition de la loi beta : betad_cdf . . . . 628
Fonction de rpartition inverse de la loi beta : betad_icdf628
Densit de probabilit de la loi gomtrique : geometric 629
Fonction de rpartition de la loi gomtrique : geometric_cdf629
Fonction de rpartition inverse de la loi gomtrique : geometric_icdf630
Densit de probabilit de la loi de Cauchy : cauchy cauchyd630
Fonction de rpartition de la loi de Cauchy : cauchy_cdf
cauchyd_cdf . . . . . . . . . . . . . . . . . . . . . . 631
7.4.38 Fonction de rpartition inverse de la loi de Cauchy : cauchy_icdf
cauchyd_icdf . . . . . . . . . . . . . . . . . . . . . . 632
7.4.39 Densit de probabilit de la loi uniforme : uniform uniformd632
7.4.40 Fonction de rpartition de la loi uniforme : uniform_cdf
uniformd_cdf . . . . . . . . . . . . . . . . . . . . . . 632
7.4.41 Fonction de rpartition inverse de la loi uniforme : uniform_icdf
uniformd_icdf . . . . . . . . . . . . . . . . . . . . . 633
7.4.42 Densit de probabilit de la loi exponentielle : exponential
exponentiald . . . . . . . . . . . . . . . . . . . . . . 633
7.4.43 Fonction de rpartition de la loi de exponentielle : exponential_cdf
exponentiald_cdf . . . . . . . . . . . . . . . . . . 634
7.4.44 Fonction de rpartition inverse de la loi exponentielle :
exponential_icdf exponentiald_icdf . . . . 634
7.4.45 Densit de probabilit de la loi de Weibull : weibull
weibulld . . . . . . . . . . . . . . . . . . . . . . . . . 635
7.4.46 Fonction de rpartition de la loi de Weibull : weibull_cdf
weibulld_cdf . . . . . . . . . . . . . . . . . . . . . . 635
7.4.47 Fonction de rpartition inverse de la loi de Weibull : weibull_icdf
weibulld_icdf . . . . . . . . . . . . . . . . . . . . . 636
7.4.48 Distribution de Kolmogorov-Smirnov : kolmogorovd . 637
7.4.49 Test de Kolmogorov-Smirnov : kolmogorovt . . . . . 637
7.4.50 Fonction gnratrice des moments dune loi de probabilit : mgf . . . . . . . . . . . . . . . . . . . . . . . . . . 637
7.4.51 Distribution cumule pour une loi de probabilit : cdf . . 638
7.4.52 Distribution cumule inverse pour une loi de probabilit :
icdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
7.4.53 Chaine de Markov : markov . . . . . . . . . . . . . . . 639
7.4.54 Gnration dune marche alatoire sur un graphe dtat :
randmarkov . . . . . . . . . . . . . . . . . . . . . . . 639
Les tests dhypothses . . . . . . . . . . . . . . . . . . . . . . . 640
7.5.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . 640
7.5.2 normalt . . . . . . . . . . . . . . . . . . . . . . . . . . 640
7.5.3 studentt . . . . . . . . . . . . . . . . . . . . . . . . . 641
7.5.4 chisquaret . . . . . . . . . . . . . . . . . . . . . . . 642
7.5.5 kolmogorovt . . . . . . . . . . . . . . . . . . . . . . 646
7.5.6 Des exemples . . . . . . . . . . . . . . . . . . . . . . . . 646

28
8

TABLE DES MATIRES


Les fonctions de programmation
651
8.1 La forme dune fonction, dun programme et dun script . . . . . 651
8.1.1 Le choix de lditeur . . . . . . . . . . . . . . . . . . . . 651
8.1.2 La forme dune fonction . . . . . . . . . . . . . . . . . . 651
8.1.3 La forme dun programme . . . . . . . . . . . . . . . . . 653
8.1.4 La forme dun script . . . . . . . . . . . . . . . . . . . . 654
8.2 Excuter une fonction pas pas . . . . . . . . . . . . . . . . . . . 654
8.3 La squence dinstructions . . . . . . . . . . . . . . . . . . . . . 654
8.4 Les instructions de base . . . . . . . . . . . . . . . . . . . . . . . 654
8.4.1 Les commentaires : comment // . . . . . . . . . . . . 654
8.4.2 Les entres : input, saisir, Input, InputStr,
saisir_chaine, textinput . . . . . . . . . . . . 655
8.4.3 Fonction testant si une touche est presse : getKey . . . 656
8.4.4 Fonction testant le type de son argument : type . . . . . 657
8.4.5 Fonction testant si le type de son argument est une squence : subtype . . . . . . . . . . . . . . . . . . . . . 658
8.4.6 Fonction testant le type de son argument : getType . . . 658
8.4.7 Fonction testant le type de son argument : compare . . . 659
8.4.8 Les sorties : print, Disp, afficher . . . . . . . . 660
8.4.9 Pour effacer les sorties : ClrIO . . . . . . . . . . . . . . 660
8.4.10 Les sorties de ab : printpow . . . . . . . . . . . . . . . 661
8.4.11 Sortie dans une petite fentre : output Output . . . . 661
8.4.12 Les affectations infixes : => := =< . . . . . . . . . . . 662
8.4.13 Laffectation par copie : copy . . . . . . . . . . . . . . . 663
8.4.14 Les diffrences entre :=, =< et copy . . . . . . . . . . . 664
8.4.15 Les instructions copy et =< dans un programme . . . . . 665
8.4.16 Laffectation prefixe : sto Store . . . . . . . . . . . 668
8.4.17 Laffectation dune galit : assign . . . . . . . . . . . 669
8.4.18 Linstruction conditionnelle : if then else end, si
alors sinon fsi . . . . . . . . . . . . . . . . . . . 670
8.4.19 Linstruction conditionnelle : if then elif else end671
8.4.20 Linstruction conditionnelle : switch . . . . . . . . . . . 672
8.4.21 La boucle : for pour fpour . . . . . . . . . . . . . . 673
8.4.22 La fonction : seq . . . . . . . . . . . . . . . . . . . . . . 675
8.4.23 La boucle : repeat until et repeter jusqua . . 675
8.4.24 La boucle : while et tantque . . . . . . . . . . . . . . 676
8.4.25 Modifier lordre dexcution des instructions : label goto677
8.5 Les autres instructions . . . . . . . . . . . . . . . . . . . . . . . 678
8.5.1 Pour lire les entres partir dun fichier : read . . . . . . 678
8.5.2 Pour crire des variables et leur contenu dans un fichier :
write . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
8.5.3 Pour crire des sorties dans un fichier : fopen fprint
fclose . . . . . . . . . . . . . . . . . . . . . . . . . . 679
8.5.4 Pour utiliser une chane comme nom de variable ou comme
nom de fonction : # . . . . . . . . . . . . . . . . . . . . . 680
8.5.5 Pour utiliser une chane comme un nombre : expr . . . . 681
8.5.6 Pour utiliser une chane comme nom de commande : expr 681
8.5.7 valuer une expression sous la forme dune chane : string682

TABLE DES MATIRES


8.6

8.7

Dautres instructions utiles . . . . . . . . . . . . . . . . . . . . .


8.6.1 Dfinir une fonction ayant un nombre variable darguments :
args . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6.2 Pour sortir dune boucle : break . . . . . . . . . . . . .
8.6.3 Pour ne pas faire la fin dune boucle : continue . . . .
8.6.4 Ouvrir lcran DispG depuis un programme : DispG . .
8.6.5 Effacer lcran DispG depuis un programme : ClrGraph
8.6.6 Fermer lcran DispG depuis un programme : DispHome
Le debuggeur . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7.1 Ouvrir le dbuggeur : debug . . . . . . . . . . . . . . .
8.7.2 Instruction du debuggeur : watch . . . . . . . . . . . . .
8.7.3 Instruction du debuggeur : rmwatch . . . . . . . . . . .
8.7.4 Instruction du debuggeur : breakpoint . . . . . . . . .
8.7.5 Instruction du debuggeur : rmbreakpoint . . . . . . .
8.7.6 Instruction du debuggeur : cont . . . . . . . . . . . . . .
8.7.7 Instruction du debuggeur : kill . . . . . . . . . . . . . .
8.7.8 Instruction en vue dun debugage : halt . . . . . . . . .
8.7.9 Utilisation des instructions du debuggeur : cont halt
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7.10 Avoir un arrt momentan : Pause . . . . . . . . . . . .
8.7.11 Avoir un arrt momentan : WAIT . . . . . . . . . . . . .
8.7.12 Intercepter une erreur : try..catch . . . . . . . . . . .
8.7.13 Gnrer une erreur : throw error ERROR . . . . . .

29
683
683
683
684
684
685
685
685
685
686
686
686
687
687
687
687
688
688
689
689
690

Les fonctions de gomtrie 2-d


691
9.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
9.2 Les fonctions de base . . . . . . . . . . . . . . . . . . . . . . . . 691
9.2.1 Effacer lcran DispG : erase . . . . . . . . . . . . . . 691
9.2.2 Effacer les axes : switch_axes . . . . . . . . . . . . . 692
9.2.3 Tracer les vecteurs unitaires : vecteur_unitaire_Ox_2d
Ox_2d_unit_vector, vecteur_unitaire_Oy_2d,
Oy_2d_unit_vector . . . . . . . . . . . . . . . . . . 692
9.2.4 Tracer un repre : repere_2d frame_2d . . . . . . . 693
9.2.5 Effacer les points dfinis par TX et TY . . . . . . . . . . . 693
9.2.6 Avoir du papier point : papier_pointe dot_paper 693
9.2.7 Avoir du papier avec des lignes : papier_ligne
line_paper . . . . . . . . . . . . . . . . . . . . . . . 694
9.2.8 Avoir du papier quadrill : papier_quadrille
grid_paper . . . . . . . . . . . . . . . . . . . . . . . 694
9.2.9 Avoir du papier triangul : papier_triangule
triangle_paper . . . . . . . . . . . . . . . . . . . . 695
9.2.10 Changer les paramtres de la fentre graphique : xyztrange695
9.3 Les attributs des objets graphiques . . . . . . . . . . . . . . . . . 696
9.3.1 Gnralits sur les attributs . . . . . . . . . . . . . . . . . 696
9.3.2 Les commandes dattributs . . . . . . . . . . . . . . . . . 696
9.3.3 Les paramtres optionnels dattributs . . . . . . . . . . . 697
9.3.4 Mettre une lgende : legende . . . . . . . . . . . . . . 699

30

TABLE DES MATIRES


9.3.5

Les commandes daffichage : display color affichage


couleur . . . . . . . . . . . . . . . . . . . . . . . . . . 702
9.4 Comment dfinir un objet gomtrique sans le tracer : nodisp . . 706
9.5 Comment dfinir et tracer sans nom, un objet gomtrique . . . . 707
9.6 Comment dfinir et tracer un objet gomtrique avec son nom . . 707
9.7 Comment lire et crer une image . . . . . . . . . . . . . . . . . . 708
9.7.1 Quest-ce quune image ? . . . . . . . . . . . . . . . . . . 708
9.7.2 Pour lire une image : readrgb . . . . . . . . . . . . . . 709
9.7.3 Pour recrer ou crer une image : writergb . . . . . . . 709
9.8 Comment faire une dmonstration : assume . . . . . . . . . . . 710
9.9 Les points en gomtrie plane . . . . . . . . . . . . . . . . . . . 711
9.9.1 Les points et les nombres complexes . . . . . . . . . . . . 711
9.9.2 Le point en gomtrie plane : point . . . . . . . . . . . 711
9.9.3 Dfinir au hasard un point 2-d : point2d . . . . . . . . 713
9.9.4 Le point en polaire en gomtrie plane : polar_point
point_polaire . . . . . . . . . . . . . . . . . . . . . 713
9.9.5 Un des points dintersection de deux objets gomtriques :
single_inter inter_unique inter_droite
line_inter . . . . . . . . . . . . . . . . . . . . . . . 713
9.9.6 Les points dintersection de deux objets gomtriques :
inter . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
9.9.7 Orthocentre dun triangle : orthocenter orthocentre716
9.9.8 Le milieu dun segment : midpoint milieu . . . . . 716
9.9.9 Lisobarycentre de n points : isobarycenter
isobarycentre . . . . . . . . . . . . . . . . . . . . . 716
9.9.10 Point dfini comme barycentre de n points : barycenter
barycentre . . . . . . . . . . . . . . . . . . . . . . . 717
9.9.11 Le centre dun cercle : centre center . . . . . . . . 718
9.9.12 Les sommets dun polygone : vertices vertices_abc
sommets sommets_abc . . . . . . . . . . . . . . . . 718
9.9.13 Les sommets dun polygone : vertices_abca sommets_abca719
9.9.14 Point sur un objet gomtrique : element . . . . . . . . 719
9.10 Les droites en gomtrie plane . . . . . . . . . . . . . . . . . . . 721
9.10.1 La droite et la droite oriente en gomtrie plane : line
droite . . . . . . . . . . . . . . . . . . . . . . . . . . 721
9.10.2 La demi-droite en gomtrie plane : half_line demi_droite722
9.10.3 Le segment en gomtrie plane : segment . . . . . . . . 722
9.10.4 Le segment : Line . . . . . . . . . . . . . . . . . . . . . 723
9.10.5 Le vecteur en gomtrie plane : vector vecteur . . . 723
9.10.6 Les droites parallles : parallel parallele . . . . 724
9.10.7 Les droites perpendiculaires en 2-d : perpendicular
perpendiculaire . . . . . . . . . . . . . . . . . . . 724
9.10.8 Les tangentes un objet gomtrique plan : tangent . . 725
9.10.9 La mdiane dun triangle issue dun sommet : median_line
mediane . . . . . . . . . . . . . . . . . . . . . . . . . . 725
9.10.10 La hauteur dun triangle issue dun sommet : altitude
hauteur . . . . . . . . . . . . . . . . . . . . . . . . . . 726
9.10.11 La mdiatrice dun segment : perpen_bisector mediatrice726

TABLE DES MATIRES

9.11

9.12

9.13

9.14

9.15

9.16

9.17

31

9.10.12 La bissectrice intrieure dun angle : bisector bissectrice726


9.10.13 La bissectrice extrieur dun angle : exbisector exbissectrice727
Les triangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
9.11.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . 727
9.11.2 Le triangle quelconque : triangle . . . . . . . . . . . 727
9.11.3 Le triangle isocle : isosceles_triangle triangle_isocele728
9.11.4 Le triangle rectangle : right_triangle triangle_rectangle728
9.11.5 Le triangle quilatral : equilateral_triangle triangle_equilateral729
Les quadrilatres . . . . . . . . . . . . . . . . . . . . . . . . . . 729
9.12.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . 730
9.12.2 Le carr : square carre . . . . . . . . . . . . . . . . 730
9.12.3 Le losange : rhombus losange . . . . . . . . . . . . 730
9.12.4 Le rectangle : rectangle . . . . . . . . . . . . . . . . 731
9.12.5 Le paralllogramme : parallelogram parallelogramme732
9.12.6 Le quadrilatre : quadrilateral quadrilatere . 733
Les polygones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
9.13.1 Lhexagone : hexagon hexagone . . . . . . . . . . . 733
9.13.2 Les polygones rguliers : isopolygon isopolygone 734
9.13.3 Le polygone : polygon polygone . . . . . . . . . . . 735
9.13.4 La ligne polygonale : open_polygon polygone_ouvert735
9.13.5 Lenveloppe convexe de points du plan : convexhull . 735
Les cercles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
9.14.1 Le cercle et ses arcs : circle cercle . . . . . . . . . 736
9.14.2 Les arcs de cercle : arc . . . . . . . . . . . . . . . . . . 737
9.14.3 Le cercle (compatibilit TI) : Circle . . . . . . . . . . . 738
9.14.4 Le cercle inscrit : incircle inscrit . . . . . . . . . 739
9.14.5 Le cercle circonscrit : circumcircle circonscrit 739
9.14.6 Le cercle exinscrit : excircle exinscrit . . . . . . 739
9.14.7 Puissance dun point par rapport un cercle : powerpc
puissance . . . . . . . . . . . . . . . . . . . . . . . . 739
9.14.8 Axe radical de deux cercles : radical_axis axe_radical740
Les coniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
9.15.1 Lellipse : ellipse . . . . . . . . . . . . . . . . . . . . 740
9.15.2 Lhyperbole : hyperbola hyperbole . . . . . . . . 741
9.15.3 La parabole : parabola parabole . . . . . . . . . . 741
Les mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742
9.16.1 Laffixe dun point ou dun vecteur : affix affixe . . 742
9.16.2 Labscisse dun point ou dun vecteur : abscissa abscisse743
9.16.3 Lordonne dun point ou dun vecteur : ordinate ordonnee744
9.16.4 Les coordonnes dun point, dun vecteur ou dune droite :
coordinates coordonnees . . . . . . . . . . . . . 744
9.16.5 Les coordonnes rectangulaire dun point : rectangular_coordinates
coordonnees_rectangulaires . . . . . . . . . . 747
9.16.6 Les coordonnes polaire dun point : polar_coordinates
coordonnees_polaires . . . . . . . . . . . . . . . 747
9.16.7 Lquation cartsienne dun objet gomtrique : equation 747
9.16.8 Lquation paramtrique dun objet gomtrique : parameq748
Les mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748

32

TABLE DES MATIRES


9.17.1 Remarques gnrales sur laffichage des mesures . . . . . 748
9.17.2 La longueur dun segment et distance entre les deux objets
gomtriques : distance longueur . . . . . . . . . 749
9.17.3 La longueur dun segment et son affichage : distanceat
distanceen et distanceatraw distanceenbrut 750
9.17.4 Le carr de la longueur dun segment : distance2 longueur2752
9.17.5 La mesure dun angle : angle . . . . . . . . . . . . . . . 752
9.17.6 La mesure dun angle et son affichage : angleat angleen
et angleatraw angleenbrut . . . . . . . . . . . . 753
9.17.7 Reprsentation graphique de laire dun polygone : tracer_aire
graphe_aire aire_graphe plotarea areaplot754
9.17.8 Aire dun polygone : area aire . . . . . . . . . . . . 755
9.17.9 Laire dun polygone et son affichage : areaat aireen
et areaatraw aireenbrut . . . . . . . . . . . . . . 755
9.17.10 Primtre dun polygone : perimeter perimetre . . 757
9.17.11 Primtre dun polygone et son affichage :perimeterat
perimetreen et perimeteratraw perimetreenbrut758
9.17.12 Pente dune droite : slope pente . . . . . . . . . . . . 759
9.17.13 Pente dune droite et son affichage : slopeat, penteen
et slopeatraw, penteenbrut . . . . . . . . . . . 760
9.17.14 Avoir comme rponse la valeur dune mesure affiche :
extract_measure, extraire_mesure . . . . . . 762
9.17.15 Le rayon dun cercle : radius rayon . . . . . . . . . 762
9.17.16 La longueur dun vecteur : abs . . . . . . . . . . . . . . 763
9.17.17 Langle dun vecteur avec Ox : arg . . . . . . . . . . . . 763
9.17.18 Pour normaliser un nombre complexe : normalize . . . 763
9.18 Les transformations . . . . . . . . . . . . . . . . . . . . . . . . . 763
9.18.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . 763
9.18.2 La translation : translation . . . . . . . . . . . . . . 764
9.18.3 La symtrie droite et la symtrie point : reflection
symetrie . . . . . . . . . . . . . . . . . . . . . . . . . 765
9.18.4 La rotation : rotation . . . . . . . . . . . . . . . . . . 766
9.18.5 Lhomothtie : homothety homothetie . . . . . . . 766
9.18.6 La similitude : similarity similitude . . . . . . 767
9.18.7 Linversion : inversion . . . . . . . . . . . . . . . . . 768
9.18.8 La projection orthogonale : projection . . . . . . . . 769
9.19 Les proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
9.19.1 Savoir si 1 point est sur un objet graphique : is_element
est_element . . . . . . . . . . . . . . . . . . . . . . 770
9.19.2 Savoir si 3 points sont aligns : is_collinear est_aligne771
9.19.3 Savoir si 4 points sont cocycliques : is_concyclic est_cocyclique771
9.19.4 Savoir si 1 point est lintrieur dun polygone ou dun
cercle : is_inside est_dans . . . . . . . . . . . . . 771
9.19.5 Savoir si on a un triangle quilatral : is_equilateral
est_equilateral . . . . . . . . . . . . . . . . . . . 772
9.19.6 Savoir si on a un triangle isocle : is_isosceles est_isocele773
9.19.7 Savoir si on a un triangle rectangle ou si on a un rectangle :
is_rectangle est_rectangle . . . . . . . . . . 773

TABLE DES MATIRES

33

9.19.8 Savoir si on a un carr : is_square est_carre . . . 774


9.19.9 Savoir si on a un losange : is_rhombus est_losange 775
9.19.10 Savoir si on a un paralllogramme : is_parallelogram
est_parallelogramme . . . . . . . . . . . . . . . . 776
9.19.11 Savoir si 2 droites sont parallles : is_parallel est_parallele777
9.19.12 Savoir si 2 droites 2-d sont perpendiculaires : is_perpendicular
est_perpendiculaire . . . . . . . . . . . . . . . . 777
9.19.13 Savoir si 2 cercles sont orthogonaux : is_orthogonal
est_orthogonal . . . . . . . . . . . . . . . . . . . . 777
9.19.14 Savoir si des lments sont conjugus : is_conjugate
est_conjugue . . . . . . . . . . . . . . . . . . . . . . 778
9.19.15 Savoir si 4 points forment un division harmonique : is_harmonic
est_harmonique . . . . . . . . . . . . . . . . . . . . 779
9.19.16 Ces droites sont en faisceau ? is_harmonic_line_bundle
est_faisceau_droite . . . . . . . . . . . . . . . . 780
9.19.17 Ces cercles sont-ils en faisceau : is_harmonic_circle_bundle
est_faisceau_cercle . . . . . . . . . . . . . . . . 780
9.20 La division harmonique, ples et polaires . . . . . . . . . . . . . 780
9.20.1 Point divisant un segment dans le rapport k : division_point
point_div . . . . . . . . . . . . . . . . . . . . . . . . 780
9.20.2 Le birapport de 4 points aligns : cross_ratio birapport781
9.20.3 Division harmonique : harmonic_division div_harmonique781
9.20.4 Le conjugu harmonique : harmonic_conjugate conj_harmonique782
9.20.5 Ple et polaire : pole et polar polaire . . . . . . . 782
9.20.6 Polaire rciproque : reciprocation polaire_reciproque783
9.21 Les lieux et les enveloppes . . . . . . . . . . . . . . . . . . . . . 783
9.21.1 Les lieux : locus lieu . . . . . . . . . . . . . . . . . 783
9.21.2 Les enveloppes : envelope enveloppe . . . . . . . . 785
9.21.3 La trace dun objet gomtrique : trace . . . . . . . . . 786
10 Les fonctions de gomtrie 3-d
787
10.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
10.2 Les angles dEuler . . . . . . . . . . . . . . . . . . . . . . . . . 788
10.3 Les axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
10.3.1 Tracer les vecteurs unitaires : vecteur_unitaire_Ox_3d
Ox_3d_unit_vector, vecteur_unitaire_Oy_3d
Oy_3d_unit_vector, vecteur_unitaire_Oz_3d
Oz_3d_unit_vector . . . . . . . . . . . . . . . . . . 788
10.3.2 Tracer un repre : repere_3d frame_3d . . . . . . . 789
10.4 Les points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
10.4.1 Dfinir un point 3-d : point . . . . . . . . . . . . . . . 790
10.4.2 Dfinir un point 3-d au hasard : point3d . . . . . . . . 790
10.4.3 Un des points dintersection de deux objets gomtriques :
single_inter line_inter inter_unique inter_droite790
10.4.4 Les points dintersection de deux objets gomtriques :
inter . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
10.4.5 Le milieu dun segment : midpoint milieu . . . . . 793
10.4.6 Lisobarycentre de n points : isobarycenter isobarycentre793

34

TABLE DES MATIRES


10.4.7 Point dfini comme barycentre de n points : barycenter
barycentre . . . . . . . . . . . . . . . . . . . . . . . 793
10.5 Les lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
10.5.1 Dfinir une droite 3-d : line droite . . . . . . . . . . 794
10.5.2 Dfinir une droite oriente en 3-d : line droite . . . . 795
10.5.3 La demi-droite en 3-d : half_line demi_droite . . 795
10.5.4 Le segment en 3-d : segment . . . . . . . . . . . . . . . 795
10.5.5 Le vecteur en 3-d : vecteur . . . . . . . . . . . . . . . 796
10.5.6 Plan et droites parallles : parallel parallele . . . 797
10.5.7 Plans (ou droites) perpendiculaires : perpendicular
perpendiculaire . . . . . . . . . . . . . . . . . . . 798
10.5.8 Droite orthogonale un plan et plan orthogonal une droite :
orthogonal . . . . . . . . . . . . . . . . . . . . . . . 798
10.5.9 La perpendiculaire commune deux droites 3-d : common_perpendicular
perpendicu- laire_commune . . . . . . . . . . . 799
10.6 Les plans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
10.6.1 Le plan : plane plan . . . . . . . . . . . . . . . . . . 799
10.6.2 Le plan mdiateur : perpen_bisector mediatrice 800
10.6.3 Le plan tangent : tangent . . . . . . . . . . . . . . . . 800
10.6.4 Plan orthogonal une droite : orthogonal . . . . . . . 801
10.6.5 Plan perpendiculaire un plan : perpendicular perpendiculaire801
10.7 Les triangles dans lespace . . . . . . . . . . . . . . . . . . . . . 801
10.7.1 Le triangle quelconque dans lespace : triangle . . . . 801
10.7.2 Le triangle isocle dans lespace : isosceles_triangle
triangle_isocele . . . . . . . . . . . . . . . . . . 801
10.7.3 Le triangle rectangle dans lespace : triangle_rectangle803
10.7.4 Le triangle quilatral dans lespace : equilateral_triangle
triangle_equilateral . . . . . . . . . . . . . . . 804
10.8 Les quadrilatres dans lespace . . . . . . . . . . . . . . . . . . . 805
10.8.1 Le carr dans lespace : square carre . . . . . . . . . 805
10.8.2 Le losange dans lespace : rhombus losange . . . . . 806
10.8.3 Le rectangle dans lespace : rectangle . . . . . . . . . 807
10.8.4 Le paralllogramme dans lespace : parallelogram parallelogramme809
10.8.5 Les quadrilatres quelconques dans lespace : quadrilateral
quadrilatere . . . . . . . . . . . . . . . . . . . . . . 809
10.9 Les polygones dans lespace . . . . . . . . . . . . . . . . . . . . 810
10.9.1 Lhexagone : hexagon hexagone . . . . . . . . . . . 810
10.9.2 Les polygones rguliers dans lespace : isopolygon isopolygone810
10.9.3 Les polygones quelconques dans lespace : polygon polygone811
10.9.4 Ligne polygonale dans lespace : open_polygon polygone_ouvert812
10.10Les cercles dans lespace : circle cercle . . . . . . . . . . . 812
10.11Les coniques dans lespace . . . . . . . . . . . . . . . . . . . . . 813
10.11.1 Lellipse dans lespace : ellipse . . . . . . . . . . . . 813
10.11.2 Lhyperbole dans lespace : hyperbola hyperbole . 813
10.11.3 La parabole dans lespace : parabola parabole . . . 813
10.12Les mesures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
10.12.1 Labscisse dun point 3-d : abscissa abscisse . . . 814
10.12.2 Lordonne dun point 3-d : ordinate ordonnee . . 814

TABLE DES MATIRES

35

10.12.3 La cote dun point 3-d : cote . . . . . . . . . . . . . . . 814


10.12.4 Les coordonnes dun point, dun vecteur ou dune droite
3-d : coordinates coordonnees . . . . . . . . . . 814
10.12.5 Lquation cartsienne dun objet gomtrique : equation 816
10.12.6 Lquation paramtrique dun objet gomtrique : parameq817
10.12.7 La longueur dun segment : distance longueur . . . 817
10.12.8 Le carr de la longueur dun segment : distance2 longueur2818
10.12.9 La mesure dun angle : angle . . . . . . . . . . . . . . . 818
10.13Les proprits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
10.13.1 Savoir si 1 objet gomtrique est sur un objet graphique :
is_element est_element . . . . . . . . . . . . . . 819
10.13.2 Savoir si des points ou /et des droites sont coplanaires :
is_coplanar est_coplanaire . . . . . . . . . . 819
10.13.3 Savoir si droites ou /et plans sont parallles is_parallel
est_parallele . . . . . . . . . . . . . . . . . . . . . 820
10.13.4 Savoir si des droites ou/et plans sont perpendiculaires is_perpendicular
est_perpendiculaire . . . . . . . . . . . . . . . . 821
10.13.5 Orthogonalit de 2 droites ou 2 sphres : is_orthogonal
est_orthogonal . . . . . . . . . . . . . . . . . . . . 822
10.13.6 Savoir si 3 points sont aligns : is_collinear est_aligne822
10.13.7 Savoir si 4 points sont cocycliques : is_concyclic est_cocyclique823
10.13.8 Savoir si 5 points sont cospheriques : is_cospheric
est_cospherique . . . . . . . . . . . . . . . . . . . 823
10.13.9 Savoir si on a un triangle quilatral : is_equilateral
est_equilateral . . . . . . . . . . . . . . . . . . . 824
10.13.10Savoir si on a un triangle isocle : is_isosceles est_isocele824
10.13.11Savoir si on a un triangle rectangle ou si on a un rectangle :
est_rectangle . . . . . . . . . . . . . . . . . . . . . 825
10.13.12Savoir si on a un carr : is_square est_carre . . . 825
10.13.13Savoir si on a un losange : is_rhombus est_losange 826
10.13.14Savoir si on a un paralllogramme : is_parallelogram
est_parallelogramme . . . . . . . . . . . . . . . . 827
10.14Les transformations . . . . . . . . . . . . . . . . . . . . . . . . . 827
10.14.1 Gnralits . . . . . . . . . . . . . . . . . . . . . . . . . 827
10.14.2 La translation : translation . . . . . . . . . . . . . . 828
10.14.3 La symtrie par rapport un plan, une droite ou un point :
reflection symetrie . . . . . . . . . . . . . . . . 829
10.14.4 La rotation : rotation . . . . . . . . . . . . . . . . . . 830
10.14.5 Lhomothtie : homothety homothetie . . . . . . . 831
10.14.6 La similitude : similarity similitude . . . . . . 832
10.14.7 Linversion : inversion . . . . . . . . . . . . . . . . . 833
10.14.8 La projection orthogonale : projection . . . . . . . . 834
10.15Les surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
10.15.1 Le cne : cone . . . . . . . . . . . . . . . . . . . . . . . 835
10.15.2 Le demi-cne : half_cone demi_cone . . . . . . . . 835
10.15.3 Le cylindre : cylinder cylindre . . . . . . . . . . 835
10.15.4 La sphre : sphere . . . . . . . . . . . . . . . . . . . . 835
10.15.5 Surface dfinie par une fonction : funcplot . . . . . . . 836

36

TABLE DES MATIRES


10.15.6 Surface dfinie par une quation paramtrique : paramplot836
10.16Les solides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
10.16.1 Le cube : cube . . . . . . . . . . . . . . . . . . . . . . . 836
10.16.2 Le ttradre : tetrahedron pyramid tetraedre
pyramide . . . . . . . . . . . . . . . . . . . . . . . . . 837
10.16.3 Le paralllpipde : parallelepiped parallelepipede837
10.16.4 Le prisme : prism prisme . . . . . . . . . . . . . . . 838
10.16.5 Les polydres : polyhedron polyedre . . . . . . . 838
10.16.6 Les faces : faces . . . . . . . . . . . . . . . . . . . . . 838
10.16.7 Les artes : line_segments aretes . . . . . . . . . 838
10.17Les solides de Platon . . . . . . . . . . . . . . . . . . . . . . . . 839
10.17.1 : centered_tetrahedron tetraedre_centre . 839
10.17.2 : centered_cube cube_centre . . . . . . . . . . 839
10.17.3 Loctadre : octahedron octaedre . . . . . . . . . 840
10.17.4 Le dodecadre : dodecahedron dodecaedre . . . . 841
10.17.5 Licosadre : icosahedron icosaedre . . . . . . . 841
10.18Figures et preuves dexercices avec Xcas . . . . . . . . . . . . . 842
10.18.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 842
10.18.2 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 843
10.18.3 Exercice 3 prolongement de lexercice 2 . . . . . . . . . . 844

11 Utilisation de giac lintrieur dun programme


847
11.1 Utilisation dans un programme C++ . . . . . . . . . . . . . . . . 847
11.2 Pour dfinir de nouvelles fonctions de giac . . . . . . . . . . . . 848

Index
=<, 97, 263, 474, 662, 664, 665
Note_index 1 , 55
==, 171
@, 263, 273
=>, 94, 164, 263, 312, 662, 664
@@, 263, 274
=>+, 379
k, 172
>, 171
, 243, 278
>=, 171
*, 269
?, 81, 95
*, 312
[[]], 175, 415, 424
+, 263, 268
[], 175, 409, 413, 415, 416, 419, 423,
+, 312
424, 430
-, 268
#, 680
/, 269
$, 263, 280, 416
(), 415
%, 193, 263, 387
*, 269, 389, 459, 469
% , 398
*=, 98
+, 180, 181, 263, 268, 388, 419, 456, % 0, 194
% {% }, 420
468
%%%{%%%}, 326
+,-,*,/,, 215, 234
%e, 171
+infinity, 171
%i, 171
415
%pi, 171
-, 263, 268, 389, 457, 468
&*, 469
-=, 98
&&, 172
->, 263, 265
&, 470
-inf, 171
, 263, 392, 470
-infinity, 171
_, 163, 168
.*, 458, 471
|, 253
.+, 456, 468
!, 172, 204
.-, 457, 468
!=, 171
.., 408, 416
", 175
./, 458, 471
"\n", 176
., 471
:=, 474
/, 263, 269, 391, 393, 495
{}, 654
//, 654
/=, 98
invztrans, 572
:+=, 98
: ;, 106
a2q, 535
:=, 94, 263, 265, 662, 664
abcuv, 361
<, 171
about, 104, 317
<=, 171
abs, 235, 269, 763
1. Dans lindex, selon le style on a une abscissa, 743, 814
abscisse, 743, 814
commande ou une option ou une valeur
37

38

INDEX

accumulate_head_tail, 584
arcsin, 270, 303
acos, 270, 303
arcsinh, 270
acos2asin, 306
arctan, 270, 303
acos2atan, 306
arctanh, 270
acosh, 270
area, 126, 755
acot, 303
areaat, 755
acsc, 303
areaatraw, 755
add, 443
areaplot, 127, 754
additionally, 104
aretes, 838
additionally, 100, 104
arg, 235, 763
adjoint_matrix, 521
args, 683
affichage, 696, 702, 748
as_function_of, 274
affichage, 697, 703, 705
asc, 178
afficher, 660
asec, 303
affix, 742
asin, 270, 303
affixe, 742
asin2acos, 307
aire, 126, 755
asin2atan, 307
aire_graphe, 127, 754
asinh, 270
aireen, 748, 755
assign, 669
aireenbrut, 748, 755
assume, 100, 316, 710
Airy_Ai, 227
at, 424, 472
Airy_Bi, 227
atan, 270, 303
alea, 206, 605, 606, 608, 609
atan2acos, 307
algsubs, 256
atan2asin, 307
algvar, 575
atanh, 270
alog10, 270
atrig2ln, 311
alors, 670
augment, 431, 487
altitude, 726
autosimplify, 252
and, 172
axe_radical, 740
angle, 752, 818
axes, 697
angle_radian, 79
bareiss, 495
angleat, 753
barycenter, 237, 717, 793
angleatraw, 753
barycentre, 237, 717, 793
angleen, 753
base, 183, 313
angleenbrut, 753
basis, 498
animate, 140
begin, 651, 654
animate3d, 140
bernoulli, 212
animation, 141
Beta, 225
ans, 106
betad, 627
append, 431
betad_cdf, 628
apply, 447
betad_icdf, 628
approx, 146
bezier, 133
approx_mode, 79
bezout_entier, 199
arc, 737
Binary, 264
arccos, 270, 303
binomial, 205, 613
arccosh, 270
binomial,
452, 464
archive, 99
binomial_cdf, 614
arcLen, 295

INDEX
binomial_icdf, 614
birapport, 781
bisection_solver, 156
bisector, 726
bissectrice, 726
bitand, 174
bitor, 174
bitxor, 174
black, 702
blanc, 702
bleu, 702
BlockDiagonal, 467
blockmatrix, 485
blue, 702
border, 489
bounded_function, 298
boxwhisker, 460, 492, 584
break, 683
breakpoint, 686
brent_solver, 157
c1oc2, 232
c1op2, 232
camembert, 589
canonical_form, 244
cap_flat_line, 705
cap_round_line, 705
cap_square_line, 705
Capture ecran, 64
carre, 730, 805
cas_setup, 72, 75
case, 672
cat, 180, 181
catch, 689
cauchy, 630
cauchy_cdf, 631
cauchy_icdf, 632
cauchyd, 630
cauchyd_icdf, 632
cdf, 638
ceil, 269
ceiling, 269
Celsius2Fahrenheit, 166
center, 718
center2interval, 410
centered_cube, 839
centered_tetrahedron, 839
centre, 718

39
cercle, 736, 812
cFactor, 248
cfactor, 248
cfsolve, 160
changebase, 497
char, 179
charpoly, 519
chinrem, 362
chisquare, 623
chisquare_cdf, 623
chisquare_icdf, 624
chisquared, 623
chisquaret, 642
cholesky, 528
chrem, 201
Ci, 218
Circle, 738
circle, 736, 812
circonscrit, 739
circumcircle, 739
classes, 583
ClrDraw, 92
ClrGraph, 84, 92, 653, 685
ClrIO, 660
coeff, 332
coeffs, 332
col, 480
col, 439, 441-443, 489-491
colDim, 494
coldim, 494
collect, 337
colNorm, 507
colnorm, 507
color, 696, 702
color, 157, 697, 703, 705
colspace, 499
colSwap, 485
colswap, 485
comb, 205
combine, 303
comDenom, 379
comment, 87, 654
common_perpendicular, 799
companion, 522
compare, 659
complex_mode, 79
complex_variables, 79
complexroot, 380

40

INDEX

concat, 431, 487


cpartfrac, 380
COND, 512
crationalroot, 386
cond, 512
cross, 460
cone, 835
cross_point, 704
confrac, 209, 313
cross_ratio, 781
conic, 537
crossP, 460
conique, 537
crossproduct, 460
conique_reduite, 537
csc, 303
conj, 236
cSolve, 548
conj_harmonique, 782
csolve, 548
conjugate_gradient, 536
CST, 94
conserver_pivot, 550
cube, 836
cont, 687
cube_centre, 839
contains, 414, 439
cumSum, 177, 444, 469
content, 335
cumulated_frequencies, 586
continue, 684
curl, 543
contourplot, 128
curvecurve, 152
convert, 164, 183, 184, 312, cyan, 702
332, 343, 344, 414
cycle2perm, 230
convertir, 164, 183, 184, 312,
cycleinv, 233
343, 344
cycles2permu, 229
convexhull, 735
cyclotomic, 363
coordinates, 744, 814
cylinder, 835
coordonnees, 744, 814
cylindre, 835
coordonnees_polaires, 747
cZzeros, 249
coordonnees_rectangulaires,
dash_line, 705
747
dashdot_line, 705
copy, 663, 665
dashdotdot_line, 705
CopyVar, 99
de, 673
correlation, 591
correlation, 597, 599, 601, 603,debug, 654, 685
default, 672
605
degree, 333
cos, 303
delcols, 480
cos, 303, 312
Delete, 264
cos2sintan, 309
DelFold, 109
cosh, 270
delrows, 480
cot, 303
deltalist, 454
cote, 814
DelVar, 105
couleur, 696, 702
demi_cone, 835
couleur, 697, 703, 705
demi_droite, 722, 795
count, 439, 489
denom, 208, 378
count_eq, 441, 490
densityplot, 129
count_inf, 442, 491
derive, 278, 541
count_sup, 443, 491
deriver, 278, 541
courbe_parametrique, 132, 133
deSolve, 558
courbe_polaire, 134
desolve, 558
covariance, 590
covariance_correlation, 593 Det, 401

INDEX

41

det, 395, 495


dotprod, 459
det_minor, 496
DrawFunc, 117
developper, 243
DrawParm, 132, 133
developper_transcendant, 301 DrawPol, 134
dfc, 209
DrawSlp, 125
dfc2f, 211
droit, 177, 409, 413, 426, 545
diag, 467
droite, 122, 721, 794, 795
diagramme_batons, 588
droite_tangente, 123
diff, 278, 541
DrwCtour, 128
diff, 312
dsolve, 558
DIGITS, 76, 146, 213
e, 171
Digits, 76, 146, 213
e2r, 329, 331
dim, 493
ecart_type, 460, 492, 578
Dirac, 221
ecart_type_population, 460,
Disp, 653, 660
579
DispG, 653, 684
Edit, 64
DispHome, 653, 685
egcd, 360
display, 696, 702
egv, 514
display, 697, 703
egvl, 514
distance, 749, 817
Ei, 217
distance2, 752, 818
eigenvals, 513
distanceat, 750
eigenvalues, 513
distanceatraw, 750
eigenvectors, 514
distanceen, 750
eigenvects, 514
distanceenbrut, 750
eigVc, 514
div, 192
eigVl, 514
div_harmonique, 781
element, 100, 719
divergence, 542
elif, 671
divide, 354
eliminate, 256
divis, 349
ellipse, 740, 813
division_point, 780
else, 670, 671
divisors, 191
end, 651, 654, 670, 671
divpc, 403
envelope, 785
dnewton_solver, 159
enveloppe, 785
dodecaedre, 841
epaisseur, 696
dodecahedron, 841
epaisseur, 697
DOM_COMPLEX, 657
epaisseur_ligne_1, 706
DOM_FLOAT, 657
epaisseur_ligne_2, 706
DOM_FUNC, 657
epaisseur_ligne_8, 706
DOM_IDENT, 657
epaisseur_point_1, 704
DOM_INT, 657
epaisseur_point_2, 704
DOM_LIST, 657
epaisseur_point_8, 704
DOM_RAT, 657
epsilon, 573
DOM_STRING, 657
epsilon2zero, 573
DOM_SYMBOLIC, 657
equal, 544
dot, 459
equal2diff, 544
dot_paper, 693
equal2list, 544
dotP, 459

42

INDEX

exp2list, 173
equation, 747, 816
equation, 597, 599, 601, 603, exp2pow, 325
605
exp2trig, 308
equilateral_triangle, 729, 804
expand, 243
erase, 83, 84, 92, 691
expexpand, 324
erf, 221
expln, 312
erfc, 222
exponential, 633
ERROR, 690
exponential, 452, 464
error, 690
exponential_cdf, 634
est_aligne, 771, 822
exponential_icdf, 634
est_carre, 774, 825
exponential_regression, 598
est_cocyclique, 771, 823
exponential_regression_plot,
est_conjugue, 778
599
est_coplanaire, 819
exponentiald, 633
est_cospherique, 823
exponentiald_cdf, 634
est_dans, 771
exponentiald_icdf, 634
est_element, 770, 819
EXPR, 658
est_equilateral, 772, 824
expr, 182, 681
est_faisceau_cercle, 780
extract_measure, 762
est_faisceau_droite, 780
extraire_mesure, 762
est_harmonique, 779
ezgcd, 358
est_impair, 195
f2nd, 208, 378
est_inclus, 420
faces, 838
est_isocele, 773, 824
facteurs_premiers, 190
est_losange, 775, 826
Factor, 400
est_orthogonal, 777, 822
factor, 246, 338, 394, 398
est_pair, 194
factor_xn, 335
est_parallele, 777, 820
factorial, 185, 204
est_parallelogramme, 776, 827
factoriser, 246, 338, 394
est_perpendiculaire, 777, 821
factoriser_entier, 189
est_rectangle, 773, 825
factoriser_sur_C, 248
euler, 202
factors, 339
euler_gamma, 171
fadeev, 519
eval, 238, 707
Fahrenheit2Celsius, 166
eval_level, 241
faire, 676
evala, 243
FALSE, 171
evalb, 173
false, 171
evalc, 235
falsepos_solver, 157
evalf, 146, 206, 213, 576
fclose, 679
evalm, 468
fcoeff, 387
even, 194
fdistrib, 243
exact, 206, 576
feuille, 267, 409, 413
exbisector, 727
fft, 321
exbissectrice, 727
fieldplot, 135, 139
excircle, 739
filled, 697, 704
exinscrit, 739
findhelp, 81
exp, 269
fisher, 624
exp, 303, 312

INDEX
fisher, 452, 464
fisher_cdf, 625
fisher_icdf, 625
fisherd, 624
flatten, 423
float2rational, 206, 576
floor, 269
fMax, 296
fMin, 296
fonction_derivee, 277
fopen, 679
for, 673
format, 182
fourier_an, 313
fourier_bn, 314
fourier_cn, 315
fPart, 269
fpour, 673
fprint, 679
frac, 269
fracmod, 393
frame_2d, 693
frame_3d, 789
frames, 140, 697
frequences, 585
frequences_cumulees, 586
frequencies, 585
frobenius_norm, 507
froot, 386
fsi, 670
fsolve, 155, 159
ftantque, 676
fullparfrac, 312
FUNC, 658
funcplot, 117, 836
function_diff, 277
fxnd, 208, 378

Gcd, 188, 357, 400


gcd, 185, 355, 394
gcdex, 360
genpoly, 376
geometric, 629
geometric_cdf, 629
geometric_icdf, 630
getDenom, 208, 377
GetFold, 109
getKey, 656
getNum, 207, 377
getType, 658
GF, 396
giac, 55, 57
gl_z, 697
gl_quaternion, 697
gl_rotation, 697
gl_shownames, 697
gl_texture, 697
gl_x, 697
gl_x_axis_color, 697
gl_x_axis_name, 697
gl_x_axis_unit, 697
gl_xtick, 697
gl_y, 697
gl_y_axis_color, 697
gl_y_axis_name, 697
gl_y_axis_unit, 697
gl_ytick, 697
gl_z_axis_color, 697
gl_z_axis_name, 697
gl_z_axis_unit, 697
gl_ztick, 697
goto, 677
grad, 541
gramschmidt, 536
Graph, 117
graph2tex, 83, 92, 114
Gamma, 223
graph3d2tex, 84, 114
gammad, 626
graphe, 120
gammad_cdf, 626
graphe3d, 121
gammad_icdf, 627
graphe_aire, 127, 754
gauche, 177, 409, 413, 426, graphe_probabiliste, 114
545
graphe_suite, 135, 262
gauss, 535
greduce, 374
gaussjord, 550
green, 702
gaussquad, 152
grid_paper, 694
gbasis, 373
groupermu, 234

43

44
hadamard, 470
half_cone, 835
half_line, 722, 795
halftan, 310
halftan_hyp2exp, 310
halt, 687
hamdist, 175
harmonic_conjugate, 782
harmonic_division, 781
has, 575
hasard, 206, 605, 606, 608,
609
hauteur, 726
head, 177, 426
Heaviside, 220
hermite, 371
hessenberg, 523
hessenberg, 519
hessian, 542
heugcd, 358
hexagon, 733, 810
hexagone, 733, 810
hidden_name, 702
hilbert, 467
histogram, 584
histogramme, 584
hold, 243
homothetie, 766, 831
homothety, 766, 831
horner, 340
hybrid_solver, 159
hybridj_solver, 160
hybrids_solver, 159
hybridsj_solver, 160
hyp2exp, 323
hyperbola, 741, 813
hyperbole, 741, 813
i, 171
i[], 411
iabcuv, 199
ibasis, 498
ibpdv, 292
ibpu, 293
icdf, 638
ichinrem, 199, 200
ichrem, 199, 200
icosaedre, 841

INDEX
icosahedron, 841
id, 269
identity, 463
idivis, 191
idn, 463
iegcd, 199
if, 670, 671
ifactor, 189
ifactors, 190
ifft, 322
IFTE, 95
ifte, 95
igamma, 224
igcd, 185, 355
igcdex, 199
ihermite, 525
ilaplace, 568
im, 235
imag, 235
image, 498
implicitplot, 130
impression, 64
in, 673
in_ideal, 375
incircle, 739
indets, 574
inequationplot, 125
inf, 171
infinity, 171
Input, 655
input, 655
InputStr, 655
inscrit, 739
insmod, 848
inString, 179
Int, 282
int, 282
int, 312
intDiv, 192
integer, 100, 313
integrate, 282
integration, 282
integrer, 282
inter, 715, 792
inter_droite, 713, 790
inter_unique, 713, 790
interactive_odeplot, 138
interactive_plotode, 138

INDEX

45

interp, 346
jacobi_symbol, 204
jaune, 702
intersect, 263, 414, 422
jordan, 517
interval2center, 410
JordanBlock, 467
inv, 393, 395, 495
jusqua, 675
Inverse, 401
jusque, 673
inverse, 395, 495
inversion, 768, 833
keep_pivot, 550
invisible_point, 704
ker, 498
invlaplace, 568
kernel, 498
iPart, 269
kill, 687
iquo, 192
kolmogorovd, 637
iquorem, 194
kolmogorovt, 637, 646
iratrecon, 393
irem, 193
l1norm, 456, 508
is_collinear, 771, 822
l2norm, 456, 508
is_concyclic, 771, 823
label, 677
is_conjugate, 778
labels, 697
is_coplanar, 819
lagrange, 346
is_cospheric, 823
lagrange, 495, 519
is_cycle, 231
laguerre, 371
is_element, 770, 819
laplace, 568
is_equilateral, 772, 824
laplacian, 541
is_harmonic, 779
latex, 83
is_harmonic_circle_bundle, 780
lcm, 189, 359
is_harmonic_line_bundle, 780 lcoeff, 334
is_included, 420
ldegree, 333
is_inside, 771
lef, 177
is_isosceles, 773, 824
left, 409, 413, 426, 545
is_orthogonal, 777, 822
left_rectangle, 126, 127
is_parallel, 777, 820
legend, 696
is_parallelogram, 776, 827 legend, 697, 700
is_permu, 231
legende, 696, 699, 707, 748
is_perpendicular, 777, 821 legende, 697, 700
is_prime, 196
legendre, 370
is_pseudoprime, 195
legendre_symbol, 203
is_rectangle, 773
length, 176, 430
is_rhombus, 775, 826
lgcd, 188
is_square, 774, 825
lhs, 545
ismith, 525
lieu, 783
isobarycenter, 716, 793
ligne_chapeau_carre, 705
isobarycentre, 716, 793
ligne_chapeau_plat, 705
isom, 526
ligne_chapeau_rond, 705
isopolygon, 734, 810
ligne_polygonale, 594
isopolygone, 734, 810
ligne_polygonale_pointee, 595
isosceles_triangle, 728, 801 ligne_tiret, 705
isPrime, 196
ligne_tiret_point, 705
isprime, 196
ligne_tiret_pointpoint, 705
ligne_trait_plein, 705
ithprime, 198

46

INDEX

LU, 531
limit, 298, 300
limite, 298, 300
lu, 530
lin, 324
lvar, 574
Line, 723
M, 64
line, 122, 721, 794, 795
magenta, 702
line_inter, 713, 790
makelist, 451
line_paper, 694
makemat, 488
line_segments, 838
makesuite, 429
line_width_1, 706
makevector, 430
line_width_2, 706
map, 447, 449
line_width_8, 706
maple2mupad, 86
linear_interpolate, 596
maple2xcas, 85
linear_regression, 597
linear_regression_plot, 597 maple_ifactors, 191
maple_mode, 78
lineariser, 324
markov, 639
lineariser_trigo, 304
mat2list, 455
LineHorz, 123
mathml, 85
LineTan, 123
matpow, 518
LineVert, 123
matrix, 464, 488
linfnorm, 508
matrix, 312, 447
linsolve, 554
matrix_norm, 508
LIST, 658
max, 269
list, 332, 344
maxnorm, 455
list2mat, 455
mean, 460, 492, 577
listplot, 595
median, 460, 492, 580
lll, 534
median_line, 725
ln, 269
mediane, 725
ln, 303, 312
mediatrice, 726, 800
lname, 574
member, 438
lncollect, 325
mgf, 637
lnexpand, 324
mid, 177, 425
local, 651
middle_point, 126, 127
locus, 783
midpoint, 413, 716, 793
log, 269
milieu, 413, 716, 793
log, 303
min, 269
log10, 270
logarithmic_regression, 599 minor_det, 495
logarithmic_regression_plot, minus, 263, 422
mkisom, 527
601
mksa, 166
logb, 270
mod, 193, 263, 398
logistic_regression, 603
modgcd, 358
logistic_regression_plot, 605
mods, 193
loi_normale, 619
moustache, 460, 492, 584
longueur, 749, 817
moyenne, 460, 492, 577
longueur2, 752, 818
mRow, 484
losange, 730, 806
mRowAdd, 484
LQ, 529
mul, 445
LSQ, 555

INDEX

47

nullspace, 498
mult_c_conjugate, 236
NUM, 658
mult_conjugate, 244
numer, 207, 377
multinomial, 617
multinomial, 452, 464
octaedre, 840
multiplier_conjugue, 244
octahedron, 840
multiplier_conjugue_complexe,
odd, 195
236
odeplot, 136, 139
mupad2maple, 86
odesolve, 152, 154
mupad2xcas, 86
of, 447
op, 267, 409, 413, 429
ncols, 494
open_polygon, 735, 812
nCr, 205
or, 172
nDeriv, 151
ord, 178
negbinomial, 615
order_size, 403, 404
negbinomial_cdf, 615
ordinate, 744, 814
negbinomial_icdf, 616
ordonnee, 744, 814
NewFold, 108
orthocenter, 716
newList, 451
orthocentre, 716
newMat, 464
orthogonal, 798, 801
newton, 150
Output, 661
newton_solver, 157
output, 661
newtonj_solver, 160
Ox_2d_unit_vector, 692
nextperm, 229
Ox_3d_unit_vector, 788
nextprime, 198
Oy_2d_unit_vector, 692
nInt, 151
Oy_3d_unit_vector, 788
nodisp, 106, 706, 707
Oz_3d_unit_vector, 788
noir, 702
nop, 419
p1oc2, 232
nops, 430
p1op2, 231
norm, 455, 508
pa2b2, 202
normal, 250, 388, 389, 392 pade, 407
normal_cdf, 619
papier_ligne, 694
normal_icdf, 620
papier_pointe, 693
normald, 619
papier_quadrille, 694
normald, 452, 464
papier_triangule, 695
normald_cdf, 619
parabola, 741, 813
normald_icdf, 620
parabole, 741, 813
normalize, 236, 456, 763
parallel, 724, 797
normalize, 135, 138
parallele, 724, 797
normalt, 640
parallelepiped, 837
not, 172
parallelepipede, 837
nPr, 205
parallelogram, 732, 809
nprimes, 197
parallelogramme, 732, 809
nrows, 494
parameq, 748, 817
nSolve, 155
paramplot, 132, 133, 836
nstep, 117, 697
parfrac, 312, 379
nuage_points, 594
pari, 188, 196, 213
part, 258
Nullspace, 499

48

INDEX

partfrac, 379
plotpolar, 134
partfrac, 312, 379
plotseq, 135, 262
pas, 673
plus_point, 704
Pause, 688
pmin, 520
pcar, 519
pmin, 519
pcar_hessenberg, 520
point, 711, 790
pcoef, 342
point, 697
pcoeff, 342
point2d, 713
pente, 759
point3d, 790
pente, 721, 759
point_carre, 704
penteen, 760
point_croix, 704
penteenbrut, 760
point_div, 780
perimeter, 757
point_etoile, 704
perimeterat, 758
point_invisible, 704
perimeteratraw, 758
point_losange, 704
perimetre, 757
point_milieu, 126, 127
perimetreen, 748, 758
point_plus, 704
perimetreenbrut, 748, 758
point_point, 704
perm, 205
point_polaire, 713
perminv, 233
point_triangle, 704
permu2cycles, 229
point_width_1, 704
permu2mat, 230, 530
point_width_2, 704
permuorder, 233
point_width_8, 704
perpen_bisector, 726, 800
poisson, 618
perpendiculaire, 724, 798, 801
poisson, 452, 464
perpendiculaire_commune, 799 poisson_cdf, 618
perpendicular, 724, 798, 801 poisson_icdf, 618
peval, 335
polaire, 782
phi, 202
polaire_reciproque, 783
pi, 171
polar, 782
piecewise, 96
polar_coordinates, 747
pivot, 554
polar_point, 713
plan, 799
polarplot, 134
plan, 136
pole, 782
plane, 799
poly1, 326
plane, 136
poly2symb, 327, 328
plot, 120
polyedre, 838
plot3d, 121
polyEval, 335
plotarea, 127, 754
polygon, 735, 811
plotcontour, 128
polygone, 735, 811
plotdensity, 129
polygone_ouvert, 735, 812
plotfield, 135, 139
polygonplot, 594
plotfunc, 117, 297
polygonscatterplot, 595
plotimplicit, 130
polyhedron, 838
plotinequation, 125
polynom, 312, 332, 343, 344
plotlist, 595
polynomial_regression, 601
plotode, 136, 139
polynomial_regression_plot,
602
plotparam, 132, 133

INDEX
poslbdLMQ, 385
posubLMQ, 384
potential, 543
pour, 673
pow2exp, 325
power_regression, 602
power_regression_plot, 603
powermod, 392
powerpc, 739
powexpand, 325
powmod, 392
prepend, 432
preval, 258
prevperm, 228
prevprime, 198
primpart, 336
print, 660
printpow, 661
prism, 838
prisme, 838
product, 445, 469, 470
produit_scalaire, 459
projection, 769, 834
proot, 161
propFrac, 207
propfrac, 207, 379
Psi, 226
psrgcd, 358
ptayl, 340
puissance, 739
purge, 105, 317
pyramid, 837
pyramide, 837
q2a, 535
QR, 529
qr, 529
quadrant1, 699
quadrant2, 699
quadrant3, 699
quadrant4, 699
quadrilateral, 733, 809
quadrilatere, 733, 809
quadrique, 539
quadrique_reduite, 539
quand, 95
quantile, 460, 492, 582
quartile1, 460, 581

49
quartile3, 460, 582
quartiles, 460, 492, 581
quest, 107
Quo, 351, 398
quo, 350, 390
quorem, 354, 390
quote, 175, 243
r2e, 327, 328
radical_axis, 740
radius, 762
rand, 206, 605, 606, 608, 609
randbinomial, 610
randexp, 612
randmarkov, 639
randMat, 464, 612
randmatrix, 464, 612
randmultinomial, 610
randNorm, 611
randnorm, 611
randperm, 228
randpoisson, 611
randPoly, 344
randpoly, 344
RandSeed, 605
randseed, 605
randvector, 452
rank, 497
ranm, 345, 464, 612
rassembler_trigo, 305
rat_jordan, 515
rational_det, 495
rationalroot, 385
ratnormal, 253
rayon, 762
rdiv, 216
re, 234
read, 109, 678
readrgb, 709
real, 234
realroot, 381
reciprocation, 783
rectangle, 731, 807
rectangle_droit, 126, 127
rectangle_gauche, 126, 127
rectangular_coordinates, 747
red, 702
REDIM, 478

50

INDEX

roots, 342
redim, 482
reduced_conic, 537
rotate, 427
reduced_quadric, 539
rotation, 766, 830
ref, 549
rouge, 702
reflection, 765, 829
round, 269
regroup, 250
row, 480
regrouper, 250
row, 439, 441-443, 489-491
Rem, 353, 399
rowAdd, 484
rem, 352, 390
rowDim, 494
remain, 193
rowdim, 494
remove, 438
rowNorm, 507
rempli, 697, 704
rownorm, 507
reorder, 345
rowspace, 500
repeat, 675
rowSwap, 485
repere_2d, 693
rowswap, 485
repere_3d, 789
Rref, 402
repeter, 675
rref, 395, 550
REPLACE, 479
rsolve, 261
replace, 483
saisir, 655
residue, 406
saisir_chaine, 655
resoudre, 125, 247, 541, 546,
sans_factoriser, 130
669
scalar_product,
459
resoudre_dans_C, 548
scalarProduct, 459
resoudre_systeme_lineaire, 554
SCALE, 484
restart, 106
scale, 484
resultant, 367
SCALEADD, 484
retourne, 651
scaleadd, 484
return, 651
scatterplot, 594
reverse_rsolve, 556
SCHUR, 524
revert, 406
sec, 303
revlist, 427
secant_solver, 158
rhombus, 730, 806
segment, 722, 795
rhombus_point, 704
select, 437
rhs, 545
semi_augment, 486
right, 177, 409, 413, 426, 545
seq, 416, 675
right_rectangle, 126, 127
seq[], 415, 429
right_triangle, 728
seqplot, 135
risch, 284
seqsolve, 259
rm_a_z, 93
series, 404
rm_all_vars, 93
set[], 420
rmbreakpoint, 687
SetFold, 108
rmwatch, 686
shift, 428
romberg, 151
shift_phase, 304
gauss15, 126
Si, 219
rombergm, 126
si, 670
rombergt, 126
sign, 269
root, 216
signature, 233
rootof, 341

INDEX
similarity, 767, 832
sst, 685
similitude, 767, 832
sst_in, 685
simp2, 209, 378
star_point, 704
simplex_reduce, 500
stdDev, 460, 579
simplifier, 251, 306
stddev, 460, 492, 578
simplify, 251, 306
stddevp, 460, 579
simpson, 126
steffenson_solver, 158
simult, 553
sto, 94, 668
sin, 303
Store, 94, 668
sin, 303, 312
STR, 658
sin2costan, 309
string, 181, 682
sincos, 308
string, 312
sincos, 312
student, 621
single_inter, 713, 790
student_cdf, 622
sinh, 270
student_icdf, 622
sinon, 670
studentd, 621
size, 176, 430
studentt, 641
sizes, 430
sturm, 364
slope, 759
sturmab, 364
slope, 721, 759
sturmseq, 365
slopeat, 760
style, 697
slopeatraw, 760
subMat, 481
smod, 193
subs, 254
snedecor, 624
subsop, 428, 476
snedecor_cdf, 625
subst, 253
snedecor_icdf, 625
substituer, 253
snedecord, 624
subtype, 658
solid_line, 705
sum, 285, 443, 469
solve, 125, 247, 541, 546, 669
sum_riemann, 289
sommet, 267, 409, 413
supposons, 100
sommets, 718
suppress, 426
sommets_abc, 718
surd, 269
sommets_abca, 719
SVD, 533
sort, 432
svd, 532
SortA, 435
SVL, 532
sorta, 435
svl, 532
SortD, 436
swapcol, 485
sortd, 436
swaprow, 485
specnorm, 508
switch, 672
sphere, 835
switch_axes, 692
spline, 347
sylvester, 366
split, 245
symb2poly, 329, 331
sq, 269
symetrie, 765, 829
sqrfree, 339
syst2mat, 549
sqrt, 269
table, 462
square, 730, 805
table_fonction, 258, 297
square_point, 704
table_suite, 262
srand, 605

51

52

INDEX

tablefunc, 258, 297


trig, 303
trig2exp, 311
tableseq, 262
trigcos, 312
tail, 177, 426
trigexpand, 304
tan, 303
trigsin, 311
tan, 312
trigtan, 312
tan2cossin2, 309
trn, 497
tan2sincos, 308
TRUE, 171
tan2sincos2, 309
true, 171
tangent, 124, 725, 800
trunc, 269
tangente, 124
truncate, 342
tanh, 270
try, 689
tantque, 676
tsimplify, 304, 326
taux_accroissement, 276
tstep, 697
taylor, 403
type, 657
tchebyshev1, 372
tchebyshev2, 373
ufactor, 167
tcoeff, 334
unapply, 265
tCollect, 305
unarchive, 99
tcollect, 305
unfactored, 130
tetraedre, 837
uniform, 632
tetraedre_centre, 839
uniform_cdf, 632
tetrahedron, 837
uniform_icdf, 633
TeX, 83
uniformd, 632
tExpand, 301
uniformd_cdf, 632
texpand, 301
uniformd_icdf, 633
textinput, 655
union, 263, 413, 421
then, 670
unitV, 236, 456
thickness, 696
unquote, 243
thickness, 697
until, 675
throw, 690
user_operator, 264
time, 60
usimplify, 167
title, 697
ustep, 697
titre, 697
UTPC, 624
tlin, 304
UTPF, 626
trace, 495, 786
UTPN, 621
tracer_aire, 127, 754
UTPT, 623
trames, 140, 697
tran, 494
valuation, 333
translation, 764, 828
vandermonde, 468
transpose, 494
VAR, 658
trapeze, 126, 127
variance, 460, 492, 580
trapezoid, 126, 127
VARS, 93, 109
triangle, 727, 801
VAS, 383
triangle_equilateral, 729, 804
VAS_positive, 384
triangle_isocele, 728, 801 vecteur, 723, 796
triangle_paper, 695
vecteur_unitaire_Ox_2d, 692
triangle_point, 704
vecteur_unitaire_Ox_3d, 788
triangle_rectangle, 728, 803 vecteur_unitaire_Oy_2d, 692

INDEX
vecteur_unitaire_Oy_3d, 788
vecteur_unitaire_Oz_3d, 788
vector, 723
version, 55, 57
vert, 702
vertices, 718
vertices_abc, 718
vertices_abca, 719
vpotential, 543
vstep, 697
WAIT, 689
watch, 686
weibull, 635
weibull_cdf, 635
weibull_icdf, 636
weibulld, 635
weibulld_cdf, 635
weibulld_icdf, 636
when, 95
while, 676
white, 702
widget_size, 74, 75
write, 679
writergb, 709
xor, 172
xstep, 117, 697
xyztrange, 74, 113, 695
yellow, 702
ystep, 117, 697
zeros, 249
Zeta, 227
zip, 450
zstep, 117, 697
ztrans, 571

53

54

INDEX

Pour commencer
0.1
0.1.1

Style de lindex et notations


Notes concernant lindex de ce manuel

Dans lindex de ce document, les commandes de Xcas seront crites avec des
caractres normaux, les options de ces commandes seront crites en italique et les
valeurs de commandes ou doptions seront crites en mode typewriter.
Par exemple :
affichage est une commande,
affichage est une option de commande gomtrique,
bleu est une valeur.

0.1.2

Remarques concernant les notations

Au cours du document ce quil faut taper dans Xcas sera crit en mode typewriter. On tape par exemple :
affichage(droite(0,1+i),bleu)
droite(0,1+i, affichage=bleu)
alors que dans lindex, les commandes, les options des commandes et les valeurs
de ces options seront crites diffremment.
Lorsque lon doit appuyer sur 2 touches en mme temps on reliera ces deux
touches avec +. Par exemple, si on doit appuyer en mme temps sur Alt et sur t
on crira Alt+t.
Lorsque lon veut indiquer le choix faire dans un menu on reliera les diffrents sous-menus avec I. Par exemple, pour indiquer comment ouvrir lcran des
sorties graphiques intermdiaires dun programme on crira soit :
menu Cfg puis Montrer puis DispG ou encore,
CfgIMontrerIDispG

0.2

La librairie giac et ses interfaces sous Unix

giac est la bibliothque C++ de fonctions de calcul formel.


Pour connaitre le numro de la version de giac que vous utilisez, on tape :
version()
On obtient par exemple :
"giac 1.1.0, (c) B. Parisse and R. De Graeve, Institut
Fourier, Universite de Grenoble I"
55

56

INDEX

Sous Unix, on peut utiliser cette bibliothque de calcul formel avec plusieurs interfaces :
Xcas interface qui est une feuille de calcul permettant davoir des niveaux
de diffrentes natures (calcul formel, gomtrie dynamique et formelle, tableur formel, dessin tortue, langage de programmation etc...),
icas ou giac interface en ligne de commande,
texmacs,
emacs,
un programme C++,
un module C++ pour crer de nouvelles fonctions.

0.2.1

Interface Xcas

On tape xcas & on a alors une feuille de calcul avec diffrents menus Fich
Edit Cfg Aide... et diffrents boutons.
Cette interface est dtaille dans :
Linterface Xcas de giac
que lon ouvre en cliquant sur le menu Aide -> Interface.
On va aussi dtailler lutilisation de cette interface ci-aprs (cf 1)

0.2.2

Interface en ligne de commande

Depuis une fentre de commandes, on peut taper directement une commande


avec des quotes et prcde de icas par exemple :
icas 0 factor(1 x^2)0
ou encore taper icas , on obtient :
0 il suffit alors de taper des commandes par exemple :
factor(1 x^2)
on obtient :
(1-x)*(1+x)
1 etc...
ctrl D termine alors la session.
Remarque
On peut aussi taper :
icas nom_de_fichier
pour executer les commandes contenues dans nom_de_fichier. Attention
Sous windows, le programme icas (interface texte de giac) existe mais il est
compliqu mettre en oeuvre en mode interactif car il faut disposer dun programme terminal supportant les entres et sorties console/cran. On ne lutilise
donc quen mode "batch" (par exemple pour faire des tests automatiques). Sous
Mac OS et sous linux, icas fonctionne par contre trs bien.

0.2.3

Interface texmacs

On peut utiliser giac dans une session de texmacs en tapant :


texmacs & puis en cliquant sur licne qui reprsente un cran de moniteur, on
choisit giac. On a alors le symbole dinvite > pour utiliser les fonctions de calcul
formel qui se trouvent dans le menu Giac.
On peut taper diffrentes commandes, mme graphiques, et obtenir la rponse ou

0.2. LA LIBRAIRIE GIAC ET SES INTERFACES SOUS UNIX

57

le graphique, en dessous de la question. Il faut savoir que le pav numrique ne


fonctionne pas toujours bien dans texmacs, et que ^ se tape en se servant de la
touche trma/^.
De plus on peut aussi avoir de laide sur les diffrentes fonctions de giac en tapant ? suivi du nom de la fonction.
Dans texmacs on peut alterner facilement des calculs faits avec giac et des explications : il suffit dcrire les explications en dehors du cadre destin la question
suivante puis, de cliquer nouveau sur licne reprsentant un cran de moniteur
et de choisir giac pour pouvoir utiliser nouveau giac.
Remarque
Il est facile de recopier avec la souris une rponse crite dans texmacs.

0.2.4

Interface emacs

Pour utiliser giac dans emacs, installer mupacs disponible sur :


http://mupacs.sourceforge.net.
Pour utiliser giac lintrieur demacs on tape :
emacs nomdufichier.mu
Il faut obligatoirement mettre .mu, quitte renommer ensuite le fichier.
Cela ouvre une fentre emacs ayant dans ces menus MuPAD.
Dans ce menu MuPAD on slectionne Start MuPAD.
Dans la dernire ligne de emacs (celle tout en bas) vous devez avoir :
Command to start mupad : giac -emacs
sinon, vous faites la modification et vous validez en appuyant sur enter.
Vous pouvez alors faire des calculs en vous servant des fonctions de giac.
Il apparait :
TEXTWIDTH:=79:
// :2: parse error at end of input
79:undef}
Mais il ne faut pas sen proccuper....ca marche !
Les commandes graphiques seront excutes sur un cran Xdvi et le graphique est
traduit en Latex dans casgraph.tex.

0.2.5

Utilisation dans un programme ou un module C++

Pour lutilisation de giac lintrieur dun programme C++ ou pour dfinir


de nouvelles fonctions de giac, vous trouverez des explications au chapitre "Utilisation de giac lintrieur dun programme".

0.2.6

Savoir avec quelle version on travaille : version giac

Pour savoir avec quelle version on travaille, on utilise la commande version


ou giac.
On tape :
version()
Ou on tape :
giac()

58

INDEX

On obtient par exemple :


"giac 0.4.0"

Chapitre 1

Linterface Xcas
1.1
1.1.1

Mise en route de linterface Xcas


Sous Unix

On tape simplement :
xcas &
Remarque utile !
Si sous Linux, Xcas ne rpond plus, tapez dans la fentre xterm :
killall xcas et relancez en tapant xcas & enter. Dans ce cas, il y a eu un
fichier de sauvegarde automatique et lors de la reprise de Xcas on vous demande
si vous voulez lexcuter.

1.1.2

Sous Windows

Utilisez lexplorateur pour aller dans le rpertoire o est install Xcas.


Cliquez sur le fichier xcasnfr.bat.
Tout se passe ensuite presque comme sous Unix lorsquon tape xcas &.

1.1.3

Sous MacOS

Depuis le Finder, double-cliquez sur le fichier xcas_image.dmg.


prsent, double-cliquez sur licne disque Xcas.
Pour lancer Xcas, double-cliquez sur le programme Xcas du disque Xcas.

1.2

Les diffrents niveaux dentre

Cette interface va vous permettre douvrir plusieurs sessions de calculs : ces


sessions ont plusieurs niveaux dentre, sont indpendantes les unes des autres et
peuvent tre plie ou dplie.
Chaque session peut contenir des niveaux dentre numrots qui contiendront :
soit une ligne de commandes pour excuter des commandes de Xcas ou
pour excuter des programmes avec un emplacement pour les sorties intermdiaires qui seront crites en bleu et un emplacement pour la rponse (que
lon obtient si on a valid la commande avec Enter). Lemplacement pour
la rponse est un diteur dexpressions, ou un cran graphique selon la nature
59

60

CHAPITRE 1. LINTERFACE XCAS

de la commande (commande renvoyant une expression ou un graphique).


Lorsquon a, sur un mme niveau, plusieurs commandes separes par un
point virgule ou par une virgule, ces commandes sont faites es unes aprs les
autres et cest la nature de la dernire commande qui dtermine la nature de
la sortie. Par exemple, la rponse la ligne : a:=1;cercle(0,a) sera un
cercle de centre 0 et de rayon 1.
Les instructions print dun programme ou lvaluation du temps dun long
calcul seront crites en bleu. Lvaluation du temps est approximatif, si vous
voulez plus de prcision sur votre temps de calcul, il faut utiliser la commande time qui renvoie le temps mis pour lvaluation en secondes.
time a comme argument une commande et renvoie deux temps (le temps
CPU et le temps chronomt en secondes) sous linux et seulement le temps
CPU sur mac et win.
On tape par exemple :
time(factor(x^10-1))
On obtient en mode rel et sous Linux :
[0.0022,0.0053107029]
On tape par exemple :
time(factor(x^100-1))
On obtient en mode complexe et sous Linux :
[1.93,1.371075654]
Vous remarquerez alors : Temps mis pour lvaluation : 1.93
en vert. Le premier nombre est le temps CPU (temps mis par le processeur
pour faire uniquement ces calculs, en seconde), le deuxime nombre est le
temps mis pour faire le calcul comme si on chronomtrait. Pour les commandes qui donnent un rsultat rapidement, elles sont excutes plusieurs
fois et la moyenne de temps de calcul est renvoye.
On a aussi time() sans argument, qui renvoie le temps de calcul depuis le
dbut de la session, on tape :
time()
On obtient par exemple :
2.37
soit un diteur dexpressions,
soit un niveau de gomtrie 2-d, son cran graphique, ses menus, ses boutons
et ses lignes de commandes,
soit un niveau de gomtrie 3-d, son cran graphique, ses menus, ses boutons
et ses lignes de commandes,
soit un niveau de dessin tortue, son cran graphique, son diteur de programmes et ses lignes de commandes,
soit un tableur et son cran graphique,
soit un diteur de programmes,
soit un commentaire,
soit un regroupement de ces niveaux en un groupe.

Au sein dune mme session, les diffrents niveaux dentre ne sont pas indpendants, par exemple, une variable dfinie dans une ligne de commandes pourra tre
utilise en gomtrie ou dans le tableur.
Lensemble de toutes ces sessions constitue votre espace de travail.
Le niveau actif est celui o se trouve le curseur et le niveau selectionn est obtenu

1.3. QUE VOIT-ON AU DMARRAGE ?

61

quand on clique sur son numro, numro qui scrit alors sur fond noir.
On peut dplacer un niveau ou un groupe de niveau dans une session, ou le recopier
dans une autre session.
Vous pouvez , tout moment insrer un nouveau niveau ou encore changer lentre dun niveau : Enter valide le changement de ce niveau et slectionne lentre
suivante, mais attention les niveaux suivants ne seront pas recalculs. Il est toutefois possible aprs une modification de rexcuter, soit tous les niveaux, soit les
niveaux situs aprs la modification (menu Edit puis Executer session ou
Executer en-dessous).
Il faut savoir quil suffit de faire :
Alt+c pour ouvrir un niveau de type ligne de commentaires,
Alt+e pour ouvrir un niveau de type diteur dxpressions,
Alt+n pour ouvrir un niveau de type ligne de commandes,
Alt+t pour ouvrir un niveau de type tableur,
Alt+p pour ouvrir un niveau de type diteur de programmes.
Alt+g pour ouvrir un niveau de type cran de gomtrie plane,
Alt+h pour ouvrir un niveau de type cran de gomtrie 3,
Alt+d pour ouvrir un niveau de type cran de dessin tortue,

1.3

Que voit-on au dmarrage ?

Vous obtenez au dmarrage louverture dune session avec de haut en bas :


1. La barre du menu gnral Fich Edit Cfg... contenant les fonctions
de Xcas et ce quil faut pour les configurer et pour sauver ou charger une
session de travail.
2. Une ligne des noms de sessions qui contiendra les noms (ou Unnamed si
elles nont pas de noms) de vos diffrentes sessions. Au dmarrage il ny a
quune session qui na pas de nom donc sur cette ligne il y a Unnamed,
3. Un bandeau gnral avec de gauche droite :
Un bouton ? permettant douvrir le sous menu Index du menu Aide.
Il sert aussi de touche de tabulation, car il ouvre le menu Aide lendroit
indiqu par la ligne de commandes o figure le curseur,
Un bouton Save , sur fond rose, servant sauver dans un fichier la session de calcul. Si on clique sur Save , on vous demande la premire
fois un nom de fichier dextension .xws Quand la session a t sauve
le fond du bouton Save devient vert et Unnamed est remplac par le
nom de fichier, par exemple par session1.xws. Notez que les noms
des sessions ont comme extension .xws et cette extension est rajoute
automatiquement si vous lavez oublie.
Un bouton Config : exact real RAD 12 xcas 12.65M ou
Config essai.xws : exact real RAD 12 xcas 12.65M
si on a sauv la session sous le nom essai.xws.
Ce bouton "ligne dtat" ouvre la fentre permettant de configurer le calcul formel et rappelle la configuration choisie : dans lexemple, on est en
mode exact et rel, les angles sont exprims en radian, les calculs numriques sont faits avec 12 chiffres significatifs, le style de programmation
est xcas et enfin les recources en mmoire demandes par le calcul sont

62

CHAPITRE 1. LINTERFACE XCAS


de 12.65M (cest la taille mmoire en Mgabits utilise par Xcas).
Sur cette "ligne dtat", le mode numrique sera not approx et le mode
complexe sera not :
cplx si les variables ne sont pas considres comme complexes (on a
alors re(z)=z et conj(z)=z),
CPLX si les variables sont considres comme complexes (on a alors
re(z)=re(z) et im(z)=im(z) qui seront nots respectivement
R(z) et I(z) dans la rponse).
Notez que ce bouton "ligne dtat" ouvre la fentre de configuration qui
est aussi obtenue partir du menu : CfgIConfiguration du CAS,
Un bouton rouge STOP pour arrter un calcul trop long,
Un bouton Kbd , servant faire apparaitre ou disparaitre un clavier scientifique. On remarquera sur ce clavier :
la touche cmds qui sert faire apparaitre ou disparaitre une barre de
boutons contenant les commandes du CAS, appele bandeau du CAS.
Dans le bandeau, on remarquera la touche kbd qui sert faire apparaitre
ou disparaitre le clavier.
la touche msg , servant faire apparaitre ou disparaitre une fentre de
messages facilement lisible grce sa barre de scroll. Cette fentre vous
donne des messages comme Success pour dire que tout sest bien pass,
ou affiche une aide succinte sur la commande choisie partir du menu
gnral, ou ce quil faut insrer dans votre fichier LATEXpour insrer la
figure sauve, par exemple, sous le nom session1.eps :
Use \includegraphics[width=\textwidth]{session1}
inside your latex document, with header
\usepackage{graphicx}
la touche abc , servant faire apparaitre ou disparaitre un clavier
contenant les lettres en minuscule, par ordre alphabtique, ainsi que
des signes de ponctuation. On notera quen appuyant sur la touche on
obtient un clavier contenant les lettres grecques et quen appuyant sur
la touche Maj transforme le clavier avec des lettres en majuscule.
la touche J qui permet de supprimer ce que lon a slectionn,
la touche coller qui permet de recopier ce que lon a slectionn,
la touche verte - qui sert de touche Enter.
la touche " situ tout en haut droite, permettant de faire disparaitre
le clavier Kbd.
Un bouton times situ tout droite, permettant de fermer la session en
cours. Cela provoquera ventuellement un avertissement si les dernires
modifications nont pas t sauves.
4. Un premier niveau ou les deux premiers niveaux, selon le dmarrage choisi.

1.4
1.4.1

Les menus
Le menu Fich

Il sert la gestion des fichiers : on prendra lhabitude de nommer les fichiers


contenant des fonctions crites en langage Xcas avec des noms se terminant par

1.4. LES MENUS

63

.cxx et les fichiers contenant des scripts (cest dire une suite dinstructions) avec
des noms se terminant par .cas.
Fich a diffrents sous-menus :
Nouvelle session pour ouvrir et crer une nouvelle session. Unnamed
se mettra en surbrillance aprs les noms des sessions dj ouvertes (la surbrillance indique le nom de la session ouverte) et il ne vous reste plus qu
lui donner un nom se terminant par .xws (avec Sauver du menu Fich)
pour pouvoir vous reprer,
Ouvrir ou Alt+o pour ouvrir une nouvelle session et charger une session
sauve prcdemment,
Importer pour ouvrir une session que lon a ralise et sauve soit avec le
logiciel Maple dans un fichier en .mws (veillez utiliser l"ancien" format
de sauvegarde avec Maple 9, 10,...), soit avec lune des calculatrices ti89
ou Voyage200. Xcas rcupre les commentaires et les entres.
On peut alors faire excuter ces entres avec Executer session du
menu Edit de la session, mais il est prfrable de faire une excution pas
pas en validant chaque niveau, afin de voir o il y a des modifications faire,
Inserer pour insrer une session sauve auparavant dans votre session,
Sauver ou Alt+s ou le bouton Save pour sauver cette session (cest
dire tous ses niveaux dentre et de sortie) dans le fichier de nom indiqu
cot du bouton Save. La premire fois on vous demandera le nom du fichier
de sauvegarde qui doit se terminer par .xws. Ce nom remplacera Unnamed
dans la ligne des noms des sessions et sera en surbrillance. Il sinscrira aussi
sur le bouton de configuration cot de Save.
Sauver comme pour sauver en donnant un autre nom au fichier de sauvegarde de la session, ce fichier doit tre un .xws,
Sauver tout pour sauver tout votre espace de travail cest dire toutes
les sessions, ce fichier doit tre un .xws,
Exporter comme pour sauver la session au format texte choisi (soit xcas,
soit maple...)
Fermer sans sauver pour fermer la session en cours sans la sauver,
A propos ouvre la fentre des messages avec ladresse http o vous pouvez vous procurer la dernire version de Xcas ainsi que ladresse mail du
dveloppeur ! (voir aussi le menu AideIInternet)
Imprimer pour imprimer la session en cours, il faut tout dabord choisir
son format dimpression et cocher ou ne pa cocher Paysage en utilisant le
menu CfgI Configuration generale, puis, choisir :
Pre-visualisation pour voir votre session en postscript (on vous
demandera un nom de fichier .ps) ou,
vers imprimante pour imprimer votre session en postscript (on vous
demandera le nom de limprimante) ou,
Previsualiser les niveaux selectionnes pour prvisualiser les niveaux selectionns (on vous demandera un nom de fichier .eps
pour chaque niveau, par exemple niveau3.eps). On pourra ensuite inclure ce fichier dans un texte LATEX en mettant :
dans len-tte :
\usepackage{graphicx}
et dans le texte lendroit dsir :

64

CHAPITRE 1. LINTERFACE XCAS


\includegraphics{niveau3}
LATEX convertit toute la session en un fichier LATEX, qui sera compil et affich,
Capture ecran permet de faire une capture dcran qui sera sauve dans
un fichier de suffixe .eps (par exemple window.eps). On pourra ensuite
inclure ce fichier dans un texte LATEX en mettant :
dans len-tte :
\usepackage{graphicx}
et dans le texte lendroit dsir :
\includegraphics{window}
Quitter ou Alt+q permet de quitter Xcas quand on a termin.

1.4.2

Le menu Edit

Executer session pour recalculer cette session entirement,


Executer en-dessous pour recalculer cette session partir dune entre slectionne,
Enlever les reponses pour supprimer les rponses partir dune entre slectionne afin de pouvoir, devant un auditoire, refaire pas pas lexcution des diffrentes entres.
Inserer saut de ligne pour obtenir une nouvelle ligne sur le niveau
dentre, l o se trouve le curseur et permet ainsi de passer la ligne par
exemple pour crire dans un mme niveau plusieurs lignes dentres spares
par ; (on peut aussi taper Shift+Enter).
Annuler ou raccourci Ctrl+z pour annuler la dernire excution : par
exemple vous avez effac malencontreusement un niveau et vous voulez annuler cet effacement il faut faire Annuler, ou bien vous avez modifi et
excuter une ligne de commande pour annuler cette modification il faut faire
Annuler, mais si il ny a pas eu dexcution (par exemple on a effacer une
expression dans la ligne de commandes) il ne faut pas faire Annuler,
Redo ou raccourci Ctrl+y pour revenir ce quil y avait avant lannulation : il faut faire 2 fois Redo si vous avez fait 2 fois Annuler,
Coller permet de recopier, lendroit du curseur, ce que lon a slectionn avec la souris (analogue la touche coller du clavier Kbd). On
peut aussi slectionner ce qui se trouve dans une ligne de commandes avec
Shift+les flches de dplacement.
Effacer niveaux selectionnes permet de supprimer les niveaux
slectionns,
selection->LaTeX ou raccourci Ctrl+t pour traduire en LaTeX la
question ou la rponse ou le contenu de lditeur dexpressions : on slectionne une question ou une rponse ou le contenu dun diteur dquations 1 .
Remarquez le petit bouton M situ lintersection des 2 barres de scroll de
lditeur dexpressions qui permet soit de recopier ce qui se trouve dans
lditeur dun seul clic, (avec Selectionner tout), soit dvaluer la
slection (avec Evaluer selection), soit de retrouver la rponse initiale (avec Annuler), dans le cas o, on a fait une modification malen1. Si vous voulez traduire une quation en LaTeX, tapez votre quation entre deux ce qui
laffichera dans un diteur dexpressions.

1.4. LES MENUS

1.4.3

65

contreuse car comme les rponses non graphiques sont affiches dans un
diteur dexpressions, elles peuvent donc tre modifies..., Lorsquon utilise
Edit->selection->LaTeX ou Ctrl+t, la traduction en LaTeX apparait alors dans lcran des messages (que lon peut voir en cliquant sur le
bouton msg de Kbd).
On peut la recopier dans un diteur (emacs, nedit, vi, ...) par un
clic avec le bouton du milieu.
Par exemple :
on saisit dans un niveau de calcul formel concat([1,2],3) on met en
surbrillance la rponse, puis on fait Ctrl+t, ce qui provoque linscription dans la partie reserve aux messages de :
\mbox{concat}([1,2],3)
on saisit sqrt(1+3), on met en surbrillance la rponse, puis on fait
Ctrl+t, ce qui provoque linscription dans la partie reserve aux messages de :
\sqrt{1+3}
on saisit f(x):=sin(x)/x, on met en surbrillance la rponse, puis on
fait Ctrl+t, ce qui provoque linscription dans la partie reserve aux
messages de :
\parbox{12cm}{\tt (x)-{\tt\symbol{62}}(sin(2*x))/x }
Il ne vous reste plus qu recopier le texte ainsi traduit, dun coup de souris,
dans une portion en mode mathmatique de votre document LATEX.
Fusionner niveaux permet de mettre dans un mme niveau, les niveaux slectionns,
Nouveau groupe permet de crer un groupe,
Grouper niveaux permet de crer un regroupement des niveaux slectionns, que lon peut plier ou dplier en cliquant sur - ou + du menu
propre ce regroupement. On peut aussi donner un nom au regroupement
ainsi cr.
Degrouper niveaux effectue lopration inverse de la prcdente (on
aplatit le groupe dont le numro a t slectionn (noirci) pour revenir
ltat prcdent le regroupement).

Le menu Cfg

Configuration du CAS permet de configurer le calcul formel (idem


que le bouton "ligne dtat" situ entre Save et Stop),
Configuration graphique permet de configurer le graphique par dfaut : vous pouvez aussi avoir une configuration spcifique pour chaque graphique avec le bouton cfg du graphique, mais cela ne changera pas la configuration par dfaut,
Configuration generale permet de dterminer la taille des caractres, le navigateur, si on veut une aide automatique ou pas , le format de
limpression et de cocher ou pas Paysage (si cette case est coche limpression se fera selon la largeur de la feuille, si elle nest pas coche limpression se fera selon la hauteur de la feuille), le nombre de lignes et de
colonnes du tableur, et aussi le nombre dappels rcursifs autoriss,

66

CHAPITRE 1. LINTERFACE XCAS


Mode (syntax) permet de travailler avec une syntaxe Xcas (qui est de
type C), soit avec une syntaxe Maple ou TI ou MuPad ou Tortue,
Montrer puis
DispG pour voir lcran DispG sur lequel est enregistr toutes les commandes graphiques depuis le dbut de la session, sans distinction de niveau. Il permet en particulier de visualiser les affichages graphiques intermdiaires dun programme (en effet seuls les objets graphiques renvoys
par return ou retourne peuvent tre affichs en rponse dans un niveau o on excute un programme). (voir aussi la commande DispG()
8.1.3 et 8.6.4).
Clavier pour avoir un clavier scientifique. Ce clavier se met en bas de
la fentre.
Bandeau pour avoir les commandes de Xcas dans un bandeau. Ce bandeau se met juste aprs le clavier. Il permet dafficher un sous-menu de
manire persistante. Le bandeau est form dune ligne qui permet davoir
facilement sa disposition les commandes qui se trouvent dans les diffrents menus de la barre de menu. On appuie par exemple, sur Geo (crit
en rouge) puis, sur Triangles (crit en rouge) pour avoir dans le bandeau les commandes gomtriques de Xcas (crites en noir) dessinant
des triangles.
La touche home permet de revenir au bandeau initial contenant :
Expression, Geo, ,Prg, Graphic.. BACK.
Les touches et permettent de circuler dans la ligne du bandeau.
La touche BACK permet de revenir au bandeau prcdent.
La touche cust pour custom permet de mettre les noms de ses propres
commandes dans un menu dfini dans la variable CST, CST doit contenir
une liste qui sera le menu affich (voir aussi 2.5.1).
Par exemple CST:=[1,2,3] va afficher comme menu 1, 2, 3. On
pourra donc faire un bandeau personnalis en mettant dans CST les noms
des fonctions que lon veut utiliser ou les noms des fonctions que lon a
cres.
Par exemple, on dfinit la fonction f(x):=x^2+2*x+3 et on tape :
CST:=[evalc,["f",f],["euro",6.55957]]
On obtient quand on appuie sur cust, un bandeau qui contient comme
menu :
evalc f euro.
puis, on dfinit la fonction f(x):=x^2+2*x+3 et on peut ainsi appeler
f depuis eqw :
on met par exemple 3 dans eqw puis on appuie sur f et on obtient 18.
On peut ainsi appeler evalc() dans une ligne dentre en appuyant sur
evalc ou encore on utilise la touche euro dans un calcul.
Msg pour avoir la fentre des messages. La fentre des messages se met
juste aprs le bandeau.
Cacher puis
DispG pour ne plus voir lcran DispG sur lequel est enregistr toutes
les commandes graphiques effectues depuis le dbut de la session,
Clavier pour ne plus voir le clavier scientifique,
Bandeau pour ne plus voir les commandes de Xcas dans le bandeau,

1.4. LES MENUS

67

Msg pour ne plus voir la fentre des messages,


Langue de laide pour choisir davoir laide en franais, en anglais ou
en espagnol,
Couleurs pour choisir la couleur de laffichage selon son type,
Police session permet de changer la police et la taille des caractres
de la session en choisissant la police et la taille de la fonte (par dfaut police
helvetica de taille 20),
Polices (toutes) permet de changer la police et la taille des caractres de la session, du menu principal et du clavier en choisissant la police et
la taille de la fonte (par dfaut police helvetica de taille 20)
Navigateur permet de donner le nom de votre navigateur,
Sauver prfrences permet de sauver les diffrentes configurations
choisies avec le menu Cfg ou avec le bouton donnant la ligne dtat et ainsi
de les retrouver pour des utilisations ultrieures.

1.4.4

Le menu Aide

Ce menu contient les diffrentes formes daide possible.


Index Lorsque lon slectionne Index, cela ouvre un cran avec plusieurs
plages donnant pour toutes les commandes, une aide succincte, les commandes proches, des exemples .
Les diffrentes plages :
Vous voyez sur la plage en haut et gauche toutes les commandes utilisables
classes par ordre alphabtique avec en dessous une ligne dentre qui permet de consulter cette liste facilement : il suffit de taper le dbut dun nom
dans cette ligne pour avoir le curseur cet endroit dans la liste, vous pouvez
ainsi aller directement une lettre ou une commande.
En cliquant sur lune de ces commandes, vous avez :
droite les commandes proches de la commande mise en surbrillance,
en dessous la ligne dentre
en dessous de la ligne dentre, une aide succincte qui saffiche aussi dans
le bandeau gnral lendroit des messages et une aide plus complte
saffichera, soit dans Mozilla sous Linux, soit dans un cran part. Sous
Linux, il est commode douvrir Mozilla et de licnifier pour pouvoir ouvrir cette aide si cela est necessaire.
des exemples que lon peut copier pour les excuter : il suffit davoir le
curseur dans une ligne ce commande, puis de cliquer sur lun des exemples
pour que cet exemple soit recopi dans la ligne o se trouve le curseur.
Il faut savoir aussi quen tapant le dbut dune commande dans une ligne
de commandes, puis sur la touche de tabulation, on obtient toutes les commandes de lIndex commenant par ce dbut : vous pouvez alors cliquer
sur lun des exemples de la commande mise en surbrillance pour que ce
dbut de commande soit complt par cet exemple. Vous pouvez aussi taper ?nom_de_commande pour avoir comme rponse laide succincte sur
cette commande et ventuellement taper ?nom_de_commande suivi de ,
(virgule) 1 ou 2 ou 3 pour indiquer le langage utilis (1 franais, 2 anglais,
3 espagnol) dans la rponse : par exemple ?factor,2 pour avoir comme
rponse laide de factor en anglais.

68

CHAPITRE 1. LINTERFACE XCAS

Remarque Quand on choisit les commandes partir des menus, une aide
succincte sur cette commande saffiche dans la ligne des messages (cliquez
sur msg du bandeau) et le manuel de Calcul formel souvre la bonne page !
Quand on choisit les commandes partir du bandeau, seule une aide succincte sur cette commande saffiche dans la ligne des messages (cliquez sur
msg du bandeau).
Trouve recherche le mot demand dans toutes les pages du manuel Calcul
formel.
Interface contient de laide concernant linterface de Xcas.
Manuels
1. Calcul formel contient laide gnrale qui concerne toutes les
fonctions de calcul formel, de gomtrie, de statistiques mais qui ne
concerne pas les instructions de programmation, ni les instructions dplaant la tortue.
2. Geometrie contient une aide plus dtaille pour certaines commandes
car cette aide est illustre par des exercices (mais on na pas toutes les
fonctions de gomtrie !).
3. Programmation contient une aide dtaille des instructions de programmation. Dans cette partie vous trouverez lcriture de plusieurs
algorithmes avec la traduction de ces algorithmes en langage xcas
MapleV MuPAD TI89/92.
4. Tableur,statistiques contient une aide dtaille concernant le
tableur et les fonctions de statistiques ainsi que leurs utilisations dans
le tableur.
5. Tortue contient laide concernant les instructions qui sont utilises
dans lcran de dessin Tortue. Dans cette partie vous trouverez
plusieurs activits que lon peut faire avec des enfants (du CP au CM2)
dans le but de leur faire faire des mathmatiques.
Internet
1. Forum permet daccder un forum de discussion.
2. Ressources pedagogiques contient des exercices sur diffrents
sujets et de diffrents niveaux.
3. Mettre a jour laide permet de mettre laide jour.
Dbuter en calcul formel
1. Tutoriel est un tutoriel. Il permet de faciliter la prise en main de
Xcas pour faire du calcul formel.
2. solutions contient les solutions des exercices du tutoriel.
Recreer les fichiers index de laide
Le bouton Details de la fentre dindex de laide ouvre le navigateur sur
la page principale daide de la commande en cours si elle existe. Pour cela il
utilise un fichier cache contenant les correspondances, mais il arrive que ce
fichier cache ne soit pas jour, ce menu permet de mettre jour ce fichier
cache (il faut bien sur avoir les droits dcriture sur le fichier cache).

1.4. LES MENUS

69

Exemples Si vous slectionnez par exemple lexemple de nom glace.xws


du sous menu climat, alors, ce fichier sera recopi du rpertoire :
/usr/local/share/giac/examples/Exemples/climat/
dans votre rpertoire courant et Xcas vous ouvrira une nouvelle session
glace.xws qui contiendra ce fichier. Toutefois si un fichier dumme nom
existe, on vous demandera auparavant si vous voulez le remplacer puis louvrir ou bien ouvrir celui du rpertoire courant sans lcraser.
Remarques
Quand on choisit les commandes partir des menus, une aide succincte sur
cette commande saffiche dans la fentre des messages (cliquez sur le bouton
Msg) et par dfaut, le manuel de Calcul formel souvre la bonne page
On peut activer ou dsactiver ce mcanisme daide automatique dans le
menu Cfg, Configuration generale, Aide HTML automatique.
Quand on choisit les commandes partir du bandeau, seule une aide succincte sur cette commande saffiche dans la fentre des messages (cliquez sur
la touche msg du bouton Kbd ou avec le menu EditIMontrerIMsg).

1.4.5

Les menus des commandes de calcul

Ces menus permettent douvrir un niveau adquat par exemple :


CASINouvelle entree ou Alt+n ouvrira une nouvelle ligne de commandes
TableurINouveau tableur ou Alt+t ouvrira un tableur,
GeoINouvelle figureIgraph,geo2d ou Alt+g ouvrira un niveau
de gomtrie o les points ont des coordonnes dcimales,
GeoINouvelle figureIgeo2d exact ouvrira un niveau de gomtrie o les points ont des coordonnes exactes,
Certains menus sont des menus dit "Assistant" car les commandes sont classes
par thme et sont explicites. Ces commandes sont facilement utilisables soit parce
que laide souvre sur la commande choisie (menu CAS), soit parce quune boite de
dialogue vous demande de prciser les paramtres de la commande choisie (menus
TableurIMaths ou menu Graphic).
Les autres menus contiennent les noms des commandes (le menu Cmds contient
toutes les commandes de calcul formel, le menu Geo contient toutes les commandes de gomtrie...)
Dscription des menus des commandes de calcul
Ces menus sont :
CAS contient les fonctions de calcul formel classes par thme. Ce menu
vous permet de connaitre le nom de la commande Xcas que vous cherchez
car ce nom est suivi dun bref dscriptif et lIndex de lAide souvre automatiquement sur la commande choisie.
Tableur ce menu est un menu "Assistant". On retrouve les trois sousmenus Table Edit Maths qui sont identiques aux menus dun niveau
de type tableur. Avec le menu TableurIMaths le tableur se remplit automatiquement grce une boite de dialogue qui vous demande de prciser
les paramtres de la commande choisie condition que le curseur soit dans

70

CHAPITRE 1. LINTERFACE XCAS


un niveau de type tableur (tableur que lon ouvre avec Alt+t).
Graphic contient les fonctions permettant de tracer des graphes de fonctions, des courbes en paramtrique ou en polaire, des solutions dexpressions
diffrentielles, pour visualiser "lescargot" des suites rcurrentes...
On notera que le niveau utilis pour tracer un graphe est un niveau dentre
normale car une commande graphique ouvre automatiquement en rponse un
cran graphique et une commande non graphique ouvre automatiquement en
rponse un diteur dexpressions.
Geo contient les fonctions permettant de faire de la gomtrie interactive.
On notera le menu Affichage qui contient la commande affichage
et ses paramtres concernant la couleur, les diffrentes sortes de lignes, les
diffrentes sortes de points et lemplacement des lgendes.
Prg contient les instructions permettant dcrire des programmes.
Expression contient les fonctions de calcul formel permettant de transformer une expression. Ces fonctions peuvent par exemple tre appliques
la slection dun diteur dexpressions (la rponse dune commande est mise
dans un diteur dexpressions, mais on peut aussi ouvrir un niveau diteur
dexpressions avec Alt+e).
Cmds contient les fonctions mathmatiques classes par thme.
Phys contient toutes les units physiques, les constantes physiques et des
fonctions de conversion.
Scolaire contient des commandes de calcul formel classes par niveau.
Les sous-menus Seconde Premiere Terminale contient les diffrentes fonctions de calcul formel utilisables dans les classes de Lyce.
Vous pouvez rajouter ou supprimer des commandes dans ce menu selon vos
besoins en modifiant le fichier xcasmenu (cf.la section 1.4.5).
Tortue contient toutes les commandes qui sont valides dans lcran de dessin Tortue (cran de dessin Tortue que lon ouvre avec Alt+t). Ces commandes sont proches du langage LOGO et permettent de faire des dessins en
donnant des ordres un robot (une tortue).

Rajouter un menu
On peut redfinir les menus que lon voit au-del du menu Aide. Par exemple,
rajoutons un menu Exo1 qui contiendra les commandes equal2diff factor
subst qui seraient utiles pour faire un exercice numrot 1.
Pour cela il faut ouvrir dans lditeur texte de votre choix (par exemple emacs,
vi, nedit, notepad, bloc.notes... mais PAS word, abiword,
kword, openoffice...) le fichier xcasmenu (sous Linux ou Mac, il faut
modifier ce fichier dans le rpertoire /usr/share/giac/doc/fr ou
/usr/local/share/giac/doc/fr).
Vous devez voir :
Math/Constants/pi
Math/Constants/i
Math/Constants/e...
Vous tapez alors les trois lignes suivantes (une ligne par commande) :
Exo1/equal2diff
Exo1/factor

1.5. COMMENT BIEN GRER SON ESPACE DE TRAVAIL

71

Exo1/subst
en laissant le reste
Math/Constants/pi
Math/Constants/i
Math/Constants/e...
inchang.
Lorsque vous relancez Xcas vous avez maintenant aprs le menu Aide un
menu Exo1 qui contient les commandes equal2diff factor subst.
Remarque : le menu Exemples suit le mme principe avec un fichier xcasex,
mais il faut aussi avoir cr les fichiers de session exemple dans le rpertoire de
xcasex.

Supprimer un menu
Pour cela il faut ouvrir dans lditeur de votre choix le fichier xcasmenu. Il
suffit alors deffacer les lignes que vous ne voulez pas voir apparaitre en ayant soin
de les sauver pour pouvoir vous en reservir ultrieurement !

1.5
1.5.1

Comment bien grer son espace de travail


Pour slectionner ou dslectionner un niveau

Pour slectionner un niveau, il faut cliquer sur le numro du niveau que lon
veut slectionner : ce numro apparait alors sur fond noir.
Pour slectionner plusieurs niveaux qui se suivent et se trouvent sur lcran, il
faut cliquer sans relacher sur le premier numro du groupe et se deplacer jusquau
dernier numro du groupe puis relacher le bouton de la souris : ces numros apparaissent alors sur fond noir. Pour slectionner plusieurs niveaux qui se suivent on
peut aussi cliquer sur le premier numro du groupe et Shift+cliquer sur le
dernier numro du groupe : cela slectionne les niveaux intermdiaires.
Pour dslectionner, on clique ailleurs dans la session (on peut aussi cliquer sur
un seul des niveaux parmi les niveaux slectionns ce qui slectionnera uniquement
ce niveau).

1.5.2

Pour remplir les niveaux

On peut retrouver lhistorique de ce que lon a tap prcdemment avec Shift+


et Shift+.
On peut recopier une suite dinstructions situs dans un niveau dans diffrents niveaux, mais il faut que chaque instruction soit crite sur une ligne diffrente (faire
shift+enter pour changer de ligne dans un niveau). Par exemple pour recopier :
C:=cercle(0,1,affichage=hidden_name);
Q:=projection(C,P)
dans 2 niveaux on slectionne les 2 instructions avec la souris, puis on clique directement avec le bouton du milieu dans le numero du niveau sans le noircir.

72

CHAPITRE 1. LINTERFACE XCAS

1.6

Les diffrentes configurations

Les diffrentes configurations se font :


pour la configuration du calcul formel avec le menu CfgIConfiguration
du CAS ou avec le bouton donnant la ligne dtat (cest la ligne crite cot
de Save et qui rappelle une partie de cette configuration).
pour la configuration graphique avec le menu CfgIConfiguration graphique
.
pour la configuration gnrale avec le menu CfgIConfiguration generale.

1.6.1

Configuration du Cas

Prog style si on veut programmer en un autre langage : on peut choisir


maple, mupad ou ti89/92,
eval : nombre maximum dvaluations rcursives en mode interactif. Par
exemple, si on excute dans lordre a:=b+1 et b:=5 puis on value a, la
valeur renvoye sera b+1 si eval vaut 1 et 6 si eval est plus grand que 1.
prog : comme ci-dessus mais lorsquun programme est excut. On utilise
en principe le niveau 1 dvaluation lintrieur dun programme.
recurs pour dterminer le nombre maximum dappels rcursifs : par defaut cest 50. Il ny a pas de limite impose par linterface de Xcas, par
contre si on met une borne trop leve, cest la pile du programme qui risque
de dborder en provoquant un segmentation fault. Le moment o cela se
produit dpend de la fonction, car la pile est aussi utilise pour les appels
rcursifs des fonctions C++ de giac,
debug : affiche des informations intermdiaires (en bleu) sur les algorithmes
utiliss par giac en fonction du niveau (0 = pas dinfo).
maxiter : nombre maximal ditrations pour la mthode de Newton
Flottants on peut choisr Standard Scientific Engineer pour
que laffichage des nombres dcimaux se fasse selon :
la notation standard : 150.12 sera not 150.12,
la notation scientifique : 150.12 sera not 1.501200000000e+02,
la notation des ingnieurs : 150.12 sera not 150.12e0,
Chiffres pour dtrminer le nombre de chiffres significatifs. Si on choisit
moins de 14 chiffres, les calculs sont quand mme faits avec 14 chiffres mais
laffichage nen montre que ce que lon demande.
epsilon dtermine la valeur de epsilon utilise dans epsilon2zero,
proba : si cette valeur est non nulle, Giac peut utiliser des algorithmes
non dterministes et renvoyer une rponse qui a alors une probabilit dtre
fausse infrieure la valeur donne. Cest par exemple le cas pour le calcul
du dterminant dune grande matrice coefficients entiers.
approx on coche cette case si on veut travailler en mode numrique : si
cette case nest pas coche on travaille en mode exact ou formel. Lorsquon
travaille en mode exact on peut avoir une valuation numrique en tapant sur
la touche num ou en utilisant la commande evalf ou encore en mettant des
nombres decimaux (par exemple 1.0/2=0.5 alors que 1/2 est inchang),
taches pour faire du parallelisme, dans le futur...,
Base (Entiers) pour travailler en base 10, 16 ou 8,

1.6. LES DIFFRENTES CONFIGURATIONS

73

radian est lunit dangle si cette case est coche, sinon lunit dangle est
le degr,
puissance croissante pour que laffichage des polynmes se fasse
selon les puissances croissantes aprs lutilisation de commandes comme
normal ou simplify,
Complex on coche cette case pour travailler en mode complexe : si cette
case nest pas coche on travaille en mode rel. Certaines commandes cependant sont indpendante du mode choisi comme cpartfrac, csolve
ou cFactor,
Variables_complexes on coche cette case pour travailler avec des variables formelles complexes : si cette case nest pas coche les variables formelles sont relles (si la variable a nest pas affecte re(a)=conj(a)=a
et im(a)=0). Mais attention dans csolve linconnue est toujours considre comme une variable formelle complexe et dans solve linconnue est
considre comme une variable formelle complexe seulement si lequation
rsoudre contient i ou bien si on est en mode complexe,
puissance croissante : affiche les dveloppements de polynmes
selon les puissances croissantes ou dcroissantes
All_trig_sol : renvoie toutes les solutions dune quation trigonomtrique (par exemple solve(cos(x)=0)) laide de variables entires ou
seulement les solutions principales.
Sqrt : si Sqrt est coch, factor factorise les polynmes du second degr, mme si les facteurs ne sont pas dans le corps de base des coefficients.
Appliquer pour avoir cette configuration,
Sauver pour avoir cette configuration par dfaut,
Annuler pour revenir lancienne configuration.

1.6.2

Configuration du graphique avec le menu :


CfgIConfiguration graphique

La configuration du graphique se fait avec le menu CfgIConfiguration


graphique.
Mais chaque graphique peut avoir sa configuration propre en utilisant le bouton
cfg du bloc situ en haut droite de lcran graphique. Montrer les axes
on coche cette case pour voir les axes (en 3d on peut aussi choisir de ne voir que le
tridre en dcochant Montrer les axes et en cochant Triedre),
X- et X+ pour dterminer laxe des x de la fentre de calcul,
Y- et Y+ pour dterminer laxe des y de la fentre de calcul,
Z- et Z+ pour dterminer laxe des z de la fentre de calcul,
t- et t+ pour dterminer la variation du paramtre t utilis dans les courbes en
paramtriques ou en polaires,
WX- et WX+ pour dterminer laxe des x de la fentre de visualisation,
WY- et WY+ pour dterminer laxe des y de la fentre de visualisation,
x_rot pour faire tourner une figure en 3-d selon laxe des x : une partie de lcran
de configuration graphique souvre automatiquement lorsquon fait un graphe en

3-d selon une petite fentre qui remplace momentanment


Xcas. On utilise les
touches + ou - pour faire tourner la figure et on ferme cette petite fentre avec OK,
z_rot pour faire tourner une figure en 3-d selon laxe des z, laide les touches

74

CHAPITRE 1. LINTERFACE XCAS

+ ou -,
x_scale pour faire changer lchelle de laxe des x,
z_scale pour faire changer lchelle de laxe des z,
class_min pour dfinir en statistiques le minimum des classes,
class_size pour dfinir en statistiques la taille des classes,
autoscale on coche cette case pour avoir un rglage automatique de lchelle
en mode 2-d ou 3-d, ce qui provoque un changement du rglage des x, des y et
des z,
ortho pour avoir un repre orthonorm contenant la partie visible demande,
-> W et W->XY si on veut recopier les plages XY dans W et vice-versa,
TX et TY permet de marquer, lorsquon a les axes, les points de coordonnes les
multiples de TX et TY, on met TX et TY zro lorsque lon ne veut pas ces points,
OK pour confirmer, et on obtient par exemple :
xyztrange(-6.0,6,-7,4,-10,10,-1,6.0,-6,6,-2,4,1) dans lhistorique, commande qui dfinit les nouveaux paramtres de la fentre graphique,
Annuler pour revenir lancienne configuration.

1.6.3

Configuration gnrale

Format dimpression on a le choix entre diffrents formats : A4, A5,


A3, Lettre Enveloppe,
Landscape si cette case est coche limpression se fera selon la largeur de la
feuille, si elle nest pas coche limpression se fera selon la hauteur de la feuille,
Fonte historique pour dterminer la taille des fontes de lhistorique,
Level si on choisit Tortue, cela ouvrira Xcas avec 2 niveaux : un cran de
dessin tortue en niveau 1 et un diteur de programmes en niveau 2,
Aide HTML automatique on coche cette case pour avoir laide detaille
chaque appel de fonction se trouvant dans les menus. Si cette case nest pas coche
on a toujours une aide succincte qui saffiche dans le bandeau gnral lendroit
des messages et on a peut aussi avoir de laide en tapant ? suivi du nom de la
commande et ventuellement de , (virgule) 1 ou 2 ou 3 pour indiquer le langage
utilis (1 franais, 2 anglais, 3 espagnol), (par exemple ?iquo ou ?iquo,2) ou,
en cliquant sur le menu Aide pour ouvrir toutes les aides possibles,
Lignes pour dterminer le nombre de lignes de lditeur de matrices (ou du tableur),
Cols pour dterminer le nombre de colonnes de lditeur de matrices (ou du tableur),
Prvisualisation pour dterminer le logiciel utilis pour voir les fichiers
.ps (on met par exemple gv...),
Recurs pour dterminer le nombre de rcursivit aurorise,

1.7
1.7.1

Les diffrentes configurations avec les commandes


Le fichier .xcasrc

Le fichier .xcasrc du rpertoire home (xcas.rc sous Windows) est un fichier qui est excut au lancement de Xcas et qui contient vos "prfrences" (menu

1.7. LES DIFFRENTES CONFIGURATIONS AVEC LES COMMANDES 75


Cfg sous-menu Sauver prfrences) Dans ce fichier on a par exemple :
widget_size(20,267,56,735,557,0,1,0,7,"mozilla",0,"gv");
cas_setup(0,0,0,1,0,1e-10,12,1,0,0,0),maple_mode(0);
xyztrange(-1.0,5.0,-3.5,3.5,-10.0,10.0,-10.0,10.0,-10.0,10.0,
-5.72671232877,5.42671232877,1,0.0,1.0,1);

1.7.2

La configuration gnrale et la fonction : widget_size

widget_size a entre 1 et 12 arguments.


Les arguments dans lordre sont :
argument numro 0 : la taille des caractres, par exemple 20,
arguments numro 1 et 2 : labscisse et lordonne du point dans la fentre
xterm, o doit se produire laffichage du coin suprieur gauche de Xcas,
par exemple (58,49) (le repre a pour origine le point en haut et gauche de
la fentre xterm et laxe des Y est dirig vers le bas),
arguments numro 3 et 4 la largeur et la hauteur de Xcas, par exemple
(697,563) (le repre est toujours celui de xterm),
argument numro 5 : 1 (resp 0) pour avoir (resp ne pas avoir) la prsence du
clavier,
argument numro 0 : 1 (resp 0) pour avoir (resp ne pas avoir) pour lancer
le navigateur automatiquement afin dafficher laide sur la commande slectionne dans un menu ou dans lindex,
argument numro 7 : 1 (resp 0) pour avoir (resp ne pas avoir) la prsence du
bandeau,
argument numro 8 : pas utilis pour linstant,
argument numro 9 : une chane de caractres indiquant le nom de votre
navigateur internet (si vous travaillez avec Linux ou avec MacOS), celui qui
souvrira pour lire laide html ("" ou "builtin" designe le petit navigateur
integr)
argument numro 10 : pour avoir le niveau de lutilisateur 0=universit,
1=terminale, 2=premire, 3=seconde, 8=tortue,
argument numro 11 : nom de la commande utilise permettant la previsualisation postscript : par exemple "gv"

1.7.3

La configuration du cas avec la fonction : cas_setup

cas_setup a 9 arguments.
Les arguments dans lordre sont :
approx, var_complexe ,complexe, radian, format_affichage,
epsilon, chiffres, taches, increasing power
et valent 1 ou 0 (sauf taches) pour dire si on veut ou on ne veut pas travailler
avec cette option.
On tape :
cas_setup(1,0,0,1,0,1e-10,12,2,0)

76

CHAPITRE 1. LINTERFACE XCAS

approx vaut 1 : on travaille en mode approximatif (on met 0 pour numrique),


var_complexe vaut 0 : on travaille avec des variables relles (on met 1 pour
travailler avec des variables complexes),
complex vaut 0 (on travaille en mode rel),
radian vaut 1 (on travaille en radian). On met radian 0 pour travailler en
degr,
format_affichage vaut 0 : laffichage sera selon le format standard (on met
1 pour le format scientifique, 2 pour le format ingenieur et 3 pour le format flottant
hexadecimal (normalis avec un 1er digit non nul ou dnormalis)),
epsilon vaut 1e-10,
Chiffres vaut 12,
taches vaut 2,
puissance croissante vaut 0 (on travaille en puissance dcroissante).

1.7.4

Nombres de chiffres significatifs : Digits DIGITS

Digits ou DIGITS est le nom dune variable qui contient le nombre de chiffres
de laffichage. On tape :
Digits
Ou on tape :
DIGITS
On obtient :
12
si dans la configuration du CAS il y a 12 dans la case Chiffres.
On peut changer la valeur de la case Chiffres de la configuration du CAS en
affectant une valeur Digits ou DIGITS. Digits ou DIGITS permet donc de
spcifier le nombre de chiffres significatifs de laffichage, pour cela on doit taper
Digits puis := et un nombre entier entre 1 et 1000.
On tape :
Digits:=3
Ou on tape :
DIGITS:=3
pour avoir 3 chiffres laffichage : Puis, on tape :
1.0/3
On obtient :
0.333
On tape :
4.0/3

1.7. LES DIFFRENTES CONFIGURATIONS AVEC LES COMMANDES 77


On obtient :
1.33
IL y a deux cas distinguer :
La valeur de Digits ou DIGITS est infrieure 14, Xcas travaille alors
avec des flottants machines cest dire que les dcimaux ont environ 14
chiffres significatifs car ils sont represents en binaire sur 52 bits et donc
les calculs seront les mmes quelque soit n infrieur 14, seul laffichage
sera diffrent. En effet si Digits:=n ou DIGITS:=n avec n infrieur
14 laffichage sera fait avec n chiffres significatifs.
On tape :
Digits:=5
Ou on tape :
DIGITS:=5
puis, on tape :
a:=4.0/3
On obtient :
1.3333
Mais, si on tape :
b:=a-1.333333333
On obtient :
3.3333e-10
ce qui prouve que Xcas travaille avec a=1.33333333333333.
La valeur n de Digits ou DIGITS est suprieure 14, Xcas travaille avec
des flottants en multi-prcision cest dire que les dcimaux auront environ
n chiffres significatifs. Donc si on tape Digits:=n ou DIGITS:=n avec
n suprieur 14 laffichage et les calculs se feront avec n chiffres significatifs.
On tape :
Digits:=20
Ou on tape :
DIGITS:=20
puis, on tape :
c:=4.0/3
On obtient 21 chiffres significatifs :
1.33333333333333333333
0n tape :
c-1.33333333333333333333
On obtient :
0.000000000000000000000
Dans ce cas les calculs correspondent laffichage.
Exemples On tape :
Digits:=5
Ou on tape :
DIGITS:=5
puis
evalf((pi)^4)
On obtient :

78

CHAPITRE 1. LINTERFACE XCAS


97.409
puis
evalf((pi)^4-97.409)
On obtient :
9.1034e-05
puis
evalf((pi)^4-97.40909103)
On obtient :
4.0018e-09
On tape :
Digits:=20
Ou on tape :
DIGITS:=20
puis On tape
evalf((pi)^4)
On obtient :
0.974090910340024372345e2
puis
evalf((pi)^4-97.40909103)
On obtient :
4.001776687801e-09

Remarque
Si pour un calcul on veut par exemple avoir un affichage avec seulement n chiffres
significatifs il faut utiliser evalf avec 2 arguments : cela ne change pas la valeur
de Digits.
On tape :
a:=862/7
evalf(a,5)
On obtient :
123.14
evalf(a)
On obtient si dans la configuration utilise Digits vaut 12 :
123.142857143

1.7.5

Choix du mode de langage Xcas ou Maple ou MuPad ou TI89 :


maple_mode

maple_mode permet de spcifier le langage avec lequel on veut travailler.


Si on veut travailler en mode Xcas, on tape :
maple_mode(0)
Si on veut travailler en mode Maple, on tape :
maple_mode(1)
Si on veut travailler en mode MuPad, on tape :
maple_mode(2)
Si on veut travailler en mode TI89, on tape :
maple_mode(3)

1.7. LES DIFFRENTES CONFIGURATIONS AVEC LES COMMANDES 79

1.7.6

Choix de lunit dangle : angle_radian

angle_radian permet de spcifier lunit choisie pour les angles.


Si on veut travailler en radian, on tape :
angle_radian:=1
Si on veut travailler en degr, on tape :
angle_radian:=0
On peut aussi cocher ou dcocher radian dans lcran de la Configuration
du CAS du menu Cfg.

1.7.7

Choix du mode approximatif ou exact : approx_mode

approx_mode permet de spcifier si on veut travailler avec des valeurs approches ou avec des valeurs exactes.
Si on veut travailler en approximatif, on tape :
approx_mode:=1
Si on veut travailler en exact, on tape :
approx_mode:=0
On peut aussi cocher ou dcocher approx dans lcran de la Configuration
du CAS du menu Cfg.

1.7.8

Choix du mode rel ou complexe : complex_mode

complex_mode permet de spcifier si on veut travailler avec des nombres complexes ou avec des nombres rels.
Si on veut travailler en complexe, on tape :
complex_mode:=1
Si on veut travailler en rel, on tape :
complex_mode:=0
On peut aussi cocher ou dcocher Complex dans lcran de la Configuration
du CAS du menu Cfg.

1.7.9

Variables relles ou complexes : complex_variables

complex_variables permet de spcifier si on veut travailler avec des variables


formelles relles (dans ce cas par exemple re(A)=A) ou complexes.
Si on veut travailler avec des variables formelles complexes, on tape :
complex_variables:=1
Si on veut travailler avec des variables formelles relles, on tape :
complex_variables:=0

80

CHAPITRE 1. LINTERFACE XCAS

On peut aussi cocher ou dcocher Variables_ complexes dans lcran de la


Configuration du CAS du menu Cfg.
Attention ! ! !
Dans csolve linconnue est toujours considre comme une variable formelle
complexe et dans solve linconnue est considre comme une variable formelle
complexe seulement si lequation rsoudre contient i et si on est en mode complexe.
On tape en mode complexe (Complexe est coch et Variables_complexes
est dcoch) :
solve(re(r*exp(-(i)*t))-1,r)
On obtient :
[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
cela veut dire que la solution r est un nombre complexe qui vaut x+(i)*1/(sin(t))*(-
x*cos(t)+1) o x est arbitraire.
On tape en mode complexe (Complexe est coch et Variables_complexes
est dcoch) :
solve(expand(re(r*exp(-(i)*t))-1),r)
On obtient :
[1/(cos(t))]
car (expand(re(r*exp(-(i)*t))-1) renvoie une expression qui ne contient
pas de i donc solve considre r comme une variable relle.
Rgle Pour ne pas se tromper, lorquon veut des solutions complexes, il faut utiliser csolve.
On tape en mode complexe ou rel :
csolve(re(r*exp(-(i)*t))-1,r)
On obtient :
[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
cela veut dire que la solution r est un nombre complexe qui vaut x+(i)*1/(sin(t))*(-
x*cos(t)+1) o x est arbitraire.

1.8

Laide

On peut avoir de laide sur les diffrentes fonctions de calcul formel de plusieurs faons. On peut cocher la case Aide HTML automatique de la configuration gnrale pour avoir louverture de laide detaille chaque appel dune
fonction se trouvant dans les menus ou ne pas cocher cette case pour avoir de laide
seulement lorquon le dsire, toutefois une aide succincte apparait dans la ligne des
messages chaque appel dune fonction se trouvant dans les menus. On peut avoir
accs laide gnrale ou laide par fonction tout le temps (voir ci-dessous).

1.9. SAUVER ET IMPRIMER

1.8.1

81

Aide gnrale

Voir aussi : 1.4.4 pour le menu de Aide.


On ouvre laide en utilisant le menu Aide.
Il sufit aussi, de taper le dbut du nom dune commande, puis dappuyer sur la
touche de tabulation () pour avoir laide sur les commandes commencant par ce
dbut de nom ou,
de mettre en surbrillance dans un des menus Cmds...Geo, le nom dune fonction
pour avoir :
- cette fonction dans la ligne o se trouve le curseur,
- une explication sur ce que fait cette fonction dans lcran des messages,
- une aide plus dtaille mais seulement en Franais dans votre navigateur.

1.8.2

Aide sur une fonction : findhelp ou ?

Chaque fois que lon appelle une fonction partir dun menu une aide succincte sur cette fonction saffiche dans lcran des messages (cliquez sur msg du
bandeau).
Pour avoir de laide dans lhistorique dans la langue de son choix, on utilise findhelp
ou ? avec deux paramtres : le premier paramtre est le nom de la fonction et le
deuxime est 1 pour avoir laide en franais (ou 2 pour avoir laide en anglais ou
3 pour avoir laide en espagnol) sur cette fonction.
On tape par exemple :
findhelp(factor)
ou
?factor
On obtient alors laide sur la fonction factor en rponse. On peut aussi choisir
la langue On tape par exemple :
findhelp(factor,2)
ou
?factor,2
On obtient alors laide sur la fonction factor en anglais en rponse.

1.9

Sauver et imprimer

Il est prfrable de mettre les suffixe suivants :


.cxx (ou .map ou .mu ou .ti selon le mode) pour un script et par exemple,
.xws pour la session de travail,
.cxx pour une fonction,
.tab pour le tableur,
.tex pour le graphique en latex,
.eps pour le graphique et pouvoir ensuite inclure le fichier dans un texte en latex
ou en postscipt,
.png pour le graphique et pouvoir ensuite inclure le fichier dans un texte en html.

82

1.9.1

CHAPITRE 1. LINTERFACE XCAS

Pour sauver une session

Il suffit dutiliser le bouton sauver qui se trouve dans la barre de boutons


pour sauver votre session ou encore le sous-menu sauver du menu Fich.
Lorsque vous sauvez votre session, le bouton sauver qui etait sur fond rouge est
alors sur fond vert. La premire fois on vous demande le nom du fichier de sauvegarde (en .xws), ce nom sinscrit la place de <no filename> et cest dans ce
fichier que se feront les sauvegardes ultrieures. Si vous voulez quune sauvegarde
se fasse sous un autre nom Il suffit dutiliser le sous-menu Sauver comme du
menu Fich.
Vous avez dans un fichier .xws la suite des questions et des rponses, ainsi votre
session de travail est transforme en un script qui pourra alors tre rexcut avec
Charger du menu Fich.

1.9.2

Pour sauver un tableur

louverture dun tableur (avec Alt+t), on vous demande un nom de variable : si vous donnez comme nom mat, il sinscrit mat.tab cot du bouton
Save du tableur. Lorsque vous sauvez votre tableur avec ce bouton Save du tableur, vous sauvez la fois les formules et les valeurs du tableur : votre tableur est
transform en un fichier qui pourra tre charg grce Insrer du menu Fich
du tableur.

1.9.3

Pour sauver un programme

Vous sauvez les programme ou les scripts (suite dinstructions spares par des
points virgules) crit dans un diteur de programmes, avec le bouton save de cet
diteur de programmes, ou avec le sous-menu sauver du menu Fich de cet diteur de programmes.
Le fichier contenant cette sauvegarde pourra tre remis dans un diteur de programmes grce au menu Fich sous-menu :
Charger pour charger un fichier contenant des scripts ou des programmes dans
lditeur de programmes.
ou
Inserer pour inserer un fichier contenant des scripts ou des programmes dans
lditeur de programmes.
Appuyer sur Save a pour effet, la premire fois, de vous demander le nom du fichier de sauvegarde. Ce nom sera le mme, pour toutes les sauvegardes ultrieures.
Si vous voulez, au cours de votre travail, sauver sous un autre nom, il faut utiliser
le menu Fich de lditeur de programme sous-menu Sauver comme.

1.9.4

Pour imprimer

Il faut utiliser le menu Fich sous-menu Imprimer session puis :


Imprimer pour imprimer lhistorique : vous navez pas besoin pour cela davoir
Latex.... On vous demandera simplement le nom de limprimante ou bien,
Fichier postscript pour traduire votre session en un fichier postscript (.ps)

1.10. TRADUCTION LATEX

83

qui sera prt tre imprimer (sous Unix ou Linux vous pourrez le voir avec la commande gv) ou bien,
Pr-visualisation avec Latex pour voir votre fichier avant impression,
votre session est sauve en un fichier Latex (.tex) qui sera traduit aprs compilation en un fichier (.dvi) (si vous navez pas sauv auparavant ces fichiers auront
pour nom session.tex et session.dvi) ou bien directement,
Imprimer avec Latex vous aurez les fichiers .tex) et .dvi.

1.10

Traduction Latex

1.10.1

Traduction Latex dune entre : latex TeX

latex (ou TeX) a comme argument une expression.


latex (ou TeX) renvoie lcriture en latex de lexpression value.
On tape :
latex(1/2)
On obtient :
"\frac{1}{2}"
On tape :
latex(1+1/2)
On obtient :
"\frac{3}{2}"

1.10.2

Imprimer la session ou/et la convertir en un fichier Latex

Pour sauver toute la session il faut cliquer sur Save de la barre des boutons
de la session (on vous demande le nom par exemple session.xws et toute la
session est sauve dans le fichier session.xws). Si vous voulez limprimer en
un fichier postscript, il faut choisir dans le menu Fich de la session, le sous-menu
Imprimer puis Pre-visualisation et ensuite Vers Imprimante : cela
cre un fichier postscript session.ps. Si vous voulez convertir votre session en
un fichier Latex, il faut choisir dans le menu Fich, le sous-menu Imprimer puis,
Pre-visualisation (Latex), et ensuite Vers Imprimante (Latex)
cela cre les fichiers session.tex, session.dvi, session.ps et session.png.

1.10.3

Traduction Latex dun cran de gomtrie

Voir aussi : 3.5 et 1.10.5 On veut traduire en Latex toutes les sorties graphiques
ralises depuis le dernier erase() cest dire toutes celles faites partir des
lignes de commandes et celles faites dans les crans de gomtrie.
On utilise pour cela la fonction graph2tex.
On tape par exemple dans une ligne de commandes :
graph2tex("truc.tex")

84

CHAPITRE 1. LINTERFACE XCAS

On obtient alors les graphiques sauvs en un fichier Latex truc.tex qui pourra
tre compil et visualis seul, ou encore tre insr dans un fichier Latex.
Ou encore, si on veut la traduction Latex dun seul cran de gomtrie, on appuie
sur le bouton Save de cet cran de gomtrie, on donne un nom de fichier par
exemple truc.cas. Puis, on choisit dans le menu Fich de cet cran de gomtrie, le sous-menu Imprimer puis, Pre-visualisation (Latex), cela
cre les fichiers truc.tex, truc.dvi, truc.ps et truc.png ou ventuellement si on veut imprimer, on choisit Vers Imprimante (Latex).
On obtient alors lcran de gomtrie sauv en un fichier Latex truc.tex qui
pourra tre compil et visualis seul, ou encore tre insr dans un fichier Latex,
condition denlever len-tte \documentclass{article}...\begin{document},
denlever la fin \end{document} et de rajouter \usepackage{pstricks}
dans len-tte du fichier dans lequel on linsre.
Ou encore, on veut traduire en Latex une seule sortie graphique ou un seul dessin
ou un seul graphique fait dans un des crans de gomtrie et on voudrait lintgrer
dans un texte Latex ou limprimer seul. Mais, on a dj fait dautres graphiques,
soit laide de commandes qui renvoient des sorties graphiques, soit dans diffrents crans de gomtrie, alors, pour avoir la traduction Latex du dessin que vous
voulez, il faut utiliser la commande erase() cela neffacera pas vos graphiques,
mais cela aura pour effet de ne traduire en Latex que les tracs futurs. Donc on
tape erase(), puis on revalide ce que lon veut traduire en Latex, puis on tape
par exemple :
graph2tex("truc1.tex")
Pour traduire en Latex et imprimer un seul graphique on peut aussi se servir du
menu Exporter/Imprimer du bouton M de cet cran graphique :
MI Exporter/ImprimerIImprimer(en Latex),
Ou encore, on peut slectionner le niveau de lcran graphique que lon veut imprimer et utiliser le menu de la session :
FichIImprimerIImprime selection (latex).
Dans ces deux cas lcran est sauv selon 4 formats, sous les noms session0.tex,
session0.dvi, session0.ps et session0.png (ou encore sous les noms
session<numero>.tex/dvi/ps/png) (sauf si vous avez donn un autre
nom ce qui est conseill !).

1.10.4

Traduction Latex de lcran DispG

On tape DispG pour voir cet cran, et on se sert du bouton MI Exporter/ImprimerIImprime


Latex) de cet cran.
Lcran DispG sefface avec la commande ClrGraph() ou erase.

1.10.5

Traduction Latex de lcran 3-d : graph3d2tex

Voir aussi : 3.5 et 1.10.3 On fait un graphique en 3-d dans lcran et on voudrait limprimer. On se sert de MI Exporter/ImprimerIImprimer(en
Latex) ou de la fonction graph3d2tex.
On tape par exemple :
graph3d2tex("truc.tex")

1.11. TRADUCTION MATHML

85

On obtient alors lcran 3-d sauv en un fichier Latex truc.tex qui pourra tre
insr dans un fichier Latex.
On peut aussi slectionner le niveau (en cliquant sur son numro puis, utiliser le
menu Fich sous menu ImprimerIImprime slection (latex)).
Dans ce cas lcran 3-d est sauv selon 4 formats, sous les noms session0.tex,
session0.dvi, session0.ps et session0.png (ou encore sous les noms
session<numero>.tex/dvi/ps/png) (sauf si vous avez donn un autre
nom ce qui est conseill !).

1.11

Traduction Mathml

1.11.1

Traduction Mathml dune expression : mathml

mathml a comme argument une expression.


mathml renvoie lcriture en mathml de lexpression value.
On tape :
mathml(1/2)
On obtient :
"<?xml version=""1.0"" encoding=""iso-8859-1""?>
<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.1 plus
MathML 2.0//EN""
""http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd""
[ <!ENTITY mathml
""http://www.w3.org/1998/Math/MathML""> ]> <html
xmlns=""http://www.w3.org/1999/xhtml""> <body> <math
mode=""display""
xmlns=""http://www.w3.org/1998/Math/MathML"">
<mfrac><mrow><mn>1</mn></mrow><mrow><mn>2</mn></mrow></mfrac>
</math><br/> </body> </html> "

1.11.2

Traduction Mathml du tableur

On utilise le menu Fich->Exporter->Mathml.

1.12

Traduction de fichiers Maple en fichier Xcas ou Mupad

1.12.1

Fichier Maple traduit en fichier Xcas : maple2xcas

maple2xcas a comme argument un nom de fichier qui contient un programme


Maple en mode texte.
On tape :
maple2xcas("fichier1","fichier2")
On obtient :
la traduction de ce fichier en Xcas

86

1.12.2

CHAPITRE 1. LINTERFACE XCAS

Fichier Maple traduit en fichier Mupad : maple2mupad

maple2mupad a comme argument un nom de fichier qui contient un programme


Maple en mode texte.
On tape :
maple2mupad("fichier1","fichier2")
On obtient :
la traduction de ce fichier en Mupad

1.13

Traduction dun fichier Mupad en un fichier Xcas


ou Maple

1.13.1

Fichier Mupad traduit en fichier Xcas : mupad2xcas

mupad2xcas a comme argument un un nom de fichier qui contient un programme


Mupad en mode texte.
On tape :
mupad2xcas("fichier1","fichier2")
On obtient :
la traduction de ce fichier en Xcas

1.13.2

Fichier Mupad traduit en fichier Maple : mupad2maple

mupad2maple a comme argument un un nom de fichier qui contient un programme Mupad en mode texte.
On tape :
mupad2maple("fichier1","fichier2")
On obtient :
la traduction de ce fichier en Maple

Chapitre 2

Saisie
2.1

Pour crire un commentaire : Alt+c

On peut tout moment faire apparaitre une ligne pour crire un commentaire
avec Alt+c. Le commentaire scrit sans utiliser de guillemets et apparait en vert.
Le commentaire ne gnre pas de rponse.
Le commentaire sert commenter votre session.
Depuis un commentaire on peut ouvrir le navigateur une adresse donne On tape
dans une ligne de commentaire :
Exercice 1
On obtient :
aucune rponse
Dans une ligne de commentaire, on peut ouvrir le navigateur une adresse donne :
On tape dans une ligne de commentaire :
Pour plus dinfo cf :
@www-fourier.ujf-grenoble.fr/ parisse/giac/doc/fr/casrouge/index.html
On obtient :
louverture dans le navigateur de lindex du document
sur lalgorithmique
Attention
Pour faire un commentaire dans un programme il faut utiliser la commande comment
qui a comme argument une chane de caractres ou bien utiliser // qui doit etre
suivi du commentaire et dun retour la ligne. Quand il y a un commentaire dans
un programme, tout se qui se trouve entre // et le retour la ligne nest pas pris
en compte par le programme.
On tape :
bs():={comment("bonjour"); return "Salut";}
On tape :
bs():={//"bonjour"
87

88

CHAPITRE 2. SAISIE
return "Salut";}

On obtient :
un programme ayant comme commentaire "bonjour"

2.2

Lditeur dexpressions

Dans lditeur dexpressions, laffichage ne se fait pas linairement mais se fait


en dimension 2d.
Quand on a mis une expression dans lditeur dexpressions, on peut facilement
slectionner des sous-expressions et appeler les fonctions des menus sur ces sousexpressions puis appuyer sur enter pour avoir la rponse en dessous de lditeur
dexpressions ou encore valuer la slection dans lditeur dexpressions avec le
bouton eval.
Dans lditeur dexpressions, on peut utiliser les raccourcis suivants sur la slection
de sous-expressions :
Ctrl+s pour la commande simplify
Ctrl+r pour la commande integrate

2.2.1

Comment diter une quation

Supposons que lon veuille entrer lexpression

x+2
, on peut le faire de plux2 4

sieurs faons :
dans une ligne de commande condition de mettre des parenthses et on
tape : (x+2)/(x^2-4)
on se sert dun diteur dexpressions, diteur obtenu avec Alt+e.
On clique dans lcran de lditeur dexpressions et on tape x+2, puis on
slectionne x+2 (avec la souris ou avec la flche vers le haut du bloc des
flches de direction) puis on tape sur / et x, on slectionne x (avec la souris
ou avec la flche vers le haut) puis on tape ^2 puis on slectionne x2 et on
x+2
tape -4 et on valide avec enter et on obtient 2
comme rponse.
x 4
x+2
Supposons que lon veuille simplifier lexpression 2
on peut le faire de plux 4
sieurs faons :
dans une ligne de commande condition de mettre des parenthses et on
tape : normal((x+2)/(x^2-4+1)),
on se sert dun diteur dexpressions, diteur obtenu avec Alt+e.
On tape la fraction xx+2
2 4 (voir ci-dessus) puis, on slectionne toute la fraction (avec la flche vers le haut) et on slectionne la fonction normal du
menu MathIRecriture ce qui a pour effet davoir :
x+2
normal( 2
) dans lditeur dexpressions, puis soit on valide avec
x 4
1
enter et on obtient
comme rponse, soit on appuie sur le bouton
x2
eval du clavier (si le clavier est prsent), soit on slectionne Evaluer
selection dans le petit M ( lintersection des deux barres de scroll), pour
avoir la rponse dans lditeur dexpressions.

2.2. LDITEUR DEXPRESSIONS

2.2.2

89

Comment slectionner

On peut slectionner directement avec la souris ou avec les flches du bloc des
flches de direction.
On peut aussi considrer une expression comme un arbre et parcourir cet arbre
laide des flches de direction.
Quand une expression est slectionne on peut :
monter dans larbre en selectionnant le pre avec la flche vers le haut,
descendre dans larbre en selectionnant le fils gauche avec la flche vers le
bas,
selectionner le frre droit ou gauche avec la flche vers la droite ou vers la
gauche,
changer lexpression avec son frre avec Ctrl et la flche vers la droite ou
vers la gauche,
supprimer un oprateur ou le nom dune commande en slectionnant lexpression et en tapant : backspace. Il faut noter quun deuxime backspace
effacera les arguments
Exemple On clique dans lcran de lditeur dexpressions et on tape x+1 puis
flche vers le haut pour slectionner x+1, puis * et on tape x+2 puis flche vers
le haut pour slectionner x+2 puis * et on tape x-1 puis flche vers le haut pour
slectionner x-1.
On a alors dans lcran de lditeur dexpressions lexpression (x+1)*((x+2)*(x-1)).
Puis on slectionne le tout et on appuie sur eval (menu ExpressionIAutres
ou bouton eval du clavier si on a choisi Montrer-> Clavier dans le menu
Cfg) pour avoir les 3 facteurs sur le mme plan (larbre nest plus binaire).
Donc maintenant on obtient :
(x+1)*(x+2)*(x-1).
On peut ensuite soit
slectionner (x+1)*(x+2) avec la souris puis on slectionne la commande
normal du menu Calc sous-menu Recriture.
On obtient alors (x^2+3 x+2) (x+2).
slectionner x+1, puis Ctrl et la flche vers la droite, pour changer x+1
et x+2.
Donc maintenant on obtient :
(x+2)*(x+1)*(x-1).
On peut ensuite slectionner (x+1)*(x-1) avec la souris puis on slectionne la commande normal du menu Calc sous-menu Recriture.
On obtient alors (x+2)*(x^2-1).

2.2.3

Comment diter une chane de caractres

Lorsque le curseur est actif dans un diteur dexpressions, il suffit dappuyer


sur la touche " pour transformer une expression en une chane de caractres et vice
versa.

90

CHAPITRE 2. SAISIE

2.2.4

Utilit de lditeur dexpressions

Avec la souris on peut mettre en surbrillance toute lexpression ou seulement


une partie de cette expression : cest alors sur cette partie que lon peut agir : par
exemple la modifier avec une commande de recriture (par exemple avec normal)
ou la factoriser (par exemple avec factor),...
On tape dans un diteur dxpressions :
1+4
On slectionne 4 et on appelle ifactor du menu CmdsIEntier, puis enter.
On obtient :
1+22

2.3

Les diteurs de matrices et les tableurs

Il faut tout dabord ouvrir un tableur avec Alt+t.


chaque tableur est attach un cran de gomtrie, une barre de menu (Fich
Edit Statistiques), des boutons (reeval,val,Save), deux cases (lune
donne le nom du fichier de sauvegarde et lautre le nom de la cellule slectionne) et deux lignes (lune contient une case de slection et une ligne dite ligne de
commandes qui sert soit remplir la cellule slectionne, soit afficher ce que
lon a mis dans la cellule slectionne, et lautre est la ligne dtat qui rappelle la
configuration du tableur et sert de bouton pour ouvrir un cran de configuration du
tableur).

2.3.1

Les sauvegardes dun tableur

Lorsque vous ouvrez un tableur, on vous demande son nom, par exemple sim,
ainsi toutes les sauvegardes ultrieures du tableur se feront dans le fichier sim.tab
et la matrice du tableur sera stocke dans la variable sim.
Vous avez la possibilt de changer ce nom au cours de votre travail et ce nom
peut alors ne pas tre le mme pour le fichier et la variable : vous pouvez avoir
toto.tab comme nom de fichier (nom qui est rappel cot du bouton Save)
et A comme nom de variable (nom qui est rappel dans la ligne dtat du tableur).
Les diffrentes sauvegardes se font avec le bouton Save ou laide du menu
Fich.

2.3.2

Les menus dun tableur

Un tableur a trois menus qui sont :


Fich Ce menu permet de sauver le tableur dans le fichier dont le nom figure
cot du bouton save , ou de le sauver dans un fichier sous un autre nom,
ou de sauver une sous-matrice du tableur dans une variable, ou dinsrer un
fichier contenant un tableur, ou de changer le nom de la variable contenant
le tableur et aussi dimprimer le tableur,
Edit Ce menu permet de comfigurer le tableur (voir ci-aprs), de remplir,
partir de la cellule slectionne, toutes les cellules situes vers le bas ou
vers la droite, avec la formule de la cellule slectionne. Edit permet aussi

2.3. LES DITEURS DE MATRICES ET LES TABLEURS

91

dajouter ou deffacer des lignes ou des colonnes, de trier les lignes ou les
colonnes et de changer la taille des lignes et des colonnes.
Statistiques Ce menu contient les fonctions de statistiques 1-d et
2-d.

2.3.3

La configuration dun tableur

La configuration du tableur se fait avec le menu EditIConfiguration de


la barre de menus li au tableur ou en ouvrant un cran de configuration du tableur
en cliquant sur la ligne dtat du tableur.
On a :
Format Pour accder un tableur il faut slectionner Tableur .
Pour accder un diteur de matrices, il faut slectionner Matrice.
Pour vous faciliter lentre dune matrice vous avez la possibilit de choisir son type, par exemple symtrique avec Matrice symtrique, (resp
quelconque, hermitienne..)
Deplacer -> pour deplacer le curseur automatiquement vers la droite
aprs le remplissage dune cellule,
Deplacer vers le bas pour deplacer le curseur automatiquement vers
le bas aprs le remplissage dune cellule,
Changer le nombre de lignes permet de changer le nombre de
lignes,
Changer le nombre de colonnes permet de changer le nombre de
colonnes,
Recalculer automatiquement pour avoir un recalcul automatique
du tableur un aprs chaque modification,
Ne pas recalculer automatiquement pour ne pas avoir un recalcul automatique du tableur un aprs chaque modification, mais seulement
quand on appuie sur le bouton reeval,
Distribuer une matrice sur plusieurs cellules permet de
remplir une matrice ou un tableur avec une sous-matrice. En effet, pour remplir une matrice ou un tableur, on peut le faire case par case (en entrant un
nombre dans chaque case), on peut aussi entrer une sous matrice (en entrant par exemple une expression qui svalue en une matrice) condition
davoir choisi de distribuer la matrice. Par exemple, si dans la premire case
on tape idn(3), si on a cliqu sur Distribuer une matrice sur
plusieurs cellules, cela a pour effet de remplir 3 lignes et 3 colonnes avec la matrice identit dordre 3,
Conserver une matrice dans une seule cellule permet de
mettre une matrice dans une case du tableur. Par exemple, si dans la premire
case on tape idn(3),si on a cliqu sur Conserver une matrice dans
une seule cellule, cela a pour effet de remplir la premire case par
la matrice identit dordre 3.
Portrait pour avoir lcran de reprsentation graphique du tableur droite
du tableur,
Paysage pour avoir lcran de reprsentation graphique du tableur en dessous du tableur,

92

CHAPITRE 2. SAISIE
Cacher graph pour ne pas avoir dcran de reprsentation graphique associ au tableur.

2.3.4

Les boutons dun tableur

On a trois boutons :
reeval permet dvaluer le tableur ce bouton est utile quand on nest pas
en mode automatique mais en mode manuel,
val permet davoir la valeur et non la formule dans la ligne dentre lorsquon clique sur une cellule,
Save pour sauver le tableur sous le nom donn au dbut (identique au sousmenu sauver du menu Fich).

2.4
2.4.1

Les commandes deffacement


Effacer dans le tableur

Pour effacer, on peut se servir du menu Edit sous-menu Ajouter/Effacer


pour pouvoir supprimer la ligne ou la colonne courante ou, pour effacer les lignes
ou les colonnes slectionnes.

2.4.2

Effacer lcran DispG de gomtrie : ClrGraph ClrDraw

Dans un programme, toutes les sorties graphiques dun programme seront effectues dans lcran DispG visible avec la commande DispG;. Pour effacer cet
cran DispG, on utilise la commande ClrGraph ou ClrDraw.
On tape :
ClrGraph()
On obtient :
Leffacement de lcran DispG de gomtrie

2.4.3

Effacer les crans de gomtrie : erase

Voir aussi : 1.10.3 et 3.5 erase na pas dargument.


La commande erase() efface lcran DispG, mais nefface ni les sorties graphiques, ni les crans de gomtrie mais influe sur la commande graph2tex. En
effet, erase permet deffacer lhistorique interne des graphiques et ainsi de pouvoir traduire en Latex laide de la commande graph2tex seulement les sorties
graphiques faites postrieurement la commande erase. On tape :
erase()
On obtient :
Leffacement de lhistorique interne des graphiques

2.4. LES COMMANDES DEFFACEMENT

2.4.4

93

Effacer une ligne de commande : touche esc

Leffacement de la ligne de commande o se trouve le curseur se fait en appuyant sur la touche esc de Xcas ou sur la touche Echap de votre ordinateur.
On tape :
sur la touche esc
On obtient :
Leffacement de la ligne de commande o se trouve le
curseur

2.4.5

Effacer les noms des variables dune seule lettre minuscule :


rm_a_z

rm_a_z na pas dargument.


rm_a_z efface tous les noms des variables dune seule lettre minuscule.
On connait le nom des variables affectes en utilisant la commande VARS ou en
utilisant la touche noire var du bandeau.
On tape :
VARS()
On obtient :
[A,B,a,b,eps]
On tape :
rm_a_z()
On obtient :
[a,b]
Si on tape maintenant :
VARS()
On obtient :
[A,B,eps]

2.4.6

Effacer toutes les variables : rm_all_vars

rm_all_vars na pas dargument.


rm_all_vars efface tous les noms des variables.
On connait le nom des variables affectes en utilisant la commande VARS ou en
utilisant la touche noire var du bandeau .
On tape :
VARS()
On obtient :

94

CHAPITRE 2. SAISIE
[A,B,a,b,eps]

On tape :
rm_all_vars()
On obtient :
[A,B,a,b,eps]
On tape :
VARS()
On obtient :
[]

2.5
2.5.1

Les variables
Le nom des variables et la variable CST

Un nom de variables est une suite de lettres ou chiffres commenant par une
lettre.
Attention ! ! ! il y a des noms qui sont dj employs pas le systme.
La variable CST permet de dfinir son propre menu, menu qui saffichera dans le
bandeau lorsquon appuie sur le bouton cust du bandeau.
On suppose que lon a crit deux fonctions tor et pgcd, et on tape par exemple :
CST:=[diff,["tor",tor],["pgcd",pgcd],["euro",6.55957]] qui
affichera diff tor pgcd euro dans le bandeau du bouton cust.
Pour rajouter une fonction CST on tape par exemple :
CST:=concat(CST,evalc).
Attention
Dans lexemple ci-dessus, euro nest pas une variable qui contient 6.55957,
mais le nom dun bouton du bandeau. Il y a donc une diffrence entre :
CST:=[evalc,["f",f],["a",6.55957]] et
CST:=[evalc,["f",f],["a",a]], dans la deuxime formulation le bouton a va renvoyer la valeur stocke dans la variable a et cette valeur changera si on
modifie a, condition que lorsque lon dfinit CST, la variable a ne soit pas encore
affecte (sinon a est evalue et a represente la valeur stocke du dbut), alors que
dans la premire formulation le bouton a va renvoyer 6.55957 quelque soit la
valeur stocke dans la variable a.
On peut aussi quoter a pour que a ne soit pas value et renvoie a lorsquon appuie
sur le bouton a du menu cust du bandeau, par exemple :
CST:=[evalc,["f",f],["a",a]].
Pour revenir au bandeau initial il faut utiliser le bouton home (voir aussi page 66).

2.5.2

Laffectation : := => sto Store

On peut utiliser les fonctions infixes := comme en Pascal ou => comme le


"sto" des calculatrices pour raliser une affectation ou encore,

2.5. LES VARIABLES

95

les fonctions prfixes, sto ou Store, darguments la valeur affecter et le nom


dune variable.
:= (ou => ou sto ou Store) permet daffecter une variable.
On tape (attention lordre des arguments !) :
a:=4
ou
4=>a
ou
sto(4,a)
ou
Store(4,a)
On obtient :
4
:= ou => permettent aussi de dfinir des fonctions.
On tape :
f(x):=sin(x)/x
ou
sin(x)/x=>f(x)
ou encore
f:=x->sin(x)/x
ou
x->sin(x)/x=>f
On peut aussi dfinir une fonction par morceaux :
une fonction dfinie par 2 valeurs,
par exemple, pour dfinir la fonction g qui vaut 1 si x > 0 et -1 si x 0 on
tape : On tape :
g(x):=ifte(x>0,1,-1)
ce qui est quivalent :
g(x):=if x>0 then 1; else -1; end_if
On tape (voir plus loin la diffrence avec ifte) :
g(x):=when(x>0,1,-1)
ou
g(x):=quand(x>0,1,-1)
ou
g(x):=IFTE(x>0,1,-1)
ou
g(x):=x>0?1:-1

96

CHAPITRE 2. SAISIE
En effet ifte (ou when ou quand ou IFTE) a trois arguments : une condition et deux expressions et ? est infix avec la condition gauche et droite
on met les deux expressions spares par :.
Si la condition est vraie, ifte (ou when ou quand ou IFTE ou ?) renvoie
la premire expression et sinon ifte (ou when ou quand ou IFTE ou ?)
renvoie la deuxime expression.
Remarque
La condition x! = a peut tre remplace par le rel r = x a :
si r == 0 la condition est fausse et sinon elle est vraie.
On tape pour dfinir la fonction qui vaut partout 0 sauf en 1 o elle vaut 1 :
h(x):=when(x-1,0,1)
est quivalent :
h(x):=when(x!=1,0,1)
Remarque : Diffrence entre ifte et les autres when....
On tape : f(x):=ifte(x>0,1,0);
g(x):=when(x>0,x,-x) ou g(x):=quand(x>0,1,0)
puis on tape f(x)
on obtient :
Ifte : Unable to check test Error : Bad Argument Value
ici x na pas de valeur : avec ifte ou if then else end_if il faut
que la variable x soit affecte pour pouvoir tester la condition (quand on
dfinit une fonction ce qui suit le := nest pas valu donc la dfinition de
f(x) ne pose pas de problme).
Pour la dfinition de g avec when...., la variable x na pas besoin dtre
affecte.
On tape g(x)
on obtient :
((x>0)? 1 : -1)
car ? est la version infixe de when.
une fonction dfinie par n valeurs,
par exemple, pour dfinir la fonction g qui vaut -1 si x < 1, 0 si 1 x
1 et 1 si x > 1, on tape :
g(x):=piecewise(x<-1,-1,x<=1,0,1)
piecewise utilise des paires condition/valeur ou valeur est renvoye si
sa condition est vraie ce qui implique que les conditions prcdentes sont
fausses. Si le nombre darguments est impair, la dernire valeur est la valeur
par dfaut (comme dans un switch).
piecewise est la gnralisation de when.
Pour dfinir la fonction f qui vaut -2 si x < 2, 3x + 4 si 2 x < 1, 1
si 1 x < 0 et x + 1 si x 0, on tape :
f(x):=piecewise(x<-2,-2,x<-1,3x+4,x<0,1,x+1)
On peut alors faire le graphe de f en tapant :
plotfunc(f(x))

2.5. LES VARIABLES

2.5.3

97

Laffectation par rfrence dans une variable dsignant un lment dune liste ou dune matrice : =<

On peut utiliser loprateur infix =< pour stocker par rfrence le deuxime
argument dans une variable (dsignant un lment dune liste ou dune matrice)
donne comme premier argument.
Voir aussi 8.4.15 et 8.4.14. On tape :
a:=[1,2,3,4,5]
Pour changer la valeur de a[1] il est prfrable de le faire par rfrence cest
dire sans faire de recopie, on tape :
a[1]=<5
Dans un programme, il est prfrable dutiliser loprateur infix =< pour changer
un lment dune liste ou dune matrice contenue dans une variable . Exemple
On cherche pour tout n N, la liste des nombres entiers k vrifiant 0 < k < 2n et
dont la somme des chiffres, dans lcriture en base 2, est gale p ou qui scrivent
en base 2 avec des 0 et p 1.
On sait que convert(k,base,2) renvoie la liste de 0 et de 1 de lcriture en
base 2 de k en commenant par le chiffre des units. On a, par exemple :
convert(2,base,2)=[0,1].
On connait la longueur de la liste rsultat qui est comb(n,p) puisque il peut
y avoir n chiffres et que parmi ces n chiffres il doit y avoir p 1. On peut donc
initialiser la liste par :
L:=makelist(0,1,comb(n,p));.
On peut aussi vouloir initialiser la liste L par la liste vide et dans ce cas il faut
mettre L:=[0$0] et ne pas mettre L:=[]. La diffrence est subtile : [0$0] est
une liste qui est cre lors de chaque excution du programme alors que aprs la
compilation du programme, L:=[] fait pointer L sur la liste [] et cette liste sera
modifie par les diffrents L[k]=<j en LR et restera modifie en fin dexcution
ce qui fait que si on effectue une autre excution du programmeL est initialise par
LR car elle pointe sur la liste LR.
On tape :
truc(p,n):={
local j,k,L;
L:=makelist(0,1,comb(n,p));
k:=0;
for (j:=2^p-1;j<=2^n-2^(n-1-p);j++){
if (sum(convert(j,base,2))==p){
L[k]=<j;
k:=k+1;
};
}
return L;
}
:;

98

CHAPITRE 2. SAISIE

Puis : J:=truc(10,17):;J[0];J[10] renvoie : Done,1023,2046


convert(1023,base,2) renvoie [1,1,1,1,1,1,1,1,1,1]
convert(2046,base,2) renvoie [0,1,1,1,1,1,1,1,1,1,1]
Comme la liste J a pour longueur comb(17,10)=19448 si on met dans le programme L[k]:=j; au lieu de L[k]=<j;, Xcas effectue 19448 recopie de cette
liste ce qui allonge lexecution du programme....

2.5.4

Lincrmentation dune variable : += -= *= /=

+= est un raccourci pour ajouter une expression la valeur contenue dans une
variable.
On tape :
a:=a+4
ou
a+=4
-= est un raccourci pour soustraire une expression la valeur contenue dans une
variable.
On tape :
a:=a-4
ou
a-=4
*= est un raccourci pour multipliser la valeur contenue dans une variable par une
expression.
On tape :
a:=a*4
ou
a*=4
/= est un raccourci pour diviser la valeur contenue dans une variable par une expression.
On tape :
a:=a/4
ou
a/=4

2.5. LES VARIABLES

2.5.5

99

Archiver et dsarchiver des variables et leur contenu : archive


unarchive

archive a comme argument une chaine de caractre (le nom du fichier darchive)
et une liste de variables.
archive sauve le contenu de ces variables dans le fichier ayant pour nom la
chaine donne en argument.
Le format de sauvegarde est un format interne Xcas, ce qui a comme intrt de
pouvoir relire ces valeurs plus rapidement. On tape :
archive("toto",[a,b,f])
On obtient :
cre le fichier "toto" contenant les valeurs des
variables a,b,f
unarchive a comme argument une chaine de caractre (le nom dun fichier darchive cr avec la commande archive).
unarchive lit les valeurs se trouvant dans le fichier ayant pour nom la chaine
donne en argument, si ce fichier a t cr avec la commande archive.
On tape :
unarchive("toto")
On obtient :
les contenus des variables sauves avec archive

2.5.6

Copier sans lvaluer le contenu dune variable : CopyVar

CopyVar a comme arguments le nom de deux variables.


CopyVar copie sans lvaluer le contenu de la premire variable dans la deuxime
variable.
On tape (attention lordre) :
a:=c
c:=5
CopyVar(a,b)
b
On obtient :
c
puis on tape :
c:=10
b

100

CHAPITRE 2. SAISIE

On obtient :
10
Une modification du contenu de c va modifier le contenu de b car b contient c.
On tape :
a:=d
b
On obtient :
10
On tape :
purge(c)
b
On obtient :
c
puisque b contient c.

2.5.7

Faire une hypothse sur une variable : assume supposons

assume ou supposons permet de faire des hypothses sur une variable.


assume ou supposons a comme argument un nom de variable suivi dune galit ou dune ingalit reprsentant lhypothse faite ou bien un nom de variable
suivi dune virgule et de son type. On peut mettre plusieurs hypothses condition
de les relier par and ou or selon ce que lon veut faire ! Toutefois, il faut utiliser
additionally comme deuxime argument de assume pour spcifier le type
de la variable et une plage de valeurs pour cette variable.
assume renvoie le nom de la variable sur laquelle on a fait les hypothses ou le
type de cette variable.
Attention Si on fait une autre hypothse avec assume, lancienne hypothse est
efface : si vous voulez rajoutez une nouvelle hypothse il faut utiliser la commande additionally ou mettre additionally comme deuxime argument
de assume.
Remarques Cela permet de faire de la gomtrie interactive tout en faisant du calcul formel. Par exemple, si on met en gomtrie :
assume(a=2);assume(b=3); A:=point(a+i*b), la figure sera construite
avec les valeurs donnes aux variables mais les calculs seront faits avec les variables symboliques a et b car pour toutes les sorties graphiques et seulement sur
celles-ci la variable est value.
On tape
assume(a=2)
Ou on tape

2.5. LES VARIABLES

101
supposons(a=2)

Ou on tape
assume(a=2)
Ou on tape
supposons(a:=2)
Ou on tape directement :
supposons(a=[2,-5,5,0.1])
On obtient :
un curseur permettant de faire varier a

Lorsque lon fait varier a la commande assume(a=2) se transforme en supposons(a=[2.1,-5.0,5.0,0.1


et les niveaux qui suivent sont valus. Si il ny a rien sur le niveau suivant on aura
undef en rponse.
Cela signifie que a peut varier entre -5 et 5 avec un pas de 0.1 et que a vaut 2.1.
Si sur les deux niveaux suivants on a
evalf(a+2) et evalf(a+3)
les rponses volueront selon la position du curseur (curseur en 2.1, on aura 4.1
et 5.1 puis curseur en 2.2, on aura 4.2 et 5.2). Mais si sur les deux niveaux
suivants on a a+2 et a+3, les rponses seront toujours a+2 et a+3.
On tape pour supposer que la variable formelle a est positive :
assume(a>0)
On obtient :
a
On tape :
assume(a)
On obtient :
assume[DOM_FLOAT,[line[0,+(infinity)]],[0]]
cela signifie que a est une variable relle appartenant [0; + et que 0 est exclu
(on a le domaine, lintervalle et les valeurs exclues).
On tape pour supposer que la variable formelle a est dans [2; 4[]6; [ :
assume((a>=2 and a<4) or a>6)
On obtient :
a
On tape :
assume(a)

102

CHAPITRE 2. SAISIE

On obtient :
assume[DOM_FLOAT,[[2,4],[6,+(infinity)]],[4,6]]
cela signifie que a est une variable relle appartenant [2; 4] [6; [ et que 4 et 6
sont exclus (on a le domaine, lintervalle et les valeurs exclues).
On tape :
abs(1-a)
On obtient :
-1+a
On tape pour dire que b est un entier :
assume(b,integer)
On obtient :
DOM_INT
On tape :
assume(b)
On obtient :
[DOM_INT]
On tape pour dire que b est un entier suprieur strictement 5 :
assume(b,integer);
assume(b>5,additionally)
On obtient :
DOM_INT
puis
b
On tape :
assume(b)
On obtient :
[DOM_INT]

2.5. LES VARIABLES

103

Remarque
Lorsque assume a comme argument une seule galit et que la commande est
tape dans une ligne dentre dun cran de gomtrie, cela met un petit curseur
en haut et droite de cet cran. Le nom du paramtre est not droite du curseur.
Ce curseur permet de changer la valeur du paramtre et cette valeur sera note
gauche du curseur. On tape par exemple :
assume(a=[2,-10,10,0.1])
Cela signifie que tous les calculs seront faits avec a quelconque, condition que
les points aient des coordonnes exactes, mais que la figure sera trace avec a=2
et que lon pourra faire varier cette figure avec le petit curseur en fonction de a de
-10 +10, avec un pas de 0.1. Si on met assume(a=[2,-5,5), a varie de
-5 +5 avec un pas de (5-(-5))/100), et si on met assume(a=2), a varie
de WX- WX+ et le pas est ((WX+)-(WX-))/100.
Attention En gomtrie il faut donc travailler avec des coordonnes exactes
par exemple :
A:=point(i);assume(b:=2); B:=point(b); puis on tape :
longueur(A,B);
On obtient :
sqrt((-b)^2+1)
Mais :
A:=point(0.0+i);assume(b:=2); B:=point(b); puis on tape :
longueur(A,B);
p
On obtient la valeur approche de (1 + 4) :
2.2360679775
Attention Un paramtre dfini par assume nest valu que pour les sorties graphiques, sinon il faut utiliser evalf.
Exemple : On tape :
dr(m):=ifte(m==2,droite(x=1),droite(x+(m-2)*y-1))
puis dans un niveau de gomtrie, on tape :
supposons(a=[2.0,-5,5,0.1])
dr(evalf(a))
qui renvoie droite(x=2) lorsque a:=2 et droite(y=(-5*x+5)) lorsque
a:=2.2 alors que
dr(a) renvoie droite(y=(-1/(a-2)*x+1/(a-2))) quelque soit a et il y
aura donc une erreur pour a=2....
Attention la diffrence entre assume et element
Si b:=element(0..3,1,0.1) est tap dans une ligne dentre dun cran de
gomtrie, cela met aussi un petit curseur en haut et droite de cet cran avec b=1
et on pourra faire varier b avec le petit curseur de 0 3 avec un pas de 0.1. Mais
la variable b nest pas formelle !
On tape
a;b
On obtient :
(a,1)

104

2.5.8

CHAPITRE 2. SAISIE

Faire une hypothse supplementaire sur une variable : additionally

additionally permet de faire des hypothses supplmentaires sur une variable.


En effet, si on fait une autre hypothse avec assume, lancienne hypothse est efface. Donc, si vous voulez rajoutez une nouvelle hypothse il faut utiliser la commande additionally ou mettre additionally comme deuxime argument
de assume.
additionally a les mmes arguments que assume ou supposons : un nom
de variable suivi dunegalit ou dune ingalit reprsentant lhypothse faite ou
bien un nom de variable suivi dune virgule et de son type. On peut mettre plusieurs
hypothses condition de les relier par and ou or selon ce que lon veut faire !
On est oblig dutiliser additionally pour spcifier le type de la variable et
une plage de valeurs pour cette variable.
On tape pour dire que b est un entier suprieur strictement 5 :
assume(b,integer);
additionally(b>5)
ou bien
assume(b,integer);
assume(b>5,additionally)
On obtient :
DOM_INT,b
puis
b
On tape :
assume(b)
On obtient :
[DOM_INT]

2.5.9

Connaitre les hypothses faites sur une variable : about

about a comme argument un nom de variable.


about permet de connaitre les hypothses faites sur cette variable.
On tape :
assume(a,real);additionally(a>0)
ou
assume(a,real);assume(a>0,additionally)
puis,

2.5. LES VARIABLES

105
about(a)

On obtient :
assume[DOM_FLOAT,[0,+(infinity)],[0]]
assume[ ] signifie que lon a une liste dun type particulier.
Le dernier 0 veut dire que 0 est exclus de lintervalle [0,+(infinity)].
On tape :
assume(b,real);additionally(b>=0 and b<2)
ou
assume(b,real);assume(b>=0 and b<2,additionally)
puis,
about(b)
On obtient :
assume[DOM_FLOAT,[0,2],[2]]
Le dernier 2 veut dire que 2 est exclus de lintervalle [0,2].
On tape :
about(x)
On obtient :
x
ce qui veut dire que x est une variable formelle.

2.5.10

Effacer le contenu dune variable : purge DelVar

purge ou DelVar permet deffacer le contenu dune variable ou dannuler une


hypothse faite sur cette variable.
On tape :
purge(a)
si a nest pas affect on obtient en mode direct "a not assigned" et sinon
lancienne valeur est renvoye (ou les hypothses faites sur cette variable sont renvoyes) et la variable a redevient formelle et sans hypothse.
On peut aussi taper :
purge(a,b)
pour effacer le contenu des variables a et b.

106

2.5.11

CHAPITRE 2. SAISIE

Effacer le contenu de toutes les variables : restart

restart permet deffacer le contenu de toutes les variables et dannuler les hypothses faites sur ces variables.
On tape :
A:=point(1+i);assume(n>0);
puis
restart
On obtient :
[A,n]
si les variables [A,n] avaient t les seules variables affectes.

2.5.12

Accs aux rponses : ans(n)

ans doit tre utilis si on travaille sans modifier les lignes dj valides. En effet, les questions et les rponses sont numerotes en partant de 0 et ce numro ne
correspond pas aux numros des lignes dentre, puisque lon peut, par exemple,
modifier la premire ligne aprs avoir rempli 4 lignes et cette modification aura
comme numro 4.
Si n 0, ans(n) permet de dsigner la rponse de numro n + 1 et,
Si n < 0, ans(n) permet de dsigner la (n)-ime rponse prcdente.
Ainsi :
ans() ou ans(-1) dsigne la rponse prcdente,
ans(0) dsigne la premire rponse (celle correspondant la premire commande demande). Attention Si vous avez effac des niveaux, les rponses de
ces niveaux ne sont pas effaces et sont comptes dans les ans(n).

2.5.13

Pour ne pas afficher la rponse : nodisp :;

Pour ne pas encombrer la feuille, on peut vouloir que la rponse ne saffiche


pas : pour cela il faut appliquer la fonction nodisp la question ou bien termin
la question par :;.
On tape par exemple dans une ligne dentre :
A:=[1,2,3,4]
On obtient :
[1,2,3,4]
et ans() dsigne [1,2,3,4] cest dire A.
On tape :
nodisp(A:=[1,2,3,4])
Ou on tape :
A:=[1,2,3,4]:;

2.6. LES RPERTOIRES

107

On obtient :
Done
ce qui veut dire que laffectation a bien eu lieu et dans ce cas ans() dsigne
Done.

2.5.14

Accs aux questions : quest(n)

quest doit tre utilis si on travaille sans modifier les lignes dj valides. En
effet, les questions et les rponses sont numerotes en partant de 0 et ce numro ne
correspond pas aux numros des lignes dentre, puisque lon peut, par exemple,
modifier la premire ligne aprs avoir rempli 4 lignes et cette modification aura
comme numro 4.
Si n 0, quest(n) permet de dsigner la question de numro n et, si n < 0
quest(n) permet de dsigner la (n)-ime question prcdente.
Ainsi :
quest() ou quest(-1) dsigne la question prcdente,
quest(0) dsigne la premire question demande.
Remarque
Pour ne pas avoir retaper une commande, on peut se dplacer dans la liste des
commandes tapes prcdemment en mettant le curseur dans une ligne de commandes et en tapant une ou plusieurs fois Ctrl+ ou Ctrl+.

2.6
2.6.1

Les rpertoires
Comment crer un rprtoire sur vtre disque dur

Xcas peut se dplacer dans le rpertoire de vtre disque dur. On rappelle que
sous Unix la commande mkdir permet de crer de nouveaux rpertoires.
On tape par exemple (sous Unix) : mkdir toto
et cela cre le sous rpertoire toto partir du rpertoire courant.

2.6.2

Comment sauver un fichier dans un rprtoire de vtre disque


dur

Vous avez cre un rpertoire sur votre disque dur qui sappelle toto.
Travailler dans ce rpertoire depuis Xcas est facile : il suffit de taper dans la ligne
de commande :
cd puis entre guillemets, le chemin pour accder ce rprtoire.
On tape :
cd("toto")
ou en indiquant entre guillemets, un chemin depuis le rpertoire racine par exemple :

cd("/home/texte/toto")

108

CHAPITRE 2. SAISIE

Ainsi les fichiers que vous sauverez depuis Xcas, dans vtre disque dur seront
sauvs dans ce rpertoire.
Attention ! ! !
Quand on change de rprtoire les variables qui sont conserves dans des fichiers
dextention .cas sont celles du nouveau rprtoire. Donc les variables changent
quand on change de rprtoire.

2.6.3

Comment crer un rprtoire de travail : NewFold

On peut aussi crer des rpertoires de travail qui sont internes Xcas avec la
commande NewFold. Cela permet davoir des variables de mme nom mais dans
des rpertoires diffrents.
Depuis Xcas on tape par exemple :
NewFold(toto)
On obtient :
la cration du sous-rpertoire "toto"

2.6.4

Comment aller dans un rprtoire de travail : SetFold

On utilise la commande SetFold pour aller dans un rprtoire de travail interne Xcas.
On tape par exemple dans Xcas :
SetFold(toto)
On obtient :
on se trouve dans le sous-rpertoire "toto"
On tape par exemple dans Xcas :
SetFold(home)
Ou
SetFold(main)
On obtient :
on se trouve dans le rpertoire courant
Attention ! ! !
Quand on change de rprtoire de travail les variables sont celles du nouveau rprtoire : vous pouvez donc avoir des variables de mme nom contenant des valeurs diffrentes dans diffrents rpertoires. Donc les variables changent quand on
change de rprtoire de travail.

2.6. LES RPERTOIRES

2.6.5

109

Nom du rprtoire en cours : GetFold

GetFold renvoie le nom du rprtoire dans lequel on se trouve. On tape par


exemple dans Xcas :
SetFold(toto)
puis
GetFold()
On obtient :
toto([])

2.6.6

Effacer un rprtoire vide : DelFold

DelFold efface le rprtoire vide de nom donn dans largument. Xcas renvoie
une erreur si ce rpertoire nest pas vide. On tape par exemple dans Xcas :
DelFold(toto)
On obtient :
([])

2.6.7

Comment connaitre les variables et les rprtoires crs : VARS

VARS na pas dargument.


VARS() renvoie la liste des variables du rprtoire courant et des noms des sousrprtoires du rprtoire courant.
On peur aussi utiliser le bouton var du bandeau si on a choisi Montrer->Bandeau
dans le menu Cfg. Ce bouton var affiche dans le bandeau les noms des variables
affectes et les noms des sous-rprtoires du rprtoire courant.
Attention ! ! !
Quand on change de rprtoire les variables sont celles du nouveau rprtoire.
Donc les variables changent quand on change de rprtoire.

2.6.8

Lire un fichier depuis Xcas : read

Pour valider une ou des fonctions se trouvant dans un fichier ou pour excuter
une suite dinstructions se trouvant dans un fichier, on utilise read en mettant le
nom du fichier entre des guillemets ("...").
On tape :
read("pgcd.cxx")
ou encore si pgcd.cxx se trouve dans le rprtoire toto :
read("/home/texte/toto/pgcd.cxx") ou read("toto/pgcd.cxx")
On peut aussi faire :
Charger session du menu Fich puis mettre pgcd.cxx comme nom de fichier ou si pgcd.cxx se trouve dans le rprtoire toto mettre toto/pgcd.cxx
comme nom de fichier.
Remarque

110

CHAPITRE 2. SAISIE

On utilise plutt read pour des fichiers contenant des fonctions (fichiers .cxx)
et Charger session pour des fichiers contenant des scripts (fichiers .cas).
Par exemple un script contenant des instructions gomtriques sera excut mais
restera fig avec read (on ne peut pas faire bouger les points) par contre avec
Charger session un script contenant des instructions gomtriques sera excut et sera interactif (on peut faire bouger les points).

Chapitre 3

Le graphique
3.1

Gnralits

Si le graphe dpend dune fonction utilisateur, il faut que la fonction soit dfinie
lorsque le(s) paramtre(s) a (ont) une valeur formelle, ce qui peut se faire en testant
le type du paramtre, comme dans lexemple suivant : Je dfinis f avec le test du
type du paramtre et g sans le test par :
f(x):= {
if (type(x)!=DOM_FLOAT) return f(x);
while(x>0){ x--; }
return x;
}:;
g(x):= {
while(x>0){ x--; }
return x;
}:;

Si je tape :
F:=plotfunc(f(x)) ou G:=plotfunc(g(x)) jobtiens le mme graphe.
Le problme apparait lorsque x na pas de valeur et que lon rutilise G.
Mais si on fait :
G:=plotfunc(g(x)) puis symetrie(droite(y=x),G) ou mme simplement G on a lerreur :
"Unable to eval test in loop : x>0.0 Error: Bad Argument
Value"
parce que lvaluation de g(x) ne peut pas se faire si x est formel.
Par contre, F:=plotfunc(f(x)) puis symetrie(droite(y=x),F) renvoie bien le symtrique du graphe par rapport la premire bissectrice grce au
test de la ligne :
if (type(x)!=DOM_FLOAT) return f(x);. Dou lintrt de rajouter le test.
Par contre on peut taper directement sans provoquer derreurs :
symetrie(droite(y=x),plotfunc(g(x))).
Explications
Il faut savoir que dans les rponses de certaines commandes (par exemple G:=plotfunc(g(x)))
il va figurer lexpression formelle de g(x) (par exemple G contient expr("curve(group[pnt[x+(i)*g(x),
111

112

CHAPITRE 3. LE GRAPHIQUE

Lors de lvaluation de G il y aura une erreur car x+(i)*g(x) ne pourra pas tre
valu puisque lvaluation de g(x) provoque lvaluation du test x>0 qui ne peut
pas tre valu car x na pas de valeur ....do une erreur mais si dans la fonction
figure le test : if (type(x)!=DOM_FLOAT) return g(x); cela supprime lvaluation de g(x) et donc lerreur due au test x>0.
En effet, F:=plotfunc(f(x)) puis symetrie(droite(y=x),F) renvoie bien le symtrique du graphe par rapport la premire bissectrice grce au test
de la ligne :
if (type(x)!=DOM_FLOAT) return f(x);.
Par contre on peut taper directement sans provoquer derreurs :
symetrie(droite(y=x),plotfunc(g(x)))

3.2

Lcran graphique et ses boutons

Un cran graphique 2-d ou 3-d souvre automatiquement en rponse dune


commande graphique 2-d ou 3-d. un cran graphique 2-d ou 3-d est attach des
boutons situs en haut et droite de cet cran.
Un cran de gomtrie plane souvre avec les touches Alt+g : cest un cran graphique 2-d interactif muni de lignes dentre, dune barre de menus contenant les
menus Fich Edit et dun bouton Save. Cet cran graphique est interactif : on
peut dfinir des points et des segments en cliquant avec la souris.
Un cran de gomtrie 3-d souvre avec les touches Alt+h : cest un cran graphique 3-d muni de lignes dentre, dune barre de menus contenant les menus
Fich Edit et dun bouton Save. Les boutons dun cran graphique 2-d et 3-d
sont les mmes en apparence mais leurs contenus sont quelquefois diffrents :
les flches de couleur rouge servent se promener sur laxe des x,
les flches de couleur verte servent se promener sur laxe des y,
les flches de couleur bleue servent en 2-d augmenter ou diminuer lchelle
des y (pour faire un zoom selon les y), et en 3-d se promener sur laxe des z,
les boutons in (resp out) permettent de faire des zooms cest dire augmente (resp diminue) lchelle des x et des y,
le bouton permet davoir un repre orthonorm,
le bouton cfg permet de changer de configuration (cf 3.4)
le bouton I| permet de dmarrer ou darrter une animation,
le bouton M permet avec ses menus
Voir davoir des menus simulant les boutons ci-dessus,
Trace dintervenir sur une trace,
Animation dintervenir sur une animation,
3-d davoir diffrentes vues dun graphique 3-d,
Export/Imprimer dimprimer le graphique avec un fichier .eps ou
de traduire le graphique en Latex.

3.3. LA CONFIGURATION DE LCRAN GRAPHIQUE

3.3

113

La configuration de lcran graphique

Avant de faire un trac, il faut rgler les diffrents paramtres de la configuration de lcran graphique :
le menu CfgIConfiguration graphique (cf section 1.6.2) rgle les paramtres de tous les graphiques qui se feront lors de la session. On peut changer
ensuite ses paramtres au coup par coup avec le bouton cfg attach chaque cran
graphique (cf3.4).
Les commandes du cas qui ont comme rponses un graphique 2-d ou 3-d seront
tapes dans une ligne dentre. Toutefois les commandes du cas qui ont comme
rponses un graphique 2-d peuvent aussi tre tapes soit dans une ligne dentre
dun cran de gomtrie. Attention ! Un cran de gomtrie est un cran graphique
interactif.
Les commandes graphiques se trouvent dans le sous-menu Graphic du menu
Cmds.
Les commandes de gomtrie se trouvent dans le menu Geo.

3.4

Configuration graphique avec cfg

Le bouton cfg permet de rgler la fentre graphique.


WX-,...,WZ dsignent les coordonnes de ce qui est visible. Pour effacer
facilement les cases, on peut mettre les plages en surbrillance en utilisant
soit Shift+Tab qui met en surbrillance la plage qui prcde celle o se
trouve le curseur, soit Ctrl+Tab qui met en surbrillance la plage qui est
suit celle o se trouve le curseur.
Pixels en 2-d, permet de dfinir les valeurs de X-tick et de Y-tick en
prenant comme unit le pixel,
X-tick, Y-tick pour modifier lcartement des graduations mises sur
les axes x et y, lunit est le pixel si Pixels a t coch ou sinon lunit
depent des units dfinies par WX-,WX+,WY-,WY+,
ry,rz,rx en 3-d, sont les valeurs en degrs des angles dEuler : ces valeurs permettent de retrouver facilement la position que lon a choisie pour
le repre (cf 10.2),
Montrer les noms pour voir les noms des points ou des objets gomtrique ou ne pas les voir,
Autoname il faut mettre une lettre. Ainsi, au fur et mesure que lon clique
dans lcran de gomtrie, les noms des points seront dfinis automatiquement en commenant par cette lettre en sautant les points dj dfinis,
Montrer les axes pour voir les axes ou ne pas les voir,
animate pour donner le temps daffichage des objets lors dune animations
(en faisant bouger la souris droite ou gauche on augmente ou on diminue
ce temps ou on tape un nombre),
Round pour avoir les coordonnes visibles arrondies automatiquement au
dizaines,
Default remet les paramtre choisis par dfaut,
Autoscale choisit les chelles de faon automatique et approprie,

114

CHAPITRE 3. LE GRAPHIQUE
Apply a le mme effet que la touche enter (pour valider une valeur sans
fermer la fentre cfg),
OK pour valider et fermer la fentre cfg,
Annuler pour annuler (annule cequi na pas t valid par enter ou
Apply) et fermer la fentre cfg.

3.5

Pour transformer un graphique en un fichier Latex

Voir aussi : 1.10.3 et 1.10.5 Il faut employer la commande graph2tex("nom.tex")


(ou pour un graphique 3-d graph3d2tex("nom.tex")) pour transformer tous
les graphiques raliss en le fichier Latex nom.tex.
Ce fichier pourra tre visualis seul ou bien insr dans un autre fichier Latex en
otant len tte \documentclass{article}...\begin{document}, et le
\end{document} de la fin et de rajouter \usepackage{pstricks} dans
len-tte du fichier dans lequel on linsre.
Attention Dans ce fichier tous les graphiques seront superposs : pour navoir
quun seul graphique, il faut supprimer les niveaux contenant les autres graphiques
avant de faire graph2tex("nom.tex").

3.6

Graphe dune matrice de transition probabiliste :


graphe_probabiliste

graphe_probabiliste a comme argument une matrice de transition probabiliste A ayant au plus 7x7 entres. On peut rajouter en option la liste des positions des sommets du graph associ la matrice A.
On tape :

graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0],
[0,0,1/2,1/2],[1/4,1/4,1/4,1/4]])

On obtient :

3.6. GRAPHE DUNE MATRICE DE TRANSITION PROBABILISTE :GRAPHE_PROBABILISTE115

On tape :
graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0],
[0,0,1/2,1/2],[1/4,1/4,1/4,1/4],
["Gare","Campus","Bibli","Centre"]])
On obtient :

On tape :
graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0],
[0,0,1/2,1/2],[1/4,1/4,1/4,1/4]],[0,1,i,1/2+2/3*i])
On obtient :

116

CHAPITRE 3. LE GRAPHIQUE

On tape :

graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0],
[0,0,1/2,1/2],[1/4,1/4,1/4,1/4],
["Gare","Campus","Bibli","Centre"]],
[0,1,i,1/2+2/3*i])
On obtient :

Si on ne met pas les "" autour dun nom, si ce nom est le nom dune variable qui
contient une valeur cest cette valeur que sera affiche sinon les noms safficheront
sans "".
On peut aussi dfinir les points pour dfinir le graphe, par exemple, on tape dans
un nieau de gomtrie 2d :
:
A:=point(0);
B:=point(1);
C:=point(i);
D:=point(2/2+2i/3);
graphe_probabiliste([[1/2,1/3,1/12,1/12],[1/3,1/2,1/6,0],
[0,0,1/2,1/2],[1/4,1/4,1/4,1/4]],[A,B,C,D])
On peut alors bouger les points A,B,C,D en mode pointeur.
On obtient aprs avoir boug D :

3.7. GRAPHE DUNE FONCTION : PLOTFUNC FUNCPLOT DRAWFUNC GRAPH117

3.7
3.7.1

Graphe dune fonction : plotfunc funcplot DrawFunc


Graph
Graphe en 2-d

plotfunc(f(x),x) trace la reprsentation graphique de y = f (x) et


plotfunc(f(x),x=a..b) trace la reprsentation graphique de y = f (x)
lorsque a x b.
On tape :
plotfunc(x^2-2)
ou
plotfunc(a^2-2,a=-1..2)
On obtient :
la reprsentation graphique de y=x^2-2
On peut rajouter un paramtre pour indiquer le saut dchantillonnage en x cest
dire le pas en x que lon veut utiliser pour faire le graphe en utilisant xstep.
On tape :
plotfunc(x^2-2,x,xstep=1)
On obtient :
une ligne polygonale qui est la reprsentation
grossire de y=x^2-2
On peut aussi spcifier le nombre de points dchantillonage de la fonction reprsenter en utilisant nstep la place de xstep. Par exemple, on tape :
plotfunc(x^2-2,x=-2..3,nstep=30)

118

3.7.2

CHAPITRE 3. LE GRAPHIQUE

Graphe en 3-d

plotfunc a deux arguments principaux et ventuellement le saut dchantillonnage des variables (xstep= et ystep=) cest dire le pas en x et en y que lon
choisi pour le graphe. On peut aussi spcifier le nombre de points dchantillonnage de la fonction reprsenter en utilisant nstep.
Les deux arguments principaux de plotfunc sont : une expression de deux variables ou une liste de plusieurs expressions de deux variables et la liste des deux
variables.
plotfunc trace la (ou les) surfaces dfinie par le premier argument.
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des z.
Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plotfunc( x^2+y^2,[x,y])
On obtient :
Un graphique en 3-d reprsentant z=x^2+y^2
On tape :
plotfunc(x*y,[x,y])
On obtient :
La surface z=x*y
On tape :
plotfunc([x*y-10,x*y,x*y+10],[x,y])
On obtient :
Les surfaces z=x*y-10, z=x*y et z=x*y+10
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plotfunc(x*sin(y),[x=0..2,y=-pi..pi])
On obtient :
Une portion de surface z = x y
On peut rajouter un paramtre pour indiquer le saut dchantillonnage en x et
en y cest dire le pas en x et en y que lon veut utiliser pour faire le graphe, en
utilisantxstep et ystep.
On tape :
plotfunc(x*sin(y),[x=0..2,y=-pi..pi],xstep=1,ystep=0.5)

3.7. GRAPHE DUNE FONCTION : PLOTFUNC FUNCPLOT DRAWFUNC GRAPH119


On obtient :
Une portion de surface z = x y
On peut aussi spcifier le nombre de points dchantillonage de la fonction reprsenter en utilisant nstep la place de xstep et ystep. Par exemple, on tape :
plotfunc(x*sin(y),[x=0..2,y=-pi..pi],nstep=300)
On obtient :
Une portion de surface z = x y
Remarque
Si vous voulez limpression ou la traduction en Latex, il faut utiliser :
MIExporter/ImprimerIPrint(with Latex).

3.7.3

Graphe "3-d" avec les couleurs de larc en ciel

plotfunc permet aussi de reprsenter une expression Xpr dpendant de deux


variables valeur dans R, en reprsentant z=Xpr par une couleur. Cela permet de
visualiser les points ayant mme cote.
Les deux arguments principaux de plotfunc sont alors i*Xpr et la liste des
noms de deux variables.
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On peut rajouter un paramtre pour indiquer le pas en x et en y que lon veut utiliser pour faire le graphe, en utilisantxstep et ystep.
On peut aussi spcifier le nombre de points dchantillonage de la fonction reprsenter en utilisant nstep la place de xstep et ystep.
On tape :
plotfunc(i*x*sin(y),[x=0..2,y=-pi..pi])
On obtient :
Une portion de surface z = x y avec les couleurs de
larc en ciel

3.7.4

Graphe en "4D"

plotfunc permet aussi de reprsenter une expression Xpr valeur dans C mais
non imaginaire pur : on reprsente abs(Xpr) selon Oz et arg(Xpr) par une
couleur. Cela permet de visualiser les points ayant mme argument.
Si lexpression Xpr est imaginaire pur cest Xpr/i qui est represent en dgrad
(cf 3.7.3) Les deux arguments principaux de plotfunc sont alors une expression
de deux variables valeur dans C et la liste des noms des deux variables.
On peut aussi spcifier le nombre de points dchantillonnage de la fonction
reprsenter en utilisant nstep et demander un affichage en une forme pleine
(affichage=rempli).
plotfunc trace la surface aux couleurs de larc en ciel dfinie par le module du
premier argument soit z=abs(Xpr), chaque couleur est une valeur de arg(Xpr).

120

CHAPITRE 3. LE GRAPHIQUE

On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des z.
Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plotfunc((x+i*y)^2,[x,y])
On obtient :
Un graphique en 3-d color reprsentant
z=abs((x+i*y)^2 et permettant de visualiser les points
ayant mme argument
On tape :
plotfunc((x+i*y)^2,[x,y],affichage=rempli)
On obtient :
La surface prcedente selon une forme pleine aux couleurs de larc en ciel
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plotfunc((x+i*y)^2,[x=-1..1,y=-2..2], nstep=900,
affichage=rempli)
On obtient :
La portion de la surface prcedente selon une forme pleine aux couleurs de larc
en ciel avec x entre -1 et 1, y entre -2 et 2 et avec 900 points dchantillonnage
Remarque
Si vous voulez limpression ou la traduction en Latex, il faut utiliser :
MIExporter/ImprimerIPrint(with Latex).

3.8

Graphe 2-d pour compatibilit Maple : plot graphe

plot(f(x),x) trace la reprsentation graphique de y = f (x).


On tape :
plot(x^2-2,x)
On obtient :
la reprsentation graphique de y=x^2-2
On peut rajouter un paramtre pour indiquer le saut dchantillonnage en x cest
dire le pas en x que lon veut utiliser pour faire le graphe. On tape :
plot(x^2-2,xstep=1)
ou encore

3.9. SURFACE 3-D POUR COMPATIBILIT MAPLE PLOT3D GRAPHE3D121


plot(x^2-2,x,xstep=1)
On obtient :
une ligne polygonale qui est la reprsentation
grossire de y=x^2-2
On peut aussi spcifier le nombre de points dchantillonage de la fonction reprsenter en utilisant nstep la place de xstep. Par exemple, on tape :
plot(x^2-2,x=-2..3,nstep=30)

3.9

Surface 3-d pour compatibilit Maple plot3d graphe3d

plot3d a trois arguments une fonction de deux variables (ou une expression de
deux variables ou une liste de trois fonctions de deux variables ou encore une liste
de trois expressions de deux variables) et les noms de ces deux variables.
plot3d trace la surface dfinie par le premier argument (soit z = f (x, y), soit
x = f (u, v), y = g(u, v), z = h(u, v)).
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des
z. Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du
paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plot3d(x*y,x,y)
On obtient :
La surface z = x y
On tape :
plot3d([v*cos(u),v*sin(u),v],u,v)
On obtient :
Le cne x = v cos(u), y = v sin(u), z = v
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plot3d([v*cos(u),v*sin(u),v],u=0..pi,v=0..3)
On obtient :
Une portion du cne x = v cos(u), y = v sin(u), z = v

122

CHAPITRE 3. LE GRAPHIQUE

3.10

Graphe dune droite et les tangentes un graphe

3.10.1

Trac dune droite : line droite

Voir aussi : 9.10.1 et 10.5.1 pour la droite en gomtrie et 9.10.1 et 10.5.2 pour
la droite oriente.
droite a comme argument son quation cartsienne :
en 2-d
une quation de droite,
en 3-d
deux quations de plan.
droite dfinit et trace la droite dquation donne en argument.
On tape :
droite(2*y+x-1=0)
On obtient :
le trac de la droite 2*y+x-1=0
On tape :
droite(y=1)
On obtient :
le trac de la droite horizontale y=1
On tape :
droite(x=1)
On obtient :
le trac de la droite verticale x=1
On tape :
droite(x+2*y+z-1=0,z=2)
On obtient :
le trac de la droite x+2*y+1=0 dans le plan z=2
On tape :
droite(y=1,x=1)
On obtient :
le trac de la droite verticale passant par (1,1,0)
Remarque
droite dfinit une droite oriente :

3.10. GRAPHE DUNE DROITE ET LES TANGENTES UN GRAPHE

123

Lorsque la droite 2-d est donne par son quation, on met cette quation
sous la forme "membre_gauche-membre_droite=ax+by+c=0", cela dtermine son vecteur normal [a,b] et lorientation est donne par le vecteur
[b,-a]) (ou encore son orientation est dfinie par le produit vectoriel 3-d
de son vecteur normal (de cote 0) et du vecteur de coordonnes [0,0,1]).
Par exemple droite(y=2*x) dfinit une droite oriente par le vecteur de
coordonnes [1,2].
Lorsque la droite 3-d est donne par deux quations de plans, son orientation
est dfinie par le produit vectoriel des normales aux plans (en mettant les
quations des plans sous la forme "membre_gauche-membre_droite=0" on
dtermine les normales orientes de ces plans).
Par exemple, droite(x=y,y=z) est oriente par :
cross([1,-1,0],[0,1,-1])=[1,1,1].

3.10.2

Trac dune droite horizontale en 2-d : LineHorz

LineHorz a comme argument une expression Xpr.


LineHorz trace la droite horizontale y = Xpr.
On tape :
LineHorz(1)
On obtient :
le trac de la droite y=1

3.10.3

Trac dune droite verticale en 2-d : LineVert

LineVert a comme arguments une expression Xpr.


LineVert trace la la droite verticale x = Xpr.
On tape :
LineVert(1)
On obtient :
le trac de la droite x=1

3.10.4

Tangente un graphe en 2-d : LineTan droite_tangente

LineTan (resp droite_tangente) a deux arguments : une expression Xpr


de la variable x et une valeur x0 de x.
Attention pour LineTan il ne faut pas mettre de parenthses ou alors il faut les
mettre lextrieur.
LineTan (resp droite_tangente) trace la tangente en x = x0 la reprsentation graphique de y = Xpr.
On tape :
(LineTan ln(x),1)
Ou on tape :

124

CHAPITRE 3. LE GRAPHIQUE
droite_tangente(ln(x),1)

On obtient :
le trac de la droite y=x-1
On tape :
equation(LineTan ln(x),1)
Ou on tape :
equation(droite_tangente(ln(x),1))
On obtient :
lquation y=(x-1)
)

3.10.5

Tangente en un point dun graphe en 2-d : tangent tangente

Voir aussi : 9.10.8 pour la gomtrie plane et 10.6.3 pour la gomtrie 3-d.
tangent a deux arguments : un objet gomtrique et un point A.
Mais quand lobjet gomtrique est le graphe G dune fonction 2-d, le deuxime
argument doit tre soit, un nombre rel x0 , soit un point A situ sur G.
Par exemple on tape :
G:=plotfunc(g(x),x)
tangent(G, 1.2)
trace la tangente au graphe G de la fonction g au point dabscisse x=1.2,
ou on tape :
A:=point(1.2+i*g(1.2))
tangent(G, A)
trace la tangente au point A du graphe G de la fonction g.
Par exemple, pour avoir le trac de la tangente au graphe de g(x) = x2 au point
dabscisse x0 = 1, on tape :
g(x):=x^2; G:=plotfunc(g(x),x)
T:=tangent(G,1)
ou on tape :
T:=tangent(G,point(1+i))
On obtient
La tangente au graphe de g(x) = x2 au point 1+i
Lquation de la tangente est alors obtenue en tapant :
equation(T)

3.11. REPRSENTATION GRAPHIQUE DINQUATIONS 2 VARIABLES : PLOTINEQUATION INEQUATI

3.10.6

Trac dune droite donne par un point et sa pente : DrawSlp

DrawSlp a comme argument trois rels a,b,m.


DrawSlp renvoie et trace la droite de pente m et passant par le point de coordonnes a,b.
On tape :
DrawSlp(2,1,-1)
On obtient :
la droite dquation y=(-x+3) qui a pour pente -1 et
qui passe par le point(2,1)

3.10.7

Intersection dun graphe en 2-d avec les axes

Pour avoir lordonne de lintersection du graphe de f avec laxe des y on tape :


f(0)
le point de coordonnes : (0, f (0)) est donc le point dintersection du graphe de f
avec laxe des y.
Pour avoir lintersection du graphe de f avec laxe des x il faut rsoudre f (x) = 0.
On peut essayer davoir les valeurs exactes des abscisses de ces points en tapant :
solve(f(x),x)
ou avoir les valeurs approches de ces abscisses en utilisant la reprsentation graphique puis, en utilisant fsolve pour avoir une meilleure prcision.

3.11

Reprsentation graphique dinquations 2 variables :


plotinequation inequationplot

plotinequation([f1(x,y)<a1,..,fk(x,y)<ak],[x=x1..x2,y=y1..y2])
trace la surface du plan dfinie par les inquations 2 variables :
f 1(x, y) < a1
...
f k(x, y) < ak
x1 < x < x2
y1 < y < y2
On tape :
plotinequation(x^2-y^2<3,
[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
On obtient :
la partie contenant lorigine et dlimite par
lhyperbole x^2-y^2=3 est remplie

126

CHAPITRE 3. LE GRAPHIQUE

On tape :
plotinequation([x+y>3,x^2<y],
[x-2..2,y=-1..10],xstep=0.2,ystep=0.2)
On obtient :
le morceau du plan dfinit par -2<x<2,y<10,x+y>3,y>x^2
est rempli
Attention
Si on ne met pas les bornes pour x et y ce sont les valeurs de X-,X+,Y-,Y+ mises
dans la configuration gnrale du graphique (CfgIConfiguration graphique)
qui seront prises en compte.

3.11.1

Aire sous une courbe : area aire

aire ou area calcule de faon approche laire sous la courbe y = f (x) comprise entre x = a et x = b.
aire ou area a quatre arguments : lexpression f (x), x = a..b, un entier n et le
nom de la mthode numrique choisie pour faire calcul.
La mthode numrique est choisie parmi :
trapezoid, left_rectangle, right_rectangle, middle_point
ou trapeze, rectangle_gauche, rectangle_droit, point_milieu
et aussi simpson (mthode de Simpson), rombergt (acclration de convergence de Romberg avec la mthode des trapzes), rombergm (acclration de
convergence de Romberg avec la mthode du point milieu) et gauss15 (avec une
quadrature de Gauss adaptative 15 points).
La valeur de lentier n est le nombre de subdivisions que lon a choisi pour les calculs faits avec les mthodes trapezoid, left_rectangle, right_rectangle,
middle_point ou trapeze, rectangle_gauche, rectangle_droit,
point_milieu, simpson alors que pour gauss15, rombergt et rombergm
le nombre de subdivisions est 2n .
Ainsi,area(f(x),x=a..b,n,trapeze) calcule laire de n trapzes :
le troisime argument est un entier n, et le quatrime argument est le nom de la
mthode numrique dintgration lorsquon partage [a, b] en n parties gales.
area(f(x),x=a..b,n,rombergt) revient calculer laire de 2n trapzes
qui sont acclrs.
On tape :
area(x^2,x=0..1,8,trapeze)
On obtient :
0.3359375
On tape :
area(x^2,x=0..1,8,point_milieu)
On obtient :
0.33203125

3.12. REPRSENTATION GRAPHIQUE DE LAIRE SOUS UNE COURBE : TRACER_AIRE GRAPHE_AIRE


Donc comme f (x) = x2 est convexe on a laire est dans lintervalle :
]0.33203125, 0.3359375[ :
On tape :
area(x^2,x=0..1,3,rombergt)
On obtient une meilleur approximation :
0.333333333333
On tape :
area(x^2,x=0..1,3,rombergm)
On obtient une meilleur approximation :
0.333333333333
On tape :
area(x^2,x=0..1,3,gauss15)
On obtient :
1/3
On tape :
area(x^2,x=0..1)
On obtient :
1/3

3.12

Reprsentation graphique de laire sous une courbe :


tracer_aire graphe_aire aire_graphe plotarea
areaplot

Avec deux arguments, aire_graphe ou plotarea permet de reprsenter et dafficher avec 3 digits laire sous une courbe.
Ainsi, plotarea(f(x),x=a..b) trace laire sous la courbe y = f (x)
pour a < x < b, cest dire la portion du plan dfinie par les inquations
a < x < b et selon le signe de f (x) 0 < y < f (x) ou 0 > y > f (x).
On tape :
plotarea(sin(x),x=0..2*pi)
On obtient :
la portion de plan situ dans les deux arches de
sin(x)

128

CHAPITRE 3. LE GRAPHIQUE

Avec quatre arguments, aire_graphe ou plotarea permet de reprsenter laire qui est cacule avec la mthode numrique choisie parmi :
trapezoid, left_rectangle, right_rectangle, middle_point
ou trapeze, rectangle_gauche, rectangle_droit, point_milieu.
Ainsi, plotarea(f(x),x=a..b,n,trapeze) trace laire de n trapzes : le troisime argument est un entier n, et le quatrime argument est
le nom de la mthode numrique dintgration lorsquon partage [a, b] en n
parties gales.
On tape :
plotarea(x^2,x=0..1,5,trapeze)
Ou on tape pour voir la courbe en rouge :
plotarea(x^2,x=0..1,5,trapeze);
plot(x^2,x=0..1,affichage=rouge)
On obtient :
les 5 trapzes qui sont utiliss dans la mthode
dite des trapzes, pour approcher une intgrale
On tape :
plotarea(x^2,x=0..1,5,point_milieu)
Ou on tape pour voir la courbe en rouge :
plotarea(x^2,x=0..1,5,point_milieu);
plot(x^2,x=0..1,affichage=rouge)
On obtient :
les 5 rectangles qui sont utiliss dans la mthode
dite du point milieu, pour approcher une intgrale
Remarque 1 On peut aussi taper, pour navoir que la valeur de laire :
plotarea(x^2,x=0..1,5,trapeze)[0,3];
On obtient :
0.34
Remarque 2 Si on utilise plotarea avec le menu Graphic->Courbes->plotarea
une boite de dialogue souvre : vous entrez, lexpression de la fonction, le nom
de la variable, les bornes de lintervalle xmin,xmax, le pas xstep (on a alors
n=(xmax-xmin)/xstep), la mthode dintgration et aussi la couleur du dessin (on retrouve en effet le bouton Attribut en haut et gauche de la boite de
dialogue).

3.13

Lignes de niveaux : plotcontour contourplot


DrwCtour

plotcontour(f(x,y),[x,y]) (ou DrwCtour(f(x,y),[x,y]) ou


encore contourplot(f(x,y),[x,y])) trace les 11 lignes de niveaux z =
10, z = 8,.., z = 0, z = 2,.., z = 10 de la surface dfinie par z = f (x, y).
On tape :
plotcontour(x^2+y^2,[x=-3..3,y=-3..3],[1,2,3],
affichage=[vert,rouge,noir]+[rempli$3])

3.14. GRAPHE DUNE FONCTION PAR NIVEAUX DE COULEURS : PLOTDENSITY DENSITYPLOT129


On obtient :
le graphe des trois cercles x^2+y^2=n pour n=1,2,3;
les zones comprises entre ces cercles sont remplies
avec la couleur verte,rouge ou noire
On tape :
plotcontour(x^2-y^2,[x,y])
On obtient :
le graphe des 11 hyperboles x^2-y^2=n pour
n=-10,-8,..10
Pour visualiser la surface, on tape (plotfunc(f(x,y),[x,y]) trace la
reprsentation graphique de z = f (x, y), voir 3.7.2) :
plotfunc( x^2-y^2,[x,y])
On obtient :
Un graphique en 3-d reprsentant z=x^2+y^2
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des
z. Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du
paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser aux touches x, X, y, Y, z et Z.

3.14

Graphe dune fonction par niveaux de couleurs : plotdensity


densityplot

plotdensity(f(x,y),[x,y]) ou encore densityplot(f(x,y),[x,y])


trace le graphe de z = f (x, y) dans le plan en reprsentant z par une des couleurs
de larc en ciel.
On tape :

plotdensity(x^2-y^2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)
On obtient :
Un graphique en 2-d reprsentant pour chaque z,
lhyperbole dfinie par x^2-y^2=z par une couleur de
larc en ciel
On remarquera que lon a lechelle des couleurs en dessous du graphe.

130

CHAPITRE 3. LE GRAPHIQUE

3.15

Courbe implicite : plotimplicit implicitplot

plotimplicit ou implicitplot permet de tracer des courbes ou des surfaces dfinies de faon implicite par une expression. Pour que Xcas ne cherche
pas factoriser lexpression, la commande plotimplicit ou implicitplot
peut tre utilise avec loption unfactored ou sans_factoriser mise comme
dernier paramtre, :
avec unfactored lexpression ne sera pas modifie,
sans unfactored Xcas rduit lexpression au mme dnominateur puis
cherche factoriser le numrateur.

3.15.1

Courbe implicite en 2-d

plotimplicit(f(x,y),x,y) ou plotimplicit(f(x,y),[x,y])
trace la reprsentation graphique de la courbe dfinie implicitement par f (x, y) =
0 lorsque x (resp y) varie selon WX-, WX+ (resp WY-, WY+) dfini dans
cfg,
plotimplicit(f(x,y),x=0..1,y=-1..1) ou
plotimplicit(f(x,y),[x=0..1,y=-1..1]) trace la reprsentation graphique de la courbe dfinie implicitement par f (x, y) = 0 lorsque
0 x 1 et 1 y 1 (mettre des bornes un peu plus grandes pour ne
pas avoir de manques !).
On peut ventuellement rajouter encore deux paramtres pour spcifier le saut
dchantillonnage des variables avec xstep= et ystep=, cest dire le pas en
x et en y que lon choisi pour le graphe.
On tape :
plotimplicit(x^2+y^2-1,[x,y])
Ou on tape :
plotimplicit(x^2+y^2-1,x,y,unfactored)
On obtient :
Le dessin du cercle unit
On tape :
plotimplicit(x^2+y^2-1,x,y,xstep=0.2,ystep=0.3)
Ou on tape :
plotimplicit(x^2+y^2-1,[x,y],xstep=0.2,ystep=0.3)
Ou on tape :
plotimplicit(x^2+y^2-1,[x,y],
xstep=0.2,ystep=0.3,unfactored)
On obtient :

3.15. COURBE IMPLICITE : PLOTIMPLICIT IMPLICITPLOT

131

Le dessin du cercle unit


On tape :
plotimplicit(x^4+y^4=x^2+y^2)
On obtient :
Le dessin du symbole infini
On tape :
plotimplicit(x^2+4*y^3-k)$(k=1..5)
On obtient :
Le dessin de 5 courbes de la forme du chapeau de
Napolon

3.15.2

Surface implicite en 3-d

plotimplicit(f(x,y,z),x,y,z) trace la reprsentation graphique


de la surface dfinie implicitement par : f (x, y, z) = 0,
plotimplicit(f(x,y,z),x=0..1,y=-1..1,z=-1..1) trace la
reprsentation graphique de la surface dfinie implicitement par f (x, y, z) =
0 lorsque 0 x 1, 1 y 1 et 1 z 1.
On peut ventuellement rajouter trois paramtres pour spcifier le saut dchantillonnage des variables (xstep=, ystep= et zstep=) cest dire le pas en x,
en y et en z que lon choisi pour le graphe.
On tape :
plotimplicit(x^2+y^2+z^2-1,x,y,z,
xstep=0.2,ystep=0.1,zstep=0.3)
On tape :
plotimplicit(x^2+y^2+z^2-1,x,y,z,
xstep=0.2,ystep=0.1,zstep=0.3,unfactored)
On obtient :
Le dessin de la sphre unit
On tape :
plotimplicit(x^2+y^2+z^2-1,x=-1..1,y=-1..1,z=-1..1)
On obtient :
Le dessin de la sphre unit

132

CHAPITRE 3. LE GRAPHIQUE

3.16

Courbe et surface en paramtrique : plotparam


paramplot DrawParm courbe_parametrique

3.16.1

Courbe 2-d en paramtrique

plotparam(f(t)+i*g(t),t) (resp plotparam(f(t)+i*g(t),t=t1..t2))


trace la reprsentation paramtrique de la courbe dfinie par x = f (t), y = g(t)
(resp par x = f (t), y = g(t) et t1 t t2).
Si on ne prcise pas les bornes de lintervalle de variation du paramtre ce sont les
valeurs de t- et t+ (cf 1.6.2) qui seront ces bornes.
On tape :
plotparam(cos(x)+i*sin(x),x)
ou
plotparam([cos(x),sin(x)],x)
On obtient :
Le dessin du cercle unit
On peut pciser les bornes de lintervalle de variation du paramtre.
On tape si dans la configuration du graphique t va de -4 1 :
plotparam(sin(t)+i*cos(t))
ou encore :
plotparam(sin(t)+i*cos(t),t=-4..1)
ou encore :
plotparam(sin(x)+i*cos(x),x=-4..1)
On obtient :
Le dessin de larc du cercle unit allant de -4 1
On peut rajouter un paramtre pour indiquer le saut dchantillonnage du paramtre
t avec tstep= cest dire le pas en t que lon veut utiliser pour faire le graphe.
On tape si dans la configuration du graphique t va de -4 1 :
plotparam(sin(t)+i*cos(t),t,tstep=0.5)
Ou on tape :
plotparam(sin(t)+i*cos(t),t=-4..1,tstep=0.5)
On obtient :
Le dessin grossier de larc du cercle unit allant de -4 1

3.17. COURBES DE BZIER : BEZIER

3.16.2

133

Surface 3-d en paramtrique : plotparam paramplot DrawParm


courbe_parametrique

plotparam a deux arguments principaux et ventuellement les sauts dchantillonnage des variables avec ustep= et vstep=, cest dire le pas en u et en v
que lon choisi pour le graphe.
Les deux arguments principaux de plotparam sont : une liste de trois expressions de deux variables et la liste des deux variables.
plotparam([f(u,v),g(u,v),h(u,v)],[u,v]) trace la surface dfinie
par le premier argument soit x = f (u, v), y = g(u, v), z = h(u, v)).
On peut faire tourner ce graphique selon laxe des x, laxe des y ou laxe des z.
Pour cela, il faut cliquer avec la souris dans la fentre graphique en dehors du paralllpipde servant la reprsentation, puis faire bouger la souris (sans relacher
son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :
plotparam([v*cos(u),v*sin(u),v],[u,v])
On obtient :
Le cne x = v cos(u), y = v sin(u), z = v
Pour navoir quune portion de surface on peut indiquer lintervalle de variation
dans le deuxime et le troisme argument.
On tape :
plotparam([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3])
On obtient :
Une portion du cne x = v cos(u), y = v sin(u), z = v
On tape :
plotparam([v*cos(u),v*sin(u),v],[u=0..pi,v=0..3],
ustep=0.5,vstep=0.5)
On obtient :
Une portion du cne x = v cos(u), y = v sin(u), z = v
Remarque
Si vous voulez limpression ou la traduction en Latex, il faut utiliser :
MIExporter/ImprimerIPrint(with Latex).

3.17

Courbes de Bzier : bezier

Soient n + 1 points Pj de contrle (j = 0..n) et L la squence de ces points.


La courbe de Bzier ayant les points de la squence L comme points de contrle, a
comme
quation paramtrique :
Pn
comb(n,
j)tj (1 t)nj L[j].
j=0
P
bezier(L,plot) renvoie le trac de la courbe dquation paramtrique : nj=0 comb(n, j)tj (1

134

CHAPITRE 3. LE GRAPHIQUE

t)nj L[j].
parameq(bezier(L)) renvoie lquation paramtrique de la courbe de Bzier
ayant comme points de contrle les points de la squence L.
On tape :
bezier(1,1+i,2+i,3-i,plot)
On obtient :
Le trac de la courbe de Bzier ayant comme points de
contrle les points daffixe 1,1+i,2+i,3-i
On tape :
parameq(bezier(1,1+i,2+i,3-i))
On obtient :
Lquation paramtrique de la courbe prcdente
On tape :
bezier(point([0,0,0]),point([1,1,0]),point([0,1,1]),plot)
On obtient :
Le trac de la courbe de Bzier ayant comme points de
contrle les points
point([0,0,0]),point([1,1,0]),point([0,1,1])
On tape :
parameq(bezier(point([0,0,0]),point([1,1,0]),point([0,1,1])))
On obtient :
Lquation paramtrique de la courbe prcdente

3.18

Courbe en polaire : plotpolar polarplot DrawPol


courbe_polaire

plotpolar(f(t),t) trace la reprsentation polaire de la courbe dfinie par :


= f (t).
On tape si dans la configuration du graphique t va de 0 10 :
plotpolar(t,t)
On obtient :
La spirale =t est dessine
On peut rajouter un paramtre (tstep=) pour indiquer le saut dchantillonnage
en t cest dire le pas en t que lon veut utiliser pour faire le graphe. On tape si
dans la configuration du graphique t va de 0 10 :

3.19. TRAC DUNE SUITE RCURRENTE : PLOTSEQ SEQPLOT GRAPHE_SUITE135


plotpolar(t,t,tstep=1)
ou :
plotpolar(t,t=0..10,tstep=1)
On obtient :
La spirale =t est dessine grossirement

3.19

Trac dune suite rcurrente : plotseq seqplot


graphe_suite

plotseq(f(x),a,n) ou plotseq(f(t),t=a,n) permet de visualiser les


n premiers termes dune suite rcurrente dfinie par :
u0 = a, un = f (un1 )
On tape :
plotseq(sqrt(1+x),3,5)
On obtient :
Le dessin de y=sqrt(1+x), de y=x et des 5 premiers
termes de la suite u_0=3 et u_n=sqrt(1+u_(n-1))

3.20

Le champ des tangentes : plotfield fieldplot

On peut tracer le champ des tangentes de lquation diffrentielle y 0 = f (t, y)


ou du systme dquations diffrentielles x0 = u(x, y), y 0 = v(x, y) et on peut
spcifier les plages de valeurs des paramtres.
Soit f (t, y) une expression dependant de deux variables t et y, alors plotfield(f(t,y),[t,y])
trace le champ des tangentes de lquation diffrentielle y 0 = f (t, y) o y
reprsente une variable relle et t est reprsent en abscisse,
Soit V = [u(x, y), v(x, y)] est un vecteur 2-d de coordonnes deux expressions dpendant de 2 variables x, y mais indpendant du temps, alors
plotfield(V,[x,y]) trace le champ des tangentes du systme [x0 (t) =
u(x, y), y 0 (t) = v(x, y)],
Les plages de valeurs de t, y ou de x, y peuvent tre spcifies par t=tmin..tmax,
x=xmin..xmax, y=ymin..ymax la place du nom de variable seul.
On peut spcifier le cadrage en mettant par exemple :
plotfield(f(t,y),[t=tmin..tmax,y=ymin..ymax])
On peut spcifier que le champ des tangentes soit, dans un repre orthonorm, de norme 1 avec loption normalize. Sans loption normalize
le point de contact est lorigine du vecteur tangent et avec loption normalize
le point de contact se trouve au milieu des tangentes.
On peut aussi spcifier la valeur des pas en t et en y avec xstep=... et
ystep=....
On tape :
plotfield(4*sin(t*y),[t=0..2,y=-3..7])

136

CHAPITRE 3. LE GRAPHIQUE

On obtient :
Des segments de pente 4*sin(t*y) sont tracs en
diffrents points. Ces segments reprsentent les
vecteurs tangents dirigs selon les t croissants et
dont lorigine est le point de contact
On tape :
plotfield(4*sin(t*y),[t=0..2,y=-3..7],normalize,
xstep=0.7,ystep=0.7))
On obtient :
Des segments de longueur 1 et de pente 4*sin(t*y) qui
reprsentent les tangentes au point situ en leur
milieu. Ces points espacs de 0.7
On tape :
plotfield(5*[-y,x],[x=-1..1,y=-1..1])
On obtient :
Des vecteurs [y, x] sont tracs aux points (x, y). Ces
vecteurs reprsentent des vecteurs tangents en leur
origine aux courbes solutions du systme
x(t)0 = y, y(t)0 = x. Ils sont dirigs selon les t
croissants.
On tape :
plotfield(5*[-y,x],[x=-1..1,y=-1..1],normalize)
On obtient :
Des segments de longueur 1 et de pente y/x qui
reprsentent les tangentes au point situ en leur
milieu aux courbes solutions du systme
x(t)0 = y, y(t)0 = x.

3.21

Trac de solutions dquation diffrentielle : plotode


odeplot

On peut tracer les solutions de lquation diffrentielle y 0 = f (t, y) ou du systme dquations diffrentielles x0 = u(t, x, y), y 0 = v(t, x, y) et on peut spcifier
les plages de valeurs des paramtres.
plotode(f(t,y),[t,y],[t0,y0]) trace en fonction du temps la solution y(t) de lquation diffrentielle y 0 = f (t, y) passant par le point
(t0,y0), o f (t, y) dsigne une expression dpendant de la variable de
temps t et de la variable y.
Par dfaut, t varie dans les 2 directions. On peut spcifier la plage du temps
par le paramtre optionnel t=tmin..tmax.

3.21. TRAC DE SOLUTIONS DQUATION DIFFRENTIELLE : PLOTODE ODEPLOT137


Lorsque y = (X, Y ) est un vecteur de longueur 2 et f valeurs dans R2 , on
peut galement reprsenter dans lespace (t, X, Y ) ou dans le plan (X, Y )
la solution dune quation diffrentielle y 0 = f (t, y) cest dire [X 0 , Y 0 ] =
[f (t, X, Y )]. Pour cela, il suffit de remplacer y par le noms des variables
X, Y et la valeur initiale par les deux valeurs initiales des variables au temps
t0 .
On tape :
plotode(sin(t*y),[t,y],[0,1])
On obtient :
Le graphe de la solution de y=sin(t,y) passant par le point (0,1) est trac
On tape :
S:=odeplot([h-0.3*h*p, 0.3*h*p-p],
[t,h,p],[0,0.3,0.7])
On obtient le graphe dans lespace de la solution de
[h, p]0 = [h 0.3hp, 0.3hp p]

[h, p](0) = [0.3, 0.7]

Pour avoir le graphe dans le plan, on ajoute loption plan ou plane


S:=odeplot([h-0.3*h*p, 0.3*h*p-p],
[t,h,p],[0,0.3,0.7],plan)
Pour visualiser les valeurs de la solution, se reporter la section 4.3.6 On tape :
plotfield(5*[-y,x],[x=-1..1,y=-1..1],normalize)

plotode(5*[-y,x],[t=0..1,x,y],[0,0.3,0.7],tstep=0.05,plan)
On obtient :
Le graphe de la solution de x=-y,y=x pour t=0 passant par le point (0.3,0.7) est
trac
Exemple On trace 4 solutions du systme dquations diffrentielles dpendant de
2 paramtre a et b :
x0 = y + b
y 0 1 + (x a)2 + (y b)2
Les conditions initiales sont :
pour t = 0 x0 = a + 1, y0 = b + 0.5
pour t = 0 x0 = a + 1, y0 = b + 0.1
pour t = 0 x0 = a + 0.827, y0 = b + 0.827
pour t = 0 x0 = a 1.1, y0 = b+
On tape :

138

CHAPITRE 3. LE GRAPHIQUE

avril(a,b):={
local L;
L:=NULL;
L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2],[t=-3..3,x,y],[0,a+1,
plan),94+epaisseur_ligne_8);
L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2], [t=-3..3,x,y],[0,a+1
plan),4+epaisseur_ligne_8);
L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2],[t=-6..3.65,x,y],
[0,a+0.827,b+0.827],plan),1+epaisseur_ligne_4);
L:=L,affichage(plotode([-y+b,-1+(x-a)^2+(y-b)^2], [t=-1.3..1.3,x,y],[0
plan),1+epaisseur_ligne_4);
return L;
}:;
Puis on tape par exemple :

affichage(cercle(0,5,3*pi/4,4*pi/3),4+epaisseur_ligne_4);
affichage(cercle(0,5,5*pi/3,2*pi+pi/4),4+epaisseur_ligne_4);
affichage(segment(5*exp(-i*pi/3),5*exp(-2*i*pi/3)),4+epaisseur_ligne_4
avril(-1.4,-1);

3.22

Trac interactif des solutions dquation diffrentielle :


interactive_plotode interactive_odeplot

interactive_plotode(f(t,y),[t,y]) trace le champ des tangentes de


lquation diffrentielle y 0 = f (t, y) dans lcran DispG et
interactive_plotode(f(t,y),[t=a...b,y]) trace le champ des tangentes pour t allant de a b de lquation diffrentielle y 0 = f (t, y) dans lcran
DispG.
Lorsquon clique sur un point, on obtient le trac de la solution de y 0 = f (t, y)
passant par ce point.
On peut faire autant de tracs que lon veut (un trac se fait chaque fois que lon
clique sur un point avec la souris). On termine les tracs en tapant sur la touche
Esc ou Echap.
On peut aussi spcifier, comme dans plotfield, que le champ des tangentes soit
de norme 1 avec loption normalize. Attention Si on ne veut pas de superposition avec les dessins faits auparavant, il ne faut pas oublier de taper ClrGraph,
avant dutiliser interactive_plotode, pour effacer lcran DispG. On tape :
interactive_plotode(-y+x+1,[x=-4..4,y])
On obtient :
Le champ des tangentes est trac ainsi que la solution
de y=sin(t,y) passant par le point qui a t cliqu
avec la souris
IL se trouve que lon sait rsoudre cette quation : les solutions sont y(x)=C*exp(-x)+x
et on peut donc vrifier...
On tape :

3.23. TRAC INTERACTIF DES SOLUTIONS DQUATION DIFFRENTIELLE DANS UN NIVEAU DE GO


interactive_plotode(sin(t*y),[t=-4..4,y])
On obtient :
Le champ des tangentes est trac ainsi que la solution
de y=sin(t,y) passant par le point qui a t cliqu
avec la souris
On tape :
interactive_plotode(sin(t*y),[t=-4..4,y],normalize)
On obtient :
Le trac du champ des tangentes avec une norme gale
1 et le graphe de la solution de y=sin(t,y) passant
par le point qui a t cliqu avec la souris

3.23

Trac interactif des solutions dquation diffrentielle


dans un niveau de gomtrie : plotfield fieldplot
et plotode odeplot

Dans un niveau de gomtrie, le menu Graphe->Slopefield/Ode(2d)


ouvre une boite de dialogues qui demande :
si on veut que soit trac le champ des tangentes,
si on veut que ces tangentes soient normalises dans un repre orthonorm,
la valeur de y 0 ,
le nom des variables,
les diffrentes valeurs de cadrage et de pas.
Lorsquon appuie sur OK, lcran de gomtrie est en mode plotode et si lon
a coch Field, le champ des tangentes apparait et la commande correspondante
sinscrit au niveau suivant de lcran de gomtrie, par exemple :

plotfield(sin(t*y),[t=-5.7..5.7,y=-5.7..5.7],normalize,
xstep=0.7,ystep=0.7)
Si on a coch Field et ||=1, et que y 0 = sin(t y).
Ensuite, il suffit de cliquer en diffrents points de lcran de gomtrie pour avoir
les tracs des solutions passant par ces points et les commandes correspondantes
stockes dans une variable, par exemple :
A:=plotode(sin(t*y),[t,y],point(-2.863,1.327),plan)
Pour terminer, il suffit de changer de mode, par exemple passer en mode Repere.
Il faut noter que le mode plotode nest pas accessible directement : on doit
rouvrir la boite de dialogue avec le menu Graphe->Slopefield/Ode(2d).
Si on trouve que le champ des tangentes est gnant, on peut le supprimer facilement
en supprimant le niveau correspondant sa commande.

140

CHAPITRE 3. LE GRAPHIQUE

3.24

Faire une animation en 2-d, 3-d ou "4D"

Xcas permet danimer des graphes en 2-d, 3-d ou "4D" en calculant une fois
pour toute une suite dobjets graphiques et en affichant chaque objet de la sequence
en boucle.
Le temps daffichage dun objet peut se rgler avec animate dans cfg
(plus le nombre est petit et plus le temps daffichage est petit i.e la vitesse
danimation est grande).
Si on met animate 0, chaque clic de la souris dans lcran graphique,
on a un affichage.
Le nombre dimages peut se rgler avec un argument de la forme frames=
ou trames= .
On peut interrompre ou relancer laffichage en boucle en cliquant sur le bouton I| ( droite de M).

3.24.1

Animation dun graphe 2-d :animate

animate permet de crer une animation en boucle dun graphe de fonctions


dpendant dun paramtre. Le paramtre doit tre indiqu en 3me argument de
animate, le nombre dimages en 4me argument sous la forme frames= ou
trames=, les autres arguments sont identiques ceux de la commande plot,
section 3.8, p. 120.
On tape :

animate(sin(a*x),x=-pi..pi,a=-2..2,trames=10,couleur=rouge)
On obtient :
une une la reprsentation graphique de y=sin(ax)
pour 11 valeurs de a entre -2 et 2

3.24.2

Animation dun graphe 3-d :animate3d

animate3d permet de crer une animation en boucle dun graphe 3-d de fonctions dpendant dun paramtre. Le paramtre doit tre indiqu en 3me argument
de animate3d, le nombre dimages en 4me argument sous la forme frames=
ou trames=, les autres arguments sont identiques ceux de la commande plotfunc,
voir section 3.7.2, p. 118.
On tape :
animate3d(x^2+a*y^2,[x=-2..2,y=-2..2],a=-2..2,
frames=10,affichage=rouge+rempli)
On obtient :
une une la reprsentation graphique de z=x^2+a*y^2
pour 11 valeurs de a entre -2 et 2

3.24. FAIRE UNE ANIMATION EN 2-D, 3-D OU "4D"

3.24.3

141

Animation dune squence dobjets graphiques :animation

animation permet de dessiner chaque objet dune suite dobjets graphiques avec
un temps daffichage donn. En gnral les objets de la suite dpendent dun paramtre, il faut alors crer une suite en faisant varier ce paramtre.
animation a comme paramtre une squence dobjets graphiques.
Remarque
Si on veut que dans lanimation plusieurs objets graphiques soient affichs en
mme temps, il faut mettre ces objets dans une liste, par exemple :
On tape :
plotfunc(x^2);animation([point(1),segment(1,1+i),
point(1+i)],droite(y=2*x-1))
On obtient :
le graphe de y = x2 puis une animation de 2 objets (le
premier objet est 2 points et un segment et le
deuxime une droite)
Attention
Pour dfinir la squence dobjets graphiques avec seq on peut quoter ou ne pas
quoter la commande dessinant lobjet graphique.
On peut aussi spcifier le pas de la squence si on utilise 5 arguments pour seq :
lobjet graphique, le nom du paramtre, sa valeur minimum, sa valeur maximum et
le pas.
On tape :
animation(seq(plotfunc(cos(a*x),x),a,0,10))
On obtient :
La suite des diffrentes reprsentations de la courbe
dfinies par y = cos(ax), pour a = 0, 1, 2..10
On tape :
animation(seq(plotfunc(cos(a*x),x),a,0,10,0.5))
ou
animation(seq(plotfunc(cos(a*x),x),a=0..10,0.5))
On obtient :
La suite des diffrentes reprsentations de la courbe
dfinies par y = cos(ax), pour a = 0, 0.5, 1, 1.5..10
On tape :

animation(seq(plotfunc([cos(a*x),sin(a*x)],x=0..2*pi/a),
a,1,10))
On obtient :

142

CHAPITRE 3. LE GRAPHIQUE

La suite des diffrentes reprsentations des 2 courbes


dfinies par y = cos(ax) et y = sin(ax), pour a = 1..10 et
pour x = 0..2/a
On tape :
animation(seq(plotparam([cos(a*t),sin(a*t)],
t=0..2*pi),a,1,10))
On obtient :
La suite des diffrentes reprsentations des courbes
dfinies paramtriquement par x = cos(at) et y = sin(at),
pour a = 1..10 et pour t = 0..2
On tape :
animation(seq(plotparam([sin(t),sin(a*t)],
t,0,2*pi,tstep=0.01),a,1,10))
On obtient :
La suite des diffrentes reprsentations des courbes
paramtres dfinies par x = sin(t), y = sin(at), pour a = 0..10
et t = 0..2
On tape :
animation(seq(plotpolar(1-a*0.01*t^2,
t,0,5*pi,tstep=0.01),a,1,10))
On obtient :
La suite des diffrentes reprsentations des courbes
polaires dfinies par = 1 a 0.01 t2 , pour a = 0..10 et
t = 0..5
On tape :
plotfield(sin(x*y),[x,y]);
animation(seq(plotode(sin(x*y),[x,y],[0,a]),a,-4,4,0.5))
On obtient :
Le champ des tangentes de y=sin(xy) et la suite des
diffrentes courbes intgrales passant par le point
(0; a) pour a=-4,-3.5...3.5,4
On tape :

animation(seq(affichage(carre(0,1+i*a),rempli),a,-5,5))
On obtient :

3.24. FAIRE UNE ANIMATION EN 2-D, 3-D OU "4D"

143

La suite des diffrents carrs dfinis par les points


0 et 1+i*a pour a = 5..5
On tape :
animation(seq(droite([0,0,0],[1,1,a]),a,-5,5))
On obtient :
La suite des diffrentes droites dfinies par les
points [0,0,0] et [1,1,a] pour a = 5..5
On tape :
animation(seq(plotfunc(x^2-y^a,[x,y]), a=1..3))
On obtient :
La suite des diffrentes reprsentations 3-d des
surfaces dfinies par x2 y a , pour a = 1..3 avec les
couleurs de larc en ciel
On tape :
animation(seq(plotfunc((x+i*y)^a,[x,y],
affichage=rempli),a=1..10))
On obtient :
La suite des diffrentes reprsentations "4D" des
surfaces dfinies par (x + i y)a , pour a = 0..10 avec les
couleurs de larc en ciel
Remarque 0n peut construire la squence
avec
un programme, par exemple
on veut dessiner les segments de longueur 1, 2... 20 construit avec un triangle
rectangle de cts 1 et le segment prcdent.
Voici ce programme (bien mettre c:=evalf(..) pour que les calculs soient
approchs sinon le temps de calcul est trop long) :
essai(n):={
local a,b,c,j,aa,bb,L;
a:=1;
b:=1;
L:=[point(1)];
for(j:=1;j<=n;j++){
L:=append(L,point(a+i*b));
c:=evalf(sqrt(a^2+b^2));
aa:=a;
bb:=b;
a:=aa-bb/c;
b:=bb+aa/c;
}
L;
}

144

CHAPITRE 3. LE GRAPHIQUE

Puis on tape :
animation(essai(20))
On voit, en boucle, chaque point, lun aprs lautre, avec un temps daffichage plus
ou moins grand selon la valeur de animate de cfg.
Ou on tape :
L:=essai(20); s:=segment(0,L[k])$(k=0..20)
On voit les 21 segments.
Puis on tape :
animation(s)
On voit, en boucle, chaque segment, lun apres lautre avec un temps daffichage
plus ou moins grand selon la valeur de animate de cfg.

Chapitre 4

Calcul numrique
4.1

Codage des rels et des dcimaux

Voici comment sont codes les nombres rels lorsque le nombre de chiffres
significatifs demands est infrieur ou gal 16 (par exemple Digits:=15).
On crit d, un nombre rel ou dcimal, sous la forme :
d = 2 (1 + m) avec 0 < m < 1 et 210 < 210 .
On utilse 64 bits pour reprsenter ce nombre :
le premier bit pour le signe de d (0 pour + et 1 pour -),
les 11 bits suivant sont pour cods lexposant (on code + 210 1),
les 52 derniers sont pour cods la mantisse m.
Codage de 2 :
= 0 est cod 011 1111 1111
= 1 est cod 100 0000 0000
= 4 est cod 100 0000 0011
= 5 est cod 100 0000 0100
= 1 est cod 011 1111 1110
= 4 est cod 011 1111 1011
= 5 est cod 011 1111 1010
= 210 est cod 111 1111 1111
= 210 1 est cod 000 0000 0000.
Remarque
52
2
= 0.2220446049250313e 15

4.1.1

Un exemple : codage de 3.1 et de 3

codage de 3.1 :
On a :
3.1
+ 1/2 + 1/25 + 1/26 + 1/29 + 1/210 + ....) = 2 (1 + 1/2 +
P= 2 (1
4k+1
+ 1/24k+2
)
k=1 1/2
P
4k+1 + 1/24k+2
donc = 1 et m = 1/2 +
k=1 1/2
On obtient le codage de 3.1 :
40 (01000000), 8 (00001000), cc (11001100), cc (11001100),
cc (11001100), cc (11001100), cc (11001100), cd (11001101),
le dernier octet est 1101 car il y a eu un arrondi du dernier bit a 1, car le
145

146

CHAPITRE 4. CALCUL NUMRIQUE


chiffre suivant etait 1.
codage de 3 :
On a :
3 = 2 (1 + 1/2)
On obtient le codage de 3 :
40 (01000000), 8 (00001000), 0 (00000000), 0 (00000000), 0 (00000000),
0 (00000000), 0 (00000000), 0 (00000000).

4.1.2

Diffrence de codage entre (3.1-3) et 0.1

codage de 0.1 :
On a :
P
4k +
0.1 = 24 (1+1/2+1/24 +1/25 +1/28 +1/29 +...) = 24
k=0 1/2
4k+1
1/2
P
4k + 1/24k+1
donc = 1 et m = 1/2 +
k=1 1/2
On obtient le codage de 0.1 :
the code of3f (00111111), b9 (10111001), 99 (10011001), 99 (10011001),
99 (10011001), 99 (10011001), 99 (10011001), 9a (10011010),
le dernier octet est 1010 car il y a eu un arrondi les 2 derniers bits 01 sont
devenus 10 car le chiffre suivant etait 1.
codage de a :=3.1-3 :
Lexposant sera donc = 4 (qui correspond 2 25 ) et les bits qui
correspondent la mantisse vont dbuter 1/2 = 2 26 : ainsi les nombres
de la mantisse subissent un dcalage vers la gauche de 5 places et on obtient :
3f (00111111), b9 (10111001), 99 (10011001), 99 (10011001),
99 (10011001), 99 (10011001), 99 (10011001), 9a (10100000),
On voit alors que :
a > 0.1 et que a 0.1 = 1/250 + 1/251 (car 100000-11010=110)
Remarque
Ce qui prcde permet dexpliquer pourquoi lorsque Digits:=15 :
floor(1/(3.1-3)) renvoie 9 et non 10.

4.2

valuation des rels : evalf approx et Digits

On peut valuer une expression numrique grce la commande evalf ou approx.


En mettant un deuxime argument n evalf (ou approx), on peut spcifier le
nombre de chiffres significatifs de lapproximation.
Mettre ce deuxime argument a lavantage de ne pas modifier la valeur de Digits
(i.e. la case Chiffres de la configuration du CAS).
Attention laffichage tiendra compte de la valeur p de Digits si p<15 et si le
deuxime argument n de evalf est suprieur p mais les calculs seront faits avec
n chiffres significatifs.
Exemple 1 Avec Digits:=12.
On tape : a:=1234+1/7
On obtient : 8639/7
On tape : b:=evalf(a,9)
On obtient : 1234.14286 (9 chiffres significatifs avec un arrondi)
On tape : c:=evalf(a,16)

4.2. VALUATION DES RELS : EVALF APPROX ET DIGITS

147

On obtient : 0.1234142857142857e4 (16 chiffres significatifs)


On tape : d:=evalf(a,21)
On obtient : 0.123414285714285714286e4 (21 chiffres significatifs)
On tape : 7*a,7*b,7*c,7*d
On obtient :
8639,8639.00002,0.8639000000000001e4,0.863900000000000000000e4
Mais avec Digits:=7.
On tape : a:=1234+1/7
On obtient : 8639/7
On tape : b:=evalf(a,9)
On obtient : 1234.143 ( laffichage juste 7 chiffres significatifs)
On tape : b-1234
On obtient : 0.14286 (ce qui prouve que b vaut 1234.14286)
On tape : b-1234.14286
On obtient : 0.0 (ce qui prouve encore que b vaut 1234.14286)
On tape : c:=evalf(a,16)
On obtient : 0.1234142857142857e4
On tape : d:=evalf(a,21)
On obtient : 0.123414285714285714286e4
Exemple 2 Avec Digits:=7 ou si dans la configuration du cas (menu Cfg) on
a choisit Chiffres=7.
On tape :
evalf(sqrt(2))
On obtient :
1.414214
On tape :
evalf(sqrt(2),3)
On obtient :
1.41
On tape :
evalf(sqrt(2),3)-1.414214
On obtient :
-0.000214
ce qui montre que evalf(sqrt(2),3) est le nombre 1.414
On tape :
evalf(sqrt(2),10)
On obtient :
1.414214

148

CHAPITRE 4. CALCUL NUMRIQUE

On obtient toujours un affichage avec 7 chiffres significatifs si n est suprieur ou


gal 7 :
1.414214
On tape :
evalf(sqrt(2))-1.414214
On obtient toujours lorsque Digits:=7) :
-4.376269e-07
ce qui montre que Xcas fait les calculs avec 14 chiffres significatifs.
Par contre, ds que le 2-ime argument n de evalf est strictement suprieur 14
laffichage se fait avec n chiffres significatifs.
On tape :
evalf(sqrt(2),15),evalf(sqrt(2),16)
On obtient :
1.41421356237310,1.414213562373095
On tape :
evalf(sqrt(2),20)
On obtient :
1.4142135623730950488
et cela na pas modifi la configuration du CAS.
On peut changer le nombre de chiffres significatifs avec la variable DIGITS ou
Digits.
On tape :
DIGITS:=20
Cela a pour effet de changer Configuration du CAS et de mettre 20 dans la
case Chiffres.
evalf(sqrt(2))
On obtient 20 chiffres significatifs :
1.4142135623730950488
Notation : Le nombre rel 104 est un nombre exact alors que 1e4 est un nombre
approch.
On tape :
evalf(10^-5)
On obtient :
1e-05

4.2. VALUATION DES RELS : EVALF APPROX ET DIGITS


On tape :
evalf(10^15)
On obtient :
1e+15
On tape :
evalf(sqrt(2))*10^-5
On obtient si Digits:=20 :
0.14142135623730950488e-4
Remarques On tape :
DIGITS:=20
a:=evalf(sqrt(2))
On obtient :
1.4142135623730950488
On tape :
evalf(a,10)
On obtient :
1.4142135624
On tape :
evalf(sqrt(2),10)
On obtient :
1.414213562373
On tape :
DIGITS:=10
b:=evalf(sqrt(2))
On obtient :
1.414213562
On tape :
evalf(b,10)
On obtient :
1.414213562

149

150

CHAPITRE 4. CALCUL NUMRIQUE

On tape :
evalf(sqrt(2),10)
On obtient :
1.414213562
Attention
Si vous dfinissez une fonction F (a) qui renvoie une squence forme par un
nombre fractionnaire p/q et un entier n alors evalf(F(a)) renvra une approximation de p/q avec n chiffres significatifs ! Il faut donc crire evalf([F(a)])
pour avoir une liste constitue dune approximation de p/q et de n.

4.3
4.3.1

Quelques fonctions
Solution approche dune quation : newton

newton a comme arguments : une expression Xpr, le nom de la variable de cette


expression (par dfaut x), et trois valeurs a (par dfaut a=0), eps (par dfaut
eps=1e-8) and nbiter (par dfaut nbiter=12).
newton(Xpr,x,a,eps,nbiter) calcule de faon approche par la mthode
de Newton, une solution x proche de a de lquation Xpr=0. Le nombre maximum
ditrations est nbiter et la prcision demande est eps.
On tape :
newton(x^2-2,x,1)
On obtient :
1.41421356237
On tape :
newton(x^2-2,x,-1)
On obtient :
-1.41421356237
On tape :
newton(cos(x)-x,x,0)
On obtient :
0.739085133215

4.3. QUELQUES FONCTIONS

4.3.2

151

Calcul approch du nombre driv : nDeriv

nDeriv a comme arguments : une expression Xpr, le nom de la variable de cette


expression (par dfaut x), and h (par dfaut h=0.001).
nDeriv(f(x),x,h) calcule de faon approche la valeur de la drive de lexpression f(x) au point x et renvoie :
(f(x+h)-f(x+h))/2*h.
On tape :
nDeriv(x^ 2,x)
On obtient :
((x+0.001)^2-(x+-0.001)^2)*500.0
On tape :
subst(nDeriv(x^ 2,x),x=1)
On obtient :
2
On tape :
nDeriv(exp(x^ 2),x,0.00001)
On obtient :
(exp((x+1e-05)^2)-exp((x+-1e-05)^2))*50000
On tape :
subst(exp(nDeriv(x^ 2),x,0.00001),x=1)
On obtient :
5.43656365783
On a 2.0*e=5.43656365692

4.3.3

Calcul approch dintgrales avec la mthode de Romberg : romberg


nInt

romberg ou nInt a comme arguments : une expression Xpr, le nom de la variable de cette expression (par dfaut x), et deux valeurs a,b.
romberg(Xpr,x,a,b)
ou nInt(Xpr,x,a,b) calcule de faon approche
Rb
lintgrale a Xpr dx par la mthode de Romberg.
On tape :
romberg(exp(x^2),x,0,1)
On obtient :
1.46265174591

152

4.3.4

CHAPITRE 4. CALCUL NUMRIQUE

Calcul approch dintgrales par une quadrature de Gauss adaptative 15 points : gaussquad

gaussquad a comme arguments : une expression Xpr, le nom de la variable de


cette expression (par dfaut x), et deux valeurs a,b.
Rb
gaussquad(Xpr,x,a,b) calcule de faon approche lintgrale a Xpr dx
par une mthode adaptative (Ernst Hairer) utilisant des quadratures de Gauss 15
points (mthode dordre 30). On commence par faire la quadrature 15 points
sur lintervalle [a, b] tout entier et on estime lerreur par une mthode emboite
( 14 et 6 points choisis parmi les 15 points), si lerreur relative 1 est infrieure
la tolrance, lalgorithme sarrte. Sinon on divise [a, b] en deux, et on calcule
la quadrature sur chaque morceau, on estime lerreur, si on dpasse la tolrance
on divise en deux lintervalle amenant lerreur la plus grande, et ainsi de suite, on
divise toujours en deux lintervalle amenant lerreur la plus grande, jusqu ce que
lerreur relative soit plus petite que la tolrance ou que le nombre de subdivisions
dpasse le nombre maximal de subdivisions autorises.
On tape :
gaussquad(exp(x^2),x,0,1)
On obtient :
1.46265174591
On tape :
gaussquad(exp(-x^2),x,-1,1)
On obtient :
1.49364826562

4.3.5

Solution approche de y=f(t,y) : odesolve

Soit f une fonction de R2 dans R.


odesolve renvoie la valeur approche y(t1) de la solution de lquation differentielle y 0 = f (t, y) lorsque y(t0 ) = y0 .
odesolve a comme paramtres :
odesolve(f(t,y),[t,y],[t0,y0],t1) ou
odesolve(f(t,y),t=t0..t1,y,y0) ou
odesolve(t0..t1,f,y0) ou
odesolve(t0..t1,(t,y)->f(t,y),y0)
renvoie la valeur approche de y(t1) lorsque y(t) est la solution de y 0 (t) =
f (t, y(t)) qui vrifie y(t0) = y0.
On peut ajouter un paramtre optionnel pour indiquer la discrtisation en
temps souhaite (tstep=valeur). Cette valeur nest pas forcment respecte par le solver. Par dfaut tstep=0.3)
On peut indiquer en paramtre optionnel curve pour obtenir la liste des
[t, [y(t)]] calculs au lieu de la seule valeur de y(t1).
1. on calcule lerreur relative en divisant lerreur estime par lintgrale approche de la valeur
absolue de Xpr

4.3. QUELQUES FONCTIONS

153

On tape :
odesolve(sin(t*y),[t,y],[0,1],2)
ou :
odesolve(sin(t*y),t=0..2,y,1)
ou :
odesolve(0..2,(t,y)->sin(t*y),1)
ou encore on dfinit la fonction :
f(t,y):=sin(t*y)
et on tape :
odesolve(0..2,f,1)
On obtient :
[1.82241255675]
puis on tape :
odesolve(0..2,f,1,tstep=0.3)
On obtient :
[1.82241255675]
On tape :
odesolve(sin(t*y),t=0..2,y,1,tstep=0.5)
On obtient :
[1.82241255675]
On tape :
odesolve(sin(t*y),t=0..2,y,1,tstep=0.5,curve)
On obtient :

[[0.0,[1.0]],[0.3906,[1.07811817892]],[0.760963058921,[1.30972370161]],[1.070
On tape :
odesolve(sin(t*y),t=0..2,y,1,curve)
Ou on tape :
odesolve(sin(t*y),t=0..2,y,1,tstep=0.3,curve)
On obtient :

[[0.0,[1.0]],[0.3781,[1.07309655677]],[0.6781,[1.24392692452]],[0.9781,[1.512

154

CHAPITRE 4. CALCUL NUMRIQUE

4.3.6

Solution approche du systme v=f(t,v) : odesolve

On cherche une valeur approche du vecteur v(t) de Rn qui est la solution du


systme : v 0 (t) = f (t, v(t)).
Lexpression f (t, v(t)) peut tre donne :
soit par un vecteur ayant comme coordonnes des expressions de t et des coordonnes xi de v,
soit par une fonction f de R Rn dans Rn .
Lexpression f (t, v(t)) est donne par un vecteur dexpressions Si v est un
vecteur de coordonnes [x1 , .., xn ] dpendant de t et si f (t, v(t)) est donn
par un vecteur ayant comme coordonnes les expressions dpendant de t et
des xi : [Xpr1 , ..., Xprn ], si la valeur initiale de v en t = t0 est le vecteur
de coordonnes [x01 , ..., x0n ] alors linstruction
odesolve([Xpr1 , ..., Xprn ], t = t0 ..t1 , [x1 , ..., xn ], [x01 , ..., x0n ])
renverra une valeur approche de v au temps t = t1. Le paramtre optionnel
curve permet davoir les valeurs intermdiaires sous forme dune liste de
couples [t, v(t)] calculs.
Pour rsoudre le systme :
x0 (t) = y(t)
y 0 (t) = x(t)
On tape :
odesolve([-y,x],t=0..pi,[x,y],[0,1])
On obtient :
[-1.79045146764e-15,-1]
Lexpression f (t, v(t)) est donne par f une fonction de R Rn dans Rn .
odesolve(t0..t1,(t,v)->f(t,v),v0) ou
odesolve(t0..t1,f,v0)
calcule de faon approche la valeur de v(t1) lorsque le vecteur de coordonnes v(t) de Rn est la solution de v 0 (t) = f (t, v(t)) qui vrifie v(t0) = v0.
Le paramtre optionnel curve permet davoir les valeurs intermdiaires
sous forme dune liste de couples [t, v(t)] calculs.
Pour rsoudre le systme :
x0 (t) = y(t)
y 0 (t) = x(t)
On tape :
odesolve(0..pi,(t,v)->[-v[1],v[0]],[0,1])
Ou on dfinit la fonction :
f(t,v):=[-v[1],v[0]]
puis on tape :
odesolve(0..pi,f,[0,1])
On obtient :
[-1.79045146764e-15,-1]
On dfinit la fonction :
f(t,v):=[-v[1],v[0]]
puis on tape :
odesolve(0..pi/4,f,[0,1],curve)
On obtient :

4.4. RSOLUTION NUMRIQUE DQUATIONS AVEC NSOLVE

155

[[0.1781,[-0.177159948386,0.984182072936]],
[0.3781,[-0.369155338156,0.929367707805]],
[0.5781,[-0.54643366953,0.837502384954]],
[0.7781,[-0.701927414872,0.712248484906]]]

4.4

Rsolution numrique dquations avec nSolve

nSolve permet de rsoudre numriquement des quations non polynomiales :


f (x) = 0 pour x ]a, b[ (nSolve est une commande compatible ti).
Les paramtres de nSsolve sont f(x)=0, x, ou x=x0 o x0 est un point de
]a, b[.
On tape :
nSolve((cos(x))=x,x)
On obtient soit :
0.739085133215
soit une solution complexe :
-9.10998745394-2.95017086176*i
En effet, si on ne prcise pas la valeur qui dmarre litration, Xcas dmarre litration avec une valeur alatoire relle ou complexe.
On vrifie :
cos(-9.10998745394-2.95017086176*i)=-9.10998745394-2.95017086176*i
On tape :
nSolve((cos(x))=x,x=0)
On obtient :
0.739085133215
On tape :
nSolve((cos(x))=x,x=-9-3*i))
On obtient :
-9.10998745394-2.9501708617*i

4.5

Rsolution dquations avec fsolve

fsolve permet de rsoudre numriquement des quations non polynomiales :


f (x) = 0 pour x ]a, b[.
fsolve a comme arguments f (x) = 0 et x = a..b ou f (x) = 0, x et a..b.
fsolve donnera aussi les racines numriques complexes si dans la configuration du CAS on a coch Complexe. Si Complexe est dcoch il faut utiliser
cfsolve pour avoir les racines numriques complexes.
On tape :

156

CHAPITRE 4. CALCUL NUMRIQUE


fsolve(sin(x)=0,x=0..10)

Ou on tape :
fsolve(sin(x)=0,x,0..10)
On obtient :
[0.0,3.14159265359,6.28318530718,9.42477796077]
On peut rajouter en dernier argument la valeur de lchantillonage en spcifiant la
valeur de xstep ou la valeur de nstep (nombre de dcoupages de lintervalle
]a, b[).
On tape :
fsolve(sin(x)=0,x=0..10,xstep=1 )
On obtient :
[0.0,3.14159265359,6.28318530718,9.42477796077]
On tape :
fsolve(sin(x)=0,x=0..10,nstep=10)
On obtient :
[0.0,3.14159265359,6.28318530718,9.42477796077]
On peut utiliser diffrents algorithmes pour rsoudre numriquement f (x) = 0
pour x ]a, b[.
Si on veut indiquer la mthode, les paramtres de fsolve sont f(x)=0, x, a..b
ou selon les mthodes un point x0 de ]a, b[ et le nom de la mthode utilise.
Les diffrentes mthodes sont dtailles ci dessous.

4.5.1

fsolve avec loption bisection_solver

Cet algorithme de dichotomie est le plus simple mais aussi le plus lent. Il permet dencadrer le zro dune fonction sur un intervalle. chaque itration, on
coupe lintervalle en deux, on calcule la valeur au point milieu et, le signe de la
fonction en ce point nous dit sur quel morceau de lintervalle on doit recommencer
literation.
On tape :
fsolve((cos(x))=x,x,-1..1,bisection_solver)
Ou on tape :
fsolve((cos(x))=x,x=-1..1,bisection_solver)
On obtient :
[0.739085078239,0.739085137844]
On tape :
fsolve((cos(x))=x,x,0,bisection_solver)
On obtient :
Bad Argument Type

4.5. RSOLUTION DQUATIONS AVEC FSOLVE

157

4.5.2 fsolve avec loption brent_solver


La mthode de Brent combine linterpolation de f et la dichotomie. Cette mthode est rapide.
On tape :
fsolve((cos(x))=x,x,-1..1,brent_solver)
On obtient :
[0.73908513321 5,0.739085133215]
On tape :
fsolve((cos(x))=x,x,0,brent_solver)
On obtient :
Bad Argument Type

4.5.3 fsolve avec loption falsepos_solver


Lalgorithme de "fausse position" est itratif et est bas sur linterpolation linaire : on calcule la valeur de f au point dintersection de la droite passant par les
points daffixe a + i f (a) et b + i f (b) avec laxe des x. Cette valeur permet de
savoir sur quelle partie de lintervalle se trouve la racine, on peut ainsi recommencer literation.
La convergence est linaire mais est plus rapide que la dichotomie (bisection).
On tape :
fsolve((cos(x))=x,x,-1..1,falsepos_solver)
On obtient :
[0.739085133215,0.739085133215]

4.5.4 fsolve avec loption newton_solver


La mthode de Newton est la mthode standard. Lalgorithme dmarre par une
valeur initiale x0 , on cherche lintersection x1 de la tangente en x0 au graphe de
f , avec laxe des x, puis chaque itration on recommence en prenant x1 comme
valeur x0 :
La suite des xi est donc dfinie par :
n)
x0 = x0 et xn+1 = xn ff0(x
(xn )
La mthode de Newton quand elle converge, converge de faon quadratique pour
les racines simples.
On tape :
fsolve(cos(x)=x,x,0,newton_solver)
On obtient :
0.739085133215

158

4.5.5

CHAPITRE 4. CALCUL NUMRIQUE

fsolve avec loption secant_solver

La mthode de la scante est une mthode simplifie de la mthode de Newton.


Le calcul de f 0 (xn ) se fait de faon approche : cela peut tre utile quand le calcul
de la derive est couteux.
On a :
i)
0 = f (xi )f (xi1 )
et fest
xi+1 = xi ff(x
0
(xi xi1 )
est
Pour le calcul de x1 on utilise la mthode de Newton.

La convergence pour les racines simples est dordre (1 + 5)/2 = 1.62.


On tape :
fsolve((cos(x))=x,x,-1..1,secant_solver)
On obtient :
[0.739085078239,0.739085137844]
On tape :
fsolve((cos(x))=x,x,0,secant_solver)
On obtient :
0.739085133215

4.5.6

fsolve avec loption steffenson_solver

La mthode de Steffenson est la plus rapide de toutes les mthodes.


Elle combine la mthode de Newton avec lacclration du "delta-deux" dAitken :
avec la mthode de Newton on obtient la suite xi et lacclration de convergence
produit la suite :
(xi+1 xi )2
Ri = xi (xi+2
2xi+1 +xi )
On tape :
fsolve(cos(x)=x,x,0,steffenson_solver)
On obtient :
0.739085133215
On tape :
fsolve(cos(x)=x,x,-1..1,steffenson_solver)
On obtient :
0.739085133215

4.6. RSOLUTION DES SYSTMES DQUATIONS AVEC FSOLVE

4.6

159

Rsolution des systmes dquations avec fsolve

On propose six mthodes pour rsoudre numriquement des systmes dquations de la forme f (x) = 0.
Remarque
fsolve donnera aussi les racines numriques complexes si dans la configuration du CAS on a coch Complexe. Si Complexe est dcoch il faut utiliser
cfsolve pour avoir les racines numriques complexes.
Trois mthodes utilisent la matrice jacobienne f 0 (x) et leurs noms se terminent par
j_solver.
Les trois autres mthodes utilisent des mthodes dapproximation de f 0 (x) et utilisent uniquement f .
Les six mthodes utilisent une itration de type Newton :
xn+1 = xn f 0 (xn )1 f (xn ).
Les quatre mthodes hybrid*_solver utilisent aussi une mthode de descente
de gradient lorsque litration Newtonienne donne un pas trop grand.
La longueur du pas est calcul sans facteur dchelle pour hybrid_solver et
hybridj_solver ou avec facteur dechelle (calcul partir de f 0 (xn )) pour
hybrids_solver et hybridsj_solver

4.6.1 fsolve avec loption dnewton_solver


On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],dnewton_solver)
On obtient :
[1.0,1.0]

4.6.2 fsolve avec loption hybrid_solver


On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],
cos(x)=x,x,0,hybrid_solver)
On obtient :
[1.0,1.0]

4.6.3 fsolve avec loption hybrids_solver


On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybrids_solver)
On obtient :
[1.0,1.0]

160

4.6.4

CHAPITRE 4. CALCUL NUMRIQUE

fsolve avec loption newtonj_solver

On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[0,0],newtonj_solver)
On obtient :
[1.0,1.0]

4.6.5

fsolve avec loption hybridj_solver

On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridj_solver)
On obtient :
[1.0,1.0]

4.6.6

fsolve avec loption hybridsj_solver

On tape :
fsolve([x^2+y-2,x+y^2-2],[x,y],[2,2],hybridsj_solver)
On obtient :
[1.0,1.0]

4.7

Rsolution sur C dquations ou de systmes cfsolve

cfsolve effectue la rsolution numrique sur C dune quation ou dun systme, mme si Complexe est dcoch dans la configuration du CAS.
fsolve donne aussi les racines numriques complexes dune quation ou dun
systme si dans la configuration du CAS on a coch Complexe.
On tape :
cfsolve(sin(x)=2)
On obtient :
[1.57079632679-1.31695789692*i,1.57079632679+1.31695789692*i]
On tape :
cfsolve(cos(x)=2)
On obtient :
[1.31695789692*i,-1.31695789692*i]
On tape :
cfsolve([x^2+y+2,x+y^2+2],[x,y])

4.8. RACINES NUMRIQUES DUN POLYNME : PROOT

161

On obtient :

[[0.500000000000014794+1.65831239517770439*i,
0.500000000000000000-1.65831239517771331*i],
[0.500000000000014794-1.65831239517770439*i,
0.500000000000000000+1.65831239517771331*i],
[-0.499999999999994291-1.32287565553229745*i,-0.499999999999999999-1.32287565

4.8

Racines numriques dun polynme : proot

proot a comme argument un polynme ou le vecteur de composantes les coefficients dun polynme (par ordre dcroissant).
proot renvoie un vecteur dont les composantes sont les racines numriques non
multiples du polynme.
On peut mettre en option un entier n pour prciser le nombre n de chiffres significatifs de la rponse. Pour chercher les racines numriques de P (x) = x3 + 1, on
tape :
proot([1,0,0,1])
ou on tape :
proot(x^3+1)
On obtient :
[0.5+0.866025403784*i,0.5-0.866025403784*i,-1.0]
On tape pour avoir 20 chiffres significatifs :
proot([1,0,0,1],20)
ou on tape :
proot(x^3+1)
On obtient :
[-1.000000000000000000,
0.5000000000000000000-0.8660254037844386468*i,
0.5000000000000000000+0.8660254037844386468*i]
On tape pour avoir les racines numriques de x2 3 :
proot([1,0,-3])
ou :
proot(x^2-3)
On obtient :
[1.73205080757,-1.73205080757]

162

CHAPITRE 4. CALCUL NUMRIQUE

On tape pour avoir les racines numriques de P (x) = x2 3 avec 20 chiffres


significatifs :
proot([1,0,-3],20)
ou on tape :
proot(x^2-3,20)
On obtient :
[-1.732050807568877294,1.732050807568877294]
On tape pour avoir les racines numriques de P (x) = x1 0 15 x8 + 90 x6
270 x4 + 405 x2 243 :
proot([1,0,-15,0,90,0,-270,0,405,0,-243])
ou on tape :
proot(x^10-15*x^8+90*x^6-270*x^4+405*x^2-243)
On obtient :
[1.73205080757,-1.73205080757,1.73205080757,-1.73205080757,
1.73205080757,-1.73205080757,1.73205080757,-1.73205080757,
1.73205080757,-1.73205080757]

4.9

Factorisation numrique dune matrice : cholesky


qr lu svd

Pour avoir les factorisations numriques de :


Cholesky,
QR,
LU,
svd,
dune matrice, on se repotera la section 6.51.

Chapitre 5

Les units et les constantes


physiques
Les constantes physiques (sous-menu Constante), les fonctions de conversion (sous-menu Unit_convert), les prfixes (sous-menu Unit_prefix) et
les units classes par thme, se trouvent dans le menu Phys.

5.1
5.1.1

Les units
La notation des units

Les noms des units sont prcds du symbole _ ("underscore"). Par exemple
2_m for 2 meters.
Vous pouvez mettre un prfixe devant le nom dune unit qui indique une multiplication par une puissance de 10. Par exemple k ou K pour kilo (indique une
multiplication par 103 ), D pour dca (indique une multiplication par 10), d pour
dci (indique une multiplication par 101 ) etc...
Lorsquon combine un nombre rel avec des units on cre un objet-unit.
On tape :
10.5_m
On obtient :
un objet-unit valant 10.5 mtres
On tape :
10.5_km
On obtient :
un objet-unit valant 10.5 kilomtres

5.1.2

Les calculs avec des units

On peut faire les oprations de base (+, -, *, /) avec des objets-units.


Dans les oprations, on peut utiliser des units diffrentes (mais compatibles pour
163

164

CHAPITRE 5. LES UNITS ET LES CONSTANTES PHYSIQUES

+ et -) et le rsultat sera exprim selon lunit correspondante. Pour la multiplication et la division de deux units diffrentes _u1 et _u2 lunit rsultat scrit
_(u1*u2) ou _(u1/u2) (ne pas oublier les parenthses ! ! !)
On peut aussi lever un objet-unit une puissance entire : on obtient lobjet-unit
correspondant.
Il faut noter que lors dune addition ou dune soustraction, le rsultat sera exprim
selon lunit du premier terme de lopration.
On tape :
1_m+100_cm
On obtient :
2_m
On tape :
100_cm+1_m
On obtient :
200_cm
On tape :
1_m*100_cm
On obtient :
100_(cm*m)
On tape :
3_h +10_mn-(1_h+45_mn)
On obtient :
1.41666666667_h
On tape :
10_mn+3_h-(1_h+45_mn)
On obtient :
85.0_mn

5.1.3

La conversion dun objet-unit dans une autre unit : convert


convertir =>

convert permet dobtenir la conversion dun objet-unit dans une autre unit qui
est le deuxime paramtre.
=> est la version infixe de convert ou convertir.
On tape :
convert(2_h+30_mn,_mn)

5.1. LES UNITS

165

ou bien
2_h+30_mn=>_mn
On obtient :
150_mn
On tape :
convert(1_m*100_cm,_m^2)
ou bien
convert(100_(cm*m),_m^2)
ou bien
100_(cm*m)=>_m^2
On obtient :
1_m^2
On tape :
convert(1_h,_s)
Ou on tape :
1_h=>_s
On obtient :
3600_s
On tape :
convert(60_mn,_h)
Ou on tape :
60_mn=>_h
On obtient :
1.0_h
Remarque
Il faut mettre un espace avant lunit si le nombre dunit se trouve dans une variable ou si cest une constante :
On tape :
convert(pi _rad,_deg)
Ou on tape :
pi _rad=>_deg

166

CHAPITRE 5. LES UNITS ET LES CONSTANTES PHYSIQUES

On obtient :
180.0_deg
On tape :
a:=180
convert(a _deg,_rad)
Ou on tape :
a _deg=>_rad
On obtient :
3.14159265358_rad

5.1.4

Les changements dunits en units MKSA : mksa

mksa permet dobtenir la conversion dun objet-unit en un objet-unit exprim


en units MKSA.
On tape :
mksa(15_C)
On obtient :
15_A*s
On tape :
mksa(1_Hz)
On obtient :
1_s^(-1)

5.1.5

Les conversions entre degr Clsius et degr Fahrenheit : Celsius2Fahrenheit


et Fahrenheit2Celsius

Celsius2Fahrenheit permet de convertir les degrs Celsius en degrs Fahrenheit.


On tape :
Celsius2Fahrenheit(a)
On obtient :
(a*9)/5+32
On tape :
Celsius2Fahrenheit(0)
On obtient :

5.1. LES UNITS

167
32

Fahrenheit2Celsius permet de convertir les degrs Fahrenheit en degrs


Celsius.
On tape :
Fahrenheit2Celsius(a)
On obtient :
((a-32)*5)/9
On tape :
Fahrenheit2Celsius(212))
On obtient :
100

5.1.6

Mise en facteur dune unit : ufactor

ufactor permet de factoriser une unit dans un objet-unit : on obtient un objetunit multipli par les units MKSA restantes .
On tape :
ufactor(3_J,_W)
On obtient :
3_(W*s)
On tape :
ufactor(3_W,_J)
On obtient :
3_(J/s)

5.1.7

Simplifier une unit : usimplify

usimplify permet de simplifier une unit dans un objet-unit.


On tape :
usimplify(3_(W*s))
On obtient :
3_J

168

CHAPITRE 5. LES UNITS ET LES CONSTANTES PHYSIQUES

5.1.8

Les prfixes disponibles pour les noms dunits

Vous pouvez mettre des prfixes devant les noms dunits : chaque prfixe correspond au nom de lunit mulipli par une puissance de 10.
Voici les diffrents prfixes disponibles :
Prfixe
Y
Z
E
P
T
G
M
k ou K
h ou H
D

Nom
yota
zta
exa
pta
tra
giga
mga
kilo
hecto
dca

(*10^) n
24
21
18
15
12
9
6
3
2
1

Prfixe
d
c
m
mu
n
p
f
a
z
y

Nom
dci
cent
mili
micro
nano
pico
femto
atto
zepto
yocto

(*10^) n
-1
-2
-3
-6
-9
-12
-15
-18
-21
-24

Remarque
Bien sr vous ne pouvez pas utiliser le prfixe avec une unit intgre si la combinaison donne une autre unit intgre.
Par exemple, 1_a est un are et 1_Pa est un pascal et non 10^15_a.

5.2
5.2.1

Les constantes physiques


La notation des constantes physiques

Les noms des constantes physiques commencent et se terminent par le caractre _ ("underscore"). Il ne faut pas confondre les constantes physiques avec les
constantes symboliques, par exemple, e, sont des constantes symboliques alors
que _c_, _N A_ sont des constantes physiques.
On tape :
_c_
On obtient la vitesse de la lumire dans le vide :
299792458_m*s^-1
On tape :
_NA_
On obtient le nombre dAvogadro :
6.0221367e23_gmol^-1

5.2.2

Bibliothque des constantes physiques

Vous trouverez certaines constantes physiques dans le menu Phys sous-menu


Constante ou encore dans laide.
Pour avoir la valeur dune constante il suffit de taper le nom de la constante dans la

5.2. LES CONSTANTES PHYSIQUES

169

ligne de commande de Xcas et de valider (sans oublier de mettre un _ au dbut et


un _ la fin du nom).
Voici la bibliothque des constantes :
Nom
Dscription
_NA_
Nombre dAvogadro
_k_
Constante de Boltzmann
_Vm_
Volume molaire
_R_
Constante universelle des gaz
_StdT_
Temprature standard
_StdP_
Pression standard
_sigma_
Constante de Stefan-Boltzmann
_c_
Vitesse de la lumire
_epsilon0_
Permitivit du vide
_mu0_
Permabilit du vide
_g_
Acclration de la gravit
_G_
Constante gravitationnelle
_h_
Constante de Planck
_hbar_
Constante de Dirac
_q_
Charge de llectron
_me_
Masse lmentaire de llectron
_qme_
Rapport q/me (charge/masse de llectron)
_mp_
Masse lmentaire du proton
_mpme_
Rapport mp/me (masse du proton/masse de llectron)
_alpha_
Constante de structure fine
_phi_
Quantum de flux magntique
_F_
Constante de Faraday
_Rinfinity_ Constante de Rydberg
_a0_
Rayon de Bohr
_muB_
Magnton de Bohr
_muN_
Magnton nuclaire
_lambda0_
Longueur donde du photon (ch/e)
_f0_
Frquence du photon (e/h)
_lambdac_
Longueur donde du Compton
_rad_
1 radian
_twopi_
2*pi radians
_angl_
Angle de 180 degrs
_c3_
Constante de la loi de rpartition de Wien
_kq_
k/q (Boltzmann/charge de llectron)
_epsilon0q_ epsilon0/q (permitivit /charge de llectron)
_qepsilon0_ q*epsilon0 (charge de llectron*permitivit)
_epsilonsi_ Constante dilectrique du silicium
_epsilonox_ Constante dilectrique du bioxyde de silicium
_I0_
Intensit de rfrence

170

CHAPITRE 5. LES UNITS ET LES CONSTANTES PHYSIQUES

Chapitre 6

Les fonctions de calcul formel


6.1

Les constantes symboliques : e pi infinity inf


i euler_gamma

e ou %e dsigne le nombre exp(1) ;


pi ou %pi dsigne le nombre .
infinity dsigne .
+infinity ou inf dsigne +.
-infinity ou -inf dsigne .
i ou %i dsigne le nombre complexe i.
euler_gamma dsigne la constante dEuler. On a :
euler_gamma=limit(sum(1/k,k,1,n)-ln(n),n,+infinity)=.

6.2
6.2.1

Les boolens
Les valeurs dun boolen : true false

Un boolen a comme valeur true ou false.


On a les synonymes suivant :
true ou TRUE ou 1 et,
false ou FALSE ou 0.
Les tests ou les conditions sont des fonctions boolennes.

6.2.2

Les tests : ==, !=, >, >=, <, <=

==, !=, >, >=, <, <= sont des oprateurs infixs.
a==b teste lgalit entre a et b et renvoie 1 si a est gal b et 0 sinon.
a!=b renvoie 1 si a est diffrent de b et 0 sinon.
a>=b renvoie 1 si a est suprieur ou gal b et 0 sinon.
a>b renvoie 1 si a est strictement suprieur b et 0 sinon.
a<=b renvoie 1 si a est infrieur ou gal b et 0 sinon.
a<b renvoie 1 si a est strictement infrieur b et 0 sinon.
On tape pour dfinir la fonction boolenne qui vaut true sur ]0; +[ et qui vaut
false sur ] ; 0] :
f(x):=ifte(x>0,true,false)
171

172

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
f(0)==0
On obtient :
1
Attention
a=b nest pas un boolen ! ! ! !
Pour tester lgalit entre a et b il faut mettre a==b.

6.2.3

Les oprateurs boolens : or xor and not

or (ou ||), xor, and (ou &&) sont des oprateurs infixs.
not est un oprateur prfix.
Soient a et b deux boolens :
(a or b) ou (a || b) renvoie 0 (ou false) si a et b valent 0 et renvoie 1
(ou true) sinon.
(a xor b) renvoie 1 si a vaut 1 et b vaut 0 ou si a vaut 0 et b vaut 1 et renvoie
0 si a et b valent 0 ou si a et b valent 1 (cest le "ou exclusif").
(a and b) ou (a && b) renvoie 1 (ou true) si a et b valent 1 et 0 (ou
false) sinon.
sinon.
not(a) renvoie 1 (ou true) si a vaut 0 (ou false), et 0 (ou false) si a vaut
1 (ou true).
On tape :
1>=0 or 1<0
On obtient :
1
On tape :
1>=0 xor 1>0
On obtient :
0
On tape :
1>=0 and 1>0
On obtient :
1
On tape :
not(0==0)
On obtient :
0

6.3. VALUATION DES BOOLENS : EVALB

6.2.4

173

Transformer une expression en liste : exp2list

exp2list renvoie la liste [Xpr0,Xpr1] lorsque largument est (var=Xpr0)


or (var=Xpr1).
exp2list est utile en mode TI pour utiliser la rponse renvoye par solve.
On tape :
exp2list((x=2) or (x=0))
On obtient :
[2,0]
On tape :
exp2list((x>0) or (x<2))
On obtient :
[0,2]
En mode TI on tape :
exp2list(solve((x-1)*(x-2)))
On obtient :
[1,2]

6.3

valuation des boolens : evalb

On peut valuer une expression boolenne grce la commande evalb cette commande sert surtout pour la compatibilit Maple car en Xcas, les boolens sont toujours valus.
On tape :
evalb(sqrt(2)>1.41)
Ou on tape :
sqrt(2)>1.41
On obtient :
1
On tape :
evalb(sqrt(2)>1.42)
Ou on tape :
sqrt(2)>1.42
On obtient :
0

174

6.4
6.4.1

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Les oprateurs bit bit


Les oprateurs bitor, bitxor, bitand

Les entiers peuvent etre entrs avec la notation 0x... en hexadcimal par exemple
0x1f reprsente 16+15=31 en dcimal. On peut faire afficher les entiers en hexadcimal (bouton de la ligne dtat du cas avec le bouton Base (Entiers)).
bitor est le ou logique inclusif bit bit.
On tape :
bitor(0x12,0x38)
ou on tape :
bitor(18,56)
On obtient :
58
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
bitor(18,56) scrit 0b111010 en base 2 et donc vaut 58.
bitxor est le ou logique exclusif bit bit.
On tape :
bitxor(0x12,0x38)
ou on tape :
bitxor(18,56)
On obtient :
42
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
bitxor(18,56) scrit 0b101010 en base 2 et donc vaut 42.
bitand est le et logique bit bit.
On tape :
bitand(0x12,0x38)
ou on tape :
bitand(18,56)
On obtient :
16
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
bitand(18,56) scrit 0b010000 en base 2 et donc vaut 16.

6.5. LES CHANES DE CARACTRES

6.4.2

175

Distance de Hamming bit bit : hamdist

La distance de Hamming bit bit est la somme des valeurs absolues des diffrences bit bit des 2 nombres cest--dire le nombre de bits diffrents.
On tape :
hamdist(0x12,0x38)
ou on tape
hamdist(18,56)
On obtient :
3
en effet :
18 scrit 0x12 en base 16 et 0b010010 en base 2,
56 scrit 0x38 en base 16 et 0b111000 en base 2,
hamdist(18,56) vaut 1+0+1+0+1+0 et donc vaut 3.

6.5
6.5.1

Les chanes de caractres


criture dune chane ou dun caractre : "

Les chanes de caractres scrivent en utilisant " (guillemets) comme dlimiteurs.


Un caractre est une chane ayant un caractre ; en effet les dlimiteurs ou
(quote) servent prciser que lon ne doit pas valuer la variable mise entre
les quotes.
Exemple :
"a" est un caractre mais a ou quote(a) dsigne la variable a non value.
Les caractres dune chane sont reprs par un indice (comme pour les listes).
Pour accder un lment dune chane, on tape lindice de cet lment entre des
crochets pour des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets pour des indices qui commencent
1.
Attention ! Pour toutes les autres fonctions de Xcas (autres que laccs un lment), lindice du premier lment est 0.
Exemple :
On tape :
"bonjour"[2]
On obtient :
"n"
On tape :
"bonjour"[[2]]

176

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
"o"
Remarque
Lorsque lon tape une chane de caractres dans la ligne de commande, cela gnre
un cho en rponse.
Exemple :
On tape :
"bonjour"
On a "bonjour" sinscrit comme question et on a bonjour comme rponse.
On tape :
"bonjour"+", ca va?"
On obtient :
"bonjour, ca va?"

6.5.2

criture du caractre "retour la ligne" : "\n"

"\n" dsigne le caractre retour la ligne.


On tape :
"bonjour, \n ca va?"
On obtient :
"bonjour,
ca va?"

6.5.3

Longueur dune chane : size length

size ou length renvoie la longueur de la chane (ou dne liste).


On tape :
size("bonjour")
Ou on tape :
length("bonjour")
On obtient :
7

6.5. LES CHANES DE CARACTRES

6.5.4

177

Dbut, milieu et fin dune chane : head mid tail

head(s) renvoie le premier caractre de la chane s.


On tape :
head("bonjour")
On obtient :
"b"
mid(s,p,q) renvoie un morceau de longueur q de la chane s commenant au caractre dindice p (attention ! les indices commencent 0).
On tape :
mid("bonjour",2,4)
On obtient :
"njou"
tail(s) renvoie la chane s prive de son premier caractre.
On tape :
tail("bonjour")
On obtient :
"onjour"

6.5.5

Partie droite et gauche dune chane : droit ou right, gauche


ou left

droit(s,n) ou right(s,n) renvoie les n derniers caractres de la


chane s.
On tape :
droit("bonjour",4)
Ou on tape :
right("bonjour",4)
On obtient :
"jour"
gauche(s,n) ou left(s,n) renvoie les n premiers caractres de la
chane s.
On tape :
gauche("bonjour",3)
Ou on tape :
left("bonjour",3)
On obtient :
"bon"

6.5.6

Concatnation dune suite de mots : cumSum

cumSum permet de faire la concatnation dune liste de chanes.


cumSum a comme argument une liste de chanes.
cumSum renvoie une liste de chanes, llment dindice k tant obtenu en concatnant les chanes la prcdant (i.e celles dindice 0...k 1) avec la chane dindice k.
Si l est une liste de chanes cumSum renvoie la liste lr gale sum(l[j],j=0..k)$(k=0..size(l)-1).
On tape :
cumSum("Madame ","bon","jour")

178

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
"Madame ","Madame bon","Madame bonjour"

6.5.7

Le code ASCII dun caractre : ord

ord a pour argument une chane s (resp une liste l de chanes).


ord renvoie le code ASCII du premier caractre de s chane ou la liste des codes
ASCII des premiers caractres des lments de l.
On tape :
ord("a")
On obtient :
97
On tape :
ord("abcd")
On obtient :
97
On tape :
ord(["abcd","cde"])
On obtient :
[97,99]
On tape :
ord(["a","b","c","d"])
On obtient :
[97,98,99,100]

6.5.8

Le code ASCII dune chane : asc

asc a pour argument une chane s.


asc renvoie la liste des codes ASCII des caractres de s.
On tape :
asc("abcd")
On obtient :
[97,98,99,100]
On tape :
asc("a")
On obtient :
[97]

6.5. LES CHANES DE CARACTRES

6.5.9

179

La chane associe une suite dASCII : char

char a pour argument une liste l des code ASCII.


char renvoie la chane dont les caractres ont pour codes ASCII les lments de
la liste l.
On tape :
char([97,98,99,100])
On obtient :
"abcd"
On tape :
char(97)
On obtient :
"a"
On tape :
char(353)
On obtient :
"a"
En effet 353-256=97.

6.5.10

Reprer un caractre dans une chane : inString

inString a deux paramtres : une chane de caractres S et un caractre c.


inString est une fonction qui teste si le caractre c est dans la chane de caractres S.
inString renvoie -1 si c nest pas dans S et,
sinon renvoie "lindice de sa premire apparition".
On tape :
inString("abcded","d")
On obtient :
3
On tape :
inString("abcd","e")
On obtient :
-1

180

6.5.11

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Concatner des objets en une chane : cat

cat a comme paramtre une squence dobjets.


cat concatne ces objets en une chane de caractres.
On tape :
cat("abcd",3,"d")
On obtient :
"abcd3d"
On tape :
c:=5
cat("abcd",c,"e")
On obtient :
"abcd5e"
On tape :
purge(c)
cat(15,c,3)
On obtient :
"15c3"

6.5.12

Concatner des objets en une chane : +

+ est un oprateur prfix ou infix qui a comme paramtre une squence dobjets
comprenant une chane de caractres.
+ concatne ces objets en une chane de caractres.
Attention
Quand l oprateur + est prfix il faut le quot cest dire lcrire +
On tape :
+("abcd",3,"d")
Ou on tape :
"abcd"+3+"d"
On obtient :
"abcd3d"
On tape :
c:=5
On tape ensuite :
"abcd"+c+"e"
Ou on tape ensuite :
+("abcd",c,"e")
On obtient :
"abcd5e"

6.5. LES CHANES DE CARACTRES

6.5.13

181

Pour concatner des nombres et des chanes : cat +

+ ou cat value les arguments et les concatne en une chane. cela permet donc
de transformer un nombre rel en une chane de caractres.
On tape :
"="+123
Ou on tape :
cat("=",123)
On obtient :
"=123"
On tape :
a:=123
puis,
"0n a obtenu : "+a)
ou
cat("0n a obtenu : ",a)
On obtient :
"On a obtenu : 123"

6.5.14

Pour transformer un nombre rel ou entier en une chane :


string

string value son argument et le transforme en une chane de caractres.


On tape :
string(1.32*10^20)
On obtient :
"1.23e+20"
On tape :
a:=1.32*10^4)
string(a+a)
On obtient :
"26400"

182

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.5.15

Pour transformer un nombre rel en une chane : format

format value son argument et le transforme en une chane de caractres du format indiqu.
Le format est indiqu par une lettre et un nombre :
f (pour format flottant) suivi du le nombre de chiffres aprs la virgule.
On tape :
format(sqrt(2)*10^10,f13)
On obtient :
"14142135623.7308959960938"
s (pour format scientifique) suivi du nombre de chiffres significatifs.
On tape :
format(sqrt(2)*10^10,s13)
On obtient :
"14142135623.73"
e (pour format ingnieur) suivi du nombre de chiffres significatifs augment
de 1.
On tape :
format(sqrt(2)*10^10,e13)
On obtient :
"1.4142135623731e+10"

6.5.16

Pour transformer une chane en un nombre ou en une commande : expr

Voici , selon la chane, les transformations que fait expr :


expr permet de transformer une chane de chiffres ou lettres en un nombre
entier ayant comme criture en base 8,ou 10 ou 16 cette chane de chiffres. Il
faut bien sr que lcriture soit valide et reprsente un nombre entier dans la
base donne : toutefois expr("019") renvoie le nombre dcimale 19.0
(voir aussi 8.5.5).
Attention
Si la chane commence par 0x, expr transforme cette chane en le nombre
entier crit en base 16, sinon,
si la chane commence par 0, expr transforme cette chane en le nombre
entier crit en base 8 et sinon
expr transforme cette chane en le nombre entier crit en base 10.
On tape :
expr("123")
On obtient :
123
On tape :
expr("0123")
On obtient :
83
2
En effet : 1 8 + 2 8 + 3 = 83 On tape :
expr("0x12f")
On obtient :
303

6.6. CRITURE EN BASE B DUN ENTIER

183

En effet 1 162 + 2 16 + 15 = 303


Remarque On tape :
expr(char([48,50,56,56]))
On obtient un nombre flottant :
288.0
En effet char([48,50,56,56]) renvoie "0288".
Or un nombre entier commenant par 0 est un nombre crit en octal, du coup
il ne doit pas contenir de chiffre suprieur ou gal 8. Ici le nombre a des
chiffres gaux 8, il est donc rinterprt (aprs dtection derreur de saisie
en octal) comme un nombre flottant.
On tape :
expr(char([48,50,55,55]))
On obtient un nombre exact car lcriture "0277" est valide :
191
En effet char([48,50,55,55]) renvoie "0277" et 0277 est lcriture
en base 8 de 191 (7+8*7+64*2=191).
On tape :
expr(char([48,48,50,51]))
On obtient un nombre exact car lcriture "0023" est valide :
19
En effet char([48,50,55,55]) renvoie "0023" et 0023 est lcriture
en base 8 de 19 (3+2*8=19).
expr permet aussi de transformer une chane de chiffres reprsentant un
nombre dcimal en ce nombre.
On tape :
expr("123.4567")
On obtient :
123.4567
On tape :
expr("123e-5")
On obtient :
0.00123
expr permet aussi de transformer une chane de caractres pouvant tre
interprte comme une commande.
On tape :
expr("a:=1")
On obtient :
1 et, la variable a contient 1

6.6

criture en base b dun entier

6.6.1

Transformer un entier en la liste des coefficients de son criture


en base b : convert convertir

convert ou convertir permet de faire diffrente conversions selon loption choisie par le deuxime argument. Pour convertir un entier n en son criture
en base b, cette option est base. Les arguments de convert ou convertir
sont alors un entier n, base et la valeur de la base b.

184

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

convert ou convertir renvoie la liste des coefficients de lcriture en base b


de lentier n.
On tape :
convert(123,base,8)
On obtient :
[3,7,1]
On vrifie en tapant expr("0173") ou horner(revlist([3,7,1]),8)
ou convert([3,7,1],base,8) et on obtient bien 123
On tape :
convert(142,base,12)
On obtient :
[10,11]

6.6.2

Transformer la liste des coefficients d une criture en base b en


un entier : convert convertir

convert ou convertir permet de faire diffrentes conversions selon loption


choisie par le deuxime argument.
Pour convertir la liste des coefficients d une criture en base b dun entier n en
lentier n, cette option est base. Les arguments de convert ou convertir
sont alors une list l, base et la valeur de la base b.
convert ou convertir renvoie lentier n.
On tape :
convert([3,7,1],base,8)
Ou
horner(revlist([3,7,1]),8)
On obtient :
123
On tape :
convert([10,11],base,12)
Ou
horner(revlist([10,11]),12)
On obtient :
142

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

6.7

185

Les entiers (et les entiers de Gauss)

Dans tout ce paragraphe, on peut utiliser des entiers de Gauss (nombres complexes de la forme a + i b avec a et b dans Z), la place des entiers dans les
diffrentes fonctions.

6.7.1

La factorielle : factorial

Xcas peut grer des nombres entiers en prcision infinie.


On tape :
factorial(100)
On obtient :
9332621544394415268169923885626670049071596826438162
1468592963895217599993229915608941463976156518286253
697920827223758251185210916864000000000000000000000000

6.7.2

Le PGCD : gcd igcd

gcd ou igcd dsigne le PGCD de deux (ou de plusieurs) entiers ou rationnels ou


entiers de Gauss (pour les polynmes voir alors 6.27.7).
On tape :
gcd(18,15)
ou
igcd(18,15)
On obtient :
3
On tape :
gcd(5,2+i)
ou
igcd(5,2+i)
On obtient :
2+i
en effet (2 + i) (2 i) = 5
On tape :
gcd(1+3i,7-4i)
ou
igcd(1+3i,7-4i)

186

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
2+i
en effet (1 + i) (2 + i) = 1 + 3 i et i (2 + i) (3 + 2i) = (7 4i)
On tape :
igcd(15/7,50/9)
ou
gcd(15/7,50/9)
On obtient :
5/63
5
en effet 15
7 = 27 63 et
On tape :

50
9

5
= 70 63
.

gcd(18,15,21,36)
ou
igcd(18,15,21,36)
On obtient :
3
On tape :
gcd([18,15,21,36])
On obtient :
3
On peut aussi mettre comme paramtres deux listes de mme longueur (ou une
matrice ayant 2 lignes), dans ce cas gcd renvoie le PGCD des lments de mme
indice (ou dune mme colonne). On tape :
gcd([6,10,12],[21,5,8])
Ou on tape :
gcd([[6,10,12],[21,5,8]])
On obtient :
[3,5,4]
On peut aussi utiliser la librairie Pari qui a une fonction gcd plus gnrale car
pari("gcd",x,y) fonctionne aussi lorsque x et y sont rationnels et aussi lorsque
x et y sont des listes ou des matrices qui nont pas forcment la mme dimension
(cest alors le type de y qui donne le type du rsultat.
On tape :

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

187

pari("gcd",5/7,50/9)
On obtient :
5/63
car

5
7

=9

5
63

et

50
9

= 70

5
63

On tape :

pari("gcd", [4,3],[20,30,50,75]))
On obtient une matrice A de dimension 4 2, cest aussi une liste de mme longueur que y i.e. de longueur 4 :
[[4,1],[2,3],[2,1],[1,3]]
car gcd(4, 20) = 4, gcd(3, 20) = 1, gcd(4, 30) = 2, gcd(3, 30) = 3...
Pour obtenir ce rsultat avec Xcas, on doit taper 2 instructions :
gcd( [4,4,4,4],[20,30,50,75])
On obtient la premire colonne de A :
[4,2,2,1]
et on tape
gcd( [3,3,3,3],[20,30,50,75])
On obtient la deuxime colonne de A :
[1,3,1,3]
: On tape :
diag(pari("gcd", [5,4,3,2],[20,30,50,75])))
ou on tape :
gcd([5,4,3,2],[20,30,50,75])
On obtient :
[5,2,1,1]
Un exemple
Dterminer le pgcd de 4n + 1 et de 5n + 3 quand n N.
On dfinit :

f(n):=gcd(4*n+1,5*n+3)
Puis on tape le programme essai(n) qui renvoie pour j = n n la liste des
valeurs de j, a lorsque le pgcd de 4j + 1 et 5j + 3 est gal a 6= 1 :

188

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

essai(n):={
local j,a,L;
L:=NULL;
for (j:=-n;j<n;j++) {
a:=f(j);
if (a!=1) {
L:=L,[j,a];
}
}
return L;
}
Puis on tape :
essai(20)
On obtient :
[-16,7],[-9,7],[-2,7],[5,7],[12,7],[19,7]
On voit donc que 4n + 1 et 5n + 3 sont soit premiers entre eux soit leur pgcd vaut
7 lorsque n [16, 9, 2, 5, 12, 19] cest dire lorsque n = 5 + k 7.
On doit donc montrer que :
si n! = 5 + k 7 pour k Z, 4n + 1 et 5n + 3 sont premiers entre eux, et
si n = 5 + k 7 pour k Z, 4n + 1 et 5n + 3 ont 7 comme pgcd.

6.7.3

Le PGCD : Gcd

Gcd est la forme inerte de gcd. Voir la section 6.27.8 sur les polynmes coefficients dans Z/pZ pour utiliser cette instruction.
On tape :
Gcd(18,15)
On obtient :
gcd(18,15)

6.7.4

Le PGCD dune liste dentiers : lgcd

lgcd dsigne le PGCD des lments dune liste dentiers (ou dune liste de polynmes).
On tape :
lgcd([18,15,21,36])
On obtient :
3
On peut aussi utiliser la librairie Pari et taper :
pari("content",([18,15,21,36])

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

189

On obtient :
3
Attention
On ne peut pas mettre comme paramtres deux listes de mme longueur.

6.7.5

Le PPCM : lcm

lcm dsigne le PPCM de deux entiers ou de deux rationnels (ou deux polynmes
voir alors 6.27.10).
On tape :
lcm(18,15)
On obtient :
90
On tape :
lcm(5,2+i))
On obtient :
5
On tape :
lcm(1+3i,7-4i)
On obtient :
11+3*i
en effet (1+i)(12i)(3+2i) = 11+3i = (3i)(3+2i) = (1+i)(74i)
On tape :
lcm(15/7,50/9)
On obtient :
150
en effet gcd(15/7,50/9)=5/63 et

6.7.6

15
7

50
9

= 150

5
63

Factoriser un entier : ifactor factoriser_entier

ifactor a comme paramtre un entier.


ifactor dcompose cet entier (ou entier de Gauss) en produit de facteurs premiers.
On tape :
ifactor(90)
On obtient :

190

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


2*3^2*5

On tape :
ifactor(-90)
On obtient :
(-1)*2*3^2*5
On tape :
ifactor(90i)
On obtient :
(1+i)^2*3^2*(2+i)*(2-i)
On tape :
ifactor(90+5i)
On obtient :
(i)*(2+i)*(2-i)^3*(3-2*i)

6.7.7

Liste des facteurs dun entier : facteurs_premiers ifactors

ifactors a comme paramtre un entier (ou une liste dentiers).


ifactors effectue aussi la dcomposition de cet entier (ou des entiers de la liste)
en produit de facteurs premiers, mais le rsultat est donn sous la forme dune liste
(ou dune liste de listes), forme par les diviseurs premiers et par leur multiplicit.
On tape :
ifactors(90)
On obtient :
[2,1,3,2,5,1]
On tape :
ifactors(-90)
On obtient :
[-1,1,2,1,3,2,5,1]
On tape :
ifactors(90i)
On obtient :
[1+i,2,3,2,2+i,1,2-i,1]
On tape :

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

191

ifactors(90+5i)
On obtient :
[i,1,2+i,1,2-i,3,3-2*i,1]
On tape :
ifactors([36,52])
On obtient :
[[2,2,3,2],[2,2,13,1]]

6.7.8

Matrice des facteurs dun entier : maple_ifactors

maple_ifactors a comme paramtre un entier n (ou une liste dentiers).


maple_ifactors effectue aussi la dcomposition de cet entier (ou des entiers
de la liste) en produit de facteurs premiers, mais selon la syntaxe Maple : le rsultat est donn sous la forme dune liste, forme de +1 ou -1 (pour le signe) et dune
matrice ayant 2 colonnes et dont les lignes sont formes des diviseurs premiers de
n et de leur multiplicits (ou dune liste de listes...).
On tape :
maple_ifactors(90)
On obtient :
[1,[[2,1],[3,2],[5,1]]]
On tape :
maple_ifactor([36,52])
On obtient :
[[1,[[2,2],[3,2]]],[1,[[2,2],[13,1]]]]

6.7.9

Liste des diviseurs dun entier : idivis divisors

idivis ou divisors donne la liste des diviseurs dun entier (ou dune liste
dentiers).
On tape :
idivis(36)
On obtient :
[1,2,4,3,6,12,9,18,36]
On tape :
idivis([36,22])
On obtient :
[[1,2,4,3,6,12,9,18,36],[1,2,11,22]]

192

6.7.10

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Quotient entier infix de la division euclidienne : div

div est un oprateur infix qui dsigne le quotient entier q de la division euclidienne des deux entiers ou de deux entiers de Gauss a et b donns en argument
(a = b q + r avec 0 r < b).
On tape :
148 div 5
On obtient :
29
On tape :
factorial(148) div (factorial(145)+2)
On obtient :
3176375
factorial(148) div factorial(145)+2
On obtient :
3176378
On tape :
(25+12*i) div (5+7*i)
On obtient :
3-2*i

6.7.11

Quotient entier de la division euclidienne : iquo intDiv

iquo (ou intDiv) dsigne le quotient entier q de la division euclidienne des deux
entiers a et b donns en argument (a = b q + r avec 0 r < b).
iquo travaille avec des entiers ou des entiers de Gauss.
Pour les entiers de Gauss, on choisit q pour que b q soit le plus proche possible
de a et on peut montrer que lon peut choisir r tel que |r|2 |b|2 /2.
On tape :
iquo(148,5)
On obtient :
29
On tape :
iquo(factorial(148),factorial(145)+2)
On obtient :
3176375

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

193

ou encore
iquo(25+12*i,5+7*i)
On obtient :
3-2*i
On a :
a b q = 4 + i et on a | 4 + i|2 = 17 < |5 + 7 i|2 /2 = 74/2 = 37

6.7.12

Reste entier de la division euclidienne : irem remain smod


mods mod %

irem (ou remain) dsigne le reste entier r de la division euclidienne des


deux entiers a et b donns en argument (a = b q + r avec 0 r < b).
Pour les entiers de Gauss, on choisit q pour b q soit le plus proche possible
de a et on peut montrer que lon peut choisir r tel que |r|2 |b|2 /2.
On tape :
irem(148,5)
On obtient :
3
irem travaille avec des entiers longs ou des entiers de Gauss.
On tape :
irem(factorial(148),factorial(45)+2 )
On obtient :
111615339728229933018338917803008301992120942047239639312
ou encore
irem(25+12*i,5+7*i)
On obtient :
-4+i
On a :
a b q = 4 + i et on a | 4 + i|2 = 17 < |5 + 7 i|2 /2 = 74/2 = 37
smod ou mods est prfix et a 2 entiers comme arguments.
smod ou mods dsigne le reste entier symtrique s de la division euclidienne des deux entiers a et b donns en argument (a = b q + s avec
b/2 < s b/2).
On tape :
smod(148,5)
On obtient :
-2
mod ou % sert dsigner un nombre modulaire.
mod ou % est infix et renvoie un nombre modulaire. Attention % doit tre
suivi dun espace.
On tape :
148 mod 5
ou
148 % 5

194

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On obtient :

-2 % 5
ce qui veut dire que 148 mod 5 = 2 mod 5 et que 148 mod 5 et 2 % 5
sont des lments de Z/5Z (voir 6.33 pour avoir les oprations possibles
dans Z/5Z).
Remarque
Si on veut passer dun lment de Z/5Z un lment de Z, on tape % 0 : On
tape :
(148% 5)% 0
On obtient :
-2

6.7.13

Le quotient et le reste de la division euclidienne : iquorem

iquorem donne la liste du quotient q et du reste entier r de la division euclidienne


des deux entiers a et b donns en argument (a = b q + r avec 0 r < b).
.
On tape :
iquorem(148,5)
On obtient :
[29,3]

6.7.14

Test de parit : even est_pair

even ou est_pair a comme argument un entier n.


even ou est_pair renvoie 1 si n est pair et renvoie 0 si n est impair.
On tape :
even(148)
On tape :
est_pair(148)
On obtient :
1
On tape :
even(149)
On tape :
est_pair(149)
On obtient :
0

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

6.7.15

195

Test de non parit : odd est_impair

odd ou est_impair a comme argument un entier n.


odd ou est_impair renvoie 1 si n est impair et renvoie 0 si n est pair.
On tape :
odd(148)
On tape :
est_impair(148)
On obtient :
0
On tape :
odd(149)
On tape :
est_impair(149)
On obtient :
1

6.7.16

Test de pseudo-primalit : is_pseudoprime

Si n est premier, is_pseudoprime(n) renvoie 2 (vrai),


Si n est pseudo-premier, is_pseudoprime(n) renvoie 1 (vrai),
Si n nest pas premier, is_pseudoprime(n) renvoie 0 (faux).
Dfinition : Pour les nombres infrieurs 1014 tre pseudo-premier et premier cest
la mme chose ! ...mais au del de 1014 un nombre pseudo-premier est premier avec
une probabilit trs forte (cf lalgorithme de Rabin et de Miller-Rabin dans la partie
Algorithmique et traduction Xcas avec le menu Aide->Manuels->Programmation).
On tape :
is_pseudoprime(100003)
On obtient :
2
On tape :
is_pseudoprime(9856989898997)
On obtient :
2
On tape :
is_pseudoprime(14)

196

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
0
On tape :
is_pseudoprime(9856989898997789789)
On obtient :
1

6.7.17

Test de primalit : is_prime isprime isPrime

is_prime(n) renvoie 1 (vrai) ou 0 (faux) selon que son argument est premier
ou non. isprime ou isPrime renvoie true ou false.
Utiliser la commande is_prime(n,1) (ou pari("isprime",n,1)) pour
obtenir un certificat de primalit par le test "p-1" de Selfridge-Pocklington-Lehmer
(voir la documentation de PARI/GP, depuis le menu Aide->Manuels->PARI-GP))
et pari("isprime",n,2) ou is_prime(n,2) pour utiliser le test APRCL
ou is_prime(n) pour utiliser un test mixte.
En interne isprime appelle is_prime, et si la reponse est 0 il la transforme en
false, sinon il renvoie true. On ne peut donc pas obtenir de certificat de primalit avec isprime, par contre les arguments de isprime et is_prime sont
identiques.
On tape :
is_prime(100003)
On obtient :
1
On tape :
isprime(100003)
On obtient :
true
On tape :
is_prime(98569898989987)
On obtient :
1
On tape :
is_prime(14)
On obtient :
0

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

197

On tape :
isprime(14)
On obtient :
false
Pour obtenir un certificat de primalit pour n = 9856989898997789789, on tape :
is_prime(9856989898997789789,1)
ou :
pari("isprime",9856989898997789789,1)
On obtient les coefficients prouvant la primalit par le test "p-1" de SelfridgePocklington-Lehmer :
[[2,2,1],[19,2,1],[941,2,1],[1873,2,1],[94907,2,1]]
sinon, on tape :
pari("isprime",9856989898997789789,2)
Ou on tape :
is_prime(9856989898997789789,2)
On obtient :
1

6.7.18

Nombre pseudo-premier : nprimes

nprimes(n) renvoie le nombre de nombres pseudo-premier (ou premier) qui


sont infrieurs ou gaux n.
On tape :
nprimes(5)
On obtient :
3
On tape :
nprimes(10)
On obtient :
4

198

6.7.19

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

N-ime nombre pseudo-premier : ithprime

ithprime(n) dsigne le n-ime nombre pseudo-premier (ou premier).


On tape :
ithprime(75)
On obtient :
379

6.7.20

Nombre pseudo-premier aprs n : nextprime

nextprime(n) dsigne le plus petit nombre pseudo-premier (ou premier) plus


grand que n.
On tape :
nextprime(75)
On obtient :
79

6.7.21

Nombre pseudo-premier avant n : prevprime

prevprime(n) dsigne le premier nombre pseudo-premier (ou premier) trouv


avant n.
On tape :
prevprime(75)
On obtient :
73

6.7.22

Le n-ime nombre premier : ithprime

ithprime(n) dsigne le n-ime nombre premier infrieur 10000 (pour linstant !).
On tape :
ithprime(75)
On obtient :
379
On tape :
ithprime(1229)
On obtient :
9973
On tape :
ithprime(1230)
On obtient :
ithprime(1230)
car cela dsigne un nombre premier > 10000.

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

6.7.23

199

Identit de Bzout : iegcd igcdex bezout_entiers

iegcd(a,b) ou igcdex(a,b) dsigne le PGCD tendu (identit de Bzout)


de deux entiers.
iegcd(a,b) ou igcdex(a,b) renvoie [u,v,d] vrifiant au+bv=d et tel
que d=gcd(a,b).
On tape :
iegcd(48,30)
On obtient :
[2,-3,6]
En effet :
2 48 + (3) 30 = 6

6.7.24

Rsolution de au+bv=c dans Z : iabcuv

iabcuv(a,b,c) donne [u,v] vrifiant au+bv=c.


Il faut bien sr que c soit un multiple de gcd(a,b) pour obtenir une solution.
On tape :
iabcuv(48,30,18)
On obtient :
[6,-9]

6.7.25

Restes chinois : ichinrem, ichrem

ichinrem([a,p],[b,q]) ou ichrem([a,p],[b,q]) dsigne une liste


[c,lcm(p,q)] forme de deux entiers.
Le premier nombre c est tel que
k Z,

d = c + k lcm(p, q)

vrifie
d=a

(mod p),

d = b (mod q)

Si p et q sont premiers entre eux, il existe toujours une solution d et toutes les
solutions sont alors congrues modulo p*q.
Exemples :
1. Trouver les solutions de :


x = 3 (mod 5)
x = 9 (mod 13)

On tape :
ichinrem([3,5],[9,13])
ou on tape :
ichrem([3,5],[9,13])

200

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On obtient :
[-17,65]
ce qui veut dire que x=-17 (mod 65)
On peut aussi taper :
ichrem(3% 5,9% 13)
On obtient :
-17% 65

2. Trouver les solutions de :

x = 3 (mod 5)
x = 4 (mod 7)

x = 1 (mod 9)
On tape tout dabord :
tmp:=ichinrem([3,5],[4,7])
ou on tape :
tmp:=ichrem([3,5],[4,7])
On obtient :
[-17,35]
puis on tape
ichinrem([1,9],tmp)
ou on tape :
ichrem([1,9],tmp)
On obtient :
[-17,315]
ce qui veut dire que x=-17 (mod 315)
On peut aussi taper directement :
ichinrem([3% 5,4% 7,1% 9])
On obtient :
-17% 315

6.7.26

Reste chinois pour des polynmes connus modulo plusieurs entiers : ichinrem, ichrem

ichrem (ou ichinrem) peut aussi tre utiliser pour trouver les coefficients
de polynmes qui sont connus modulo plusieurs entiers, par exemple trouver :
ax + b modulo 315 = 5 7 9 tel que :

a = 3 (mod 5)
b = 1 (mod 5)
a = 4 (mod 7) ,
b = 2 (mod 7)

a = 1 (mod 9)
b = 3 (mod 9)
On tape :

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

201

ichrem((3x+1)% 5,(4x+2)% 7,(x+3)% 9)


On obtient :
(-17% 315) x+156% 315
ce qui veut dire que a=-17 (mod 315) et b=156 (mod 315).

6.7.27

Reste chinois pour des listes dentiers : chrem

chrem a comme argument deux listes de mme longueur.


chrem renvoie une liste de deux entiers.
Par exemple, chrem([a,b,c],lcm(p,q,r)) dsigne une liste forme de
deux entiers :
le premier entier est un nombre x vrifiant :
x=a mod p et x=b mod q et x=c mod r.
Il existe toujours une solution x si p et q sont premiers entre eux, et toutes les
solutions sont congrues modulo p*q*r
ATTENTION lordre des paramtres, en effet on a :
chrem([a,b],[p,q])=ichrem([a,p],[b,q])=
ichinrem([a,p],[b,q])
Exemples :
Trouver les solutions de :

x = 3 (mod 5)
x = 9 (mod 13)
On tape :
chrem([3,9],[5,13])
On obtient :
[-17,65]
ce qui veut dire que x=-17 (mod 65) Trouver les solutions de :

x = 3 (mod 5)
x = 4 (mod 6)

x = 1 (mod 9)
On tape :
chrem([3,4,1],[5,6,9])
On obtient :
[28,90]
ce qui veut dire que x=28 (mod 90)
Remarque
chrem peut aussi tre utiliser pour trouver les coefficients de polynmes qui sont
connus modulo plusieurs entiers, par exemple trouver ax + b modulo 315 = 5
7 9 tel que :

202

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

b = 1 (mod 5)
b = 2 (mod 7)

b = 3 (mod 9)

a = 3 (mod 5)
a = 4 (mod 7) ,

a = 1 (mod 9)
On tape :

chrem([3x+1,4x+2,x+3],[5,7,9])
On obtient :
[-17x+156),315]
ce qui veut dire que a=-17 (mod 315) et que b=156 (mod 315).

6.7.28

Rsolution de a2 + b2 = p dans Z : pa2b2

pa2b2 dcompose un entier p premier, congru 1 modulo 4, en la somme de deux


carrs : p = a2 + b2 .
Le rsultat est donn sous la forme dune liste.
On tape :
pa2b2(17)
On obtient :
[4,1]
en effet 17 = 42 + 12

6.7.29

Indicatrice dEuler : euler Phi

euler (ou Phi) dsigne lindicatrice dEuler dun entier.


euler(n) (ou Phi(n)) est gale au cardinal de lensemble des nombres infrieurs n qui sont premiers avec n.
On tape :
euler(21)
On obtient :
12
En effet lensemble :
E={2,4,5,7,8,10,11,13,15,16,17,19} correspond aux nombres infrieurs 21 qui
sont premiers avec 21, et E a comme cardinal 12.
Euler a introduit cette fonction pour formuler la gnralisation du petit thorme de
Fermat qui dit "si n est premier et si a est premier avec n alors an1 = 1 mod n".
La gnralisation est (puisque si n est premier, euler(n) = n 1 ) :
aeuler(n) = 1 mod n si a et n sont premiers entre eux.
On tape :
powmod(5,12,21)
On obtient :
1

6.7. LES ENTIERS (ET LES ENTIERS DE GAUSS)

6.7.30

203

Symbole de Legendre : legendre_symbol

Lorsque n est premier, on dfinit le symbole de Legendre de a not


a
n

a
n

par :

0 si a = 0 mod n
1 si a 6= 0 mod n et si a = b2 mod n

1 si a =
6 0 mod n et si a 6= b2 mod n

Quelques proprits
Si n est premier :
a

n1
2

a
n

mod n

   
q1
p1
p
q
.
= (1) 2 .(1) 2 si p et q sont impairs et positifs
q
p
 
p2 1
2
= (1) 8
p
 
p1
1
= (1) 2
p
legendre_symbol
a deux paramtres a et n et renvoie le symbole de Le
a
gendre n .
On tape :
legendre_symbol(26,17)
On obtient :
1
On tape :
legendre_symbol(27,17)
On obtient :
-1
On tape :
legendre_symbol(34,17)
On obtient :
0

204

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.7.31

Symbole de Jacobi : jacobi_symbol

Lorsque n nest pas premier on dfinit le symbole de Jacobi de a, not encore


, partir du symbole de Legendre et de la dcomposition de n en facteur premier.
Soit
n = p1 1 ..pk k
a
n

o pj est premier and j est un entier pour j = 1..k. Le symbole de Jacobi de a


est dfinit par :
 a   a 1  a k
=
...
n
p1
pk

jacobi_symbol a deux paramtres a et n et renvoie le symbole de Jacobi na .
On tape :
jacobi_symbol(25,12)
On obtient :
1
On tape :
jacobi_symbol(35,12)
On obtient :
-1
On tape :
jacobi_symbol(33,12)
On obtient :
0

6.8
6.8.1

Analyse combinatoire
La factorielle : factorial !

factorial a comme paramtre un entier n.


factorial(n) calcule n! (on peut aussi crire directement n!).
On tape :
factorial(10)
ou
10!
On obtient :
3628800

6.8. ANALYSE COMBINATOIRE

6.8.2

205

Les coefficients binomiaux : comb nCr

comb (ou nCr) a comme paramtre deux entiers positifs n et p.


comb(n,p) ou nCr(n,p) calcule Cnp .
n!
On a :Cnp = p!(np)!
= n(n1)...(np+1)
.
p!
On tape :
comb(5,2)
On obtient :
10
Remarque 1
On peut dfinir comb (ou nCr) avec comme paramtre n entier ngatif et p entier
positif par :
comb(n,p)= n(n1)...(np+1)
On tape :
p!
comb(-5,2)
On obtient :
15
En effet 5 6/2 = 15
On tape :
comb(-5,3)
On obtient :
-35
En effet 5 6 7/6 = 35
Remarque 2
On a aussi binomial(n,p)=comb(n,p) lorsque n et p sont deux entiers positifs mais binomial peut admettre un paramtre supplmentaire et dans ce cas
binomial(n,p,a) calcule Cnp ap (1 a)np .

6.8.3

Les arrangements : perm nPr

perm ou nPr a comme paramtre deux entiers n et p.


perm(n,p) ou nPr(n,p) calcule Apn .
On tape :
perm(5,2)
On obtient :
20

206

6.8.4

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Les nombres entiers alatoires : rand alea hasard

rand a comme paramtre un entier n ou aucun paramtre.


rand(n) renvoie un entier p alatoire vrifiant 0 p < n.
On tape :
rand(10)
On obtient par exemple :
8
rand() renvoie un rel r alatoire vrifiant 0 p < 1.
On tape :
rand()
On obtient par exemple :
0.72392661823
Remarque Il faut utiliser srand(n); (avec n un entier) ou srand; pour initialiser la suite des nombres alatoires.

6.9
6.9.1

Les rationnels
Transformer un nombre dcimal en rationnel : exact
float2rational

float2rational ou exact a comme paramtre un nombre dcimal d et renvoie un nombre rationnel q qui approche d moins de epsilon. On dfinit
epsilon dans la configuration du cas (menu Cfg) ou avec la commande cas_setup.
On tape :
float2rational(0.3670520231)
On obtient pour epsilon=1e-10 :
127/346
Essayez dentrer :
123/12+57/21
On obtient :
363/28
Puis :
evalf(363/28)
On obtient :
12.9642857143
On tape :
float2rational(12.9642857143)
On obtient :

6.9. LES RATIONNELS

207
363/28

Si on mlange les deux reprsentations par exemple :


1/2+0.7
On obtient
1.2
On tape :
1/2+float2rational(0.7)
On obtient :
6/5

6.9.2

Partie entire et fractionnaire : propfrac propFrac

A
aprs simplification
propfrac(A/B) ou propFrac(A/B) crit la fraction
B
a
en (avec gcd(a, b) = 1) sous la forme :
b
r
q + avec 0 r < b
b
Pour les fractions rationnelles on se reportera 6.30.8.
On tape :
propfrac(42/15)
On obtient :
2+4/5
On tape :
propfrac(43/12)
On obtient :
3+7/12

6.9.3

Numrateur dune fraction aprs simplification : numer, getNum

numer ou getNum a comme argument une fraction et renvoie le numrateur de


cette fraction simplifie (pour les fractions rationnelles on se reportera 6.30.2).
On tape :
numer(42/12)
Ou :
getNum(42/12)
On obtient :

208

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


7

Si on veut le numrateur de cette fraction non simplifie il faut quoter largument


(pour les fractions rationnelles on se reportera 6.30.1).
On tape :
numer(42/12)
Ou :
getNum(42/12)
On obtient :
42

6.9.4

Dnominateur dune fraction aprs simplification : denom getDenom

denom ou getDenom a comme argument une fraction et renvoie le dnominateur


de cette fraction simplifie (pour les fractions rationnelles on se reportera 6.30.4)
On tape :
denom(42/12)
Ou :
getDenom(42/12)
On obtient :
2
Si on veut le dnominateur de cette fraction non simplifie il faut quoter largument
(pour les fractions rationnelles on se reportera 6.30.3).
On tape :
denom(42/12)
Ou :
getDenom(42/12)
On obtient :
12

6.9.5

Numrateur et dnominateur dune fraction : f2nd fxnd

f2nd (ou fxnd) a comme argument une fraction et renvoie, la liste forme par
le numrateur et le dnominateur de cette fraction simplifie (pour les fractions
rationnelles on se reportera 6.30.5).
On tape :
f2nd(42/12)
On obtient :
[7,2]

6.9. LES RATIONNELS

6.9.6

209

Simplification dun couple : simp2

simp2 a pour argument deux entiers ou une liste de deux entiers reprsentant une
fraction (pour deux polynmes voir alors 6.30.6).
simp2 renvoie une liste forme par le numrateur et le dnominateur de cette
fraction simplifie.
On tape :
simp2(18,15)
On obtient :
[6,5]
On tape :
simp2([42,12])
On obtient :
[7,2]

6.9.7

Dveloppement en fraction continue dun rel : dfc

dfc a comme argument un nombre rel ou fractionnaire ou dcimal a et un entier


n (ou un rel epsilon).
dfc renvoie une liste reprsentant le dveloppement en fractions continues de
a dordre n (ou de prcision epsilon cest dire le dveloppement en fractions continues qui approche a ou evalf(a) moins de epsilon, par dfaut
epsilon est gal la valeur du epsilon dfinit dans la configuration du cas
laide du menu CfgIConfiguration du CAS).
On peut aussi utiliser convert avec loption confrac : dans ce cas la valeur de
epsilon est gal la valeur du epsilon dfinit dans la configuration du CAS
laide du menu CfgIConfiguration du CAS (voir 6.23.26).
Remarques
Si le dernier lment de la liste rsultat est une liste il reprsente la priode et
si le dernier lment de la liste rsultat nest pas entier, il reprsente le reste r
(a = a0 + 1/.... + 1/an + 1/r).
Si on a dfc(a)=[a0,a1,a2,[b0,b1]] cela veut dire que :
1
a = a0 +
a1 + a2+ 1 1
b0+

b1+

1
1
b0+...

Si on a dfc(a)=[a0,a1,a2,r] cela veut dire que :


1
a = a0 +
1
a1 + a2+
1
On tape :

dfc(sqrt(2),5)
On obtient :
[1,2,[2]]

210

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
dfc(evalf(sqrt(2)),1e-9)
Ou :
dfc(sqrt(2),1e-9)
On obtient :
[1,2,2,2,2,2,2,2,2,2,2,2,2]
On tape :
convert(sqrt(2),confrac,dev)
On obtient si dans la configuration du cas epsilon=1e-9 :
[1,2,2,2,2,2,2,2,2,2,2,2,2]
et dev contient [1,2,2,2,2,2,2,2,2,2,2,2,2]
On tape :
dfc(9976/6961,5)
On obtient :
[1,2,3,4,5,43/7]
En effet on tape :
1+1/(2+1/(3+1/(4+1/(5+7/43))))
et on obtient :
9976/6961
On tape :
convert(9976/6961,confrac,l)
On obtient si dans la configuration du cas epsilon=1e-9 :
[1,2,3,4,5,6,7]
et l contient [1,2,3,4,5,6,7]
On tape :
dfc(pi,5)
On obtient :
[3,7,15,1,292,(-113*pi+355)/(33102*pi-103993)]
On tape :
dfc(evalf(pi),5)
On obtient (si on travaille avec 12 chiffres significatifs) :
[3,7,15,1,292,1.57581843574]

6.9. LES RATIONNELS

211

On tape :
dfc(evalf(pi),1e-9)
Ou :
dfc(pi,1e-9)
Ou (si epsilon=1e-9 dans la configuration du cas) :
convert(pi,confrac,ll)
On obtient :
[3,7,15,1,292]

6.9.8

Transformer une fraction continue en un rel : dfc2f

dfc2f a comme argument une liste reprsentant le dveloppement en fraction


continue dun nombre rationnel ou dun nombre quadratique (nombre qui est racine dune quation du second degr) : quand le dveloppement est priodique, le
dernier lment de la liste est une liste qui reprsente la priode du dveloppement
en fraction continue et si le dernier lment de la liste nest ni une liste ni un entier
cet lment reprsente le reste r (a = a0 + 1/.... + 1/an + 1/r).
dfc2f renvoie le nombre rationnel ou le nombre quadratique ayant largument
comme dveloppement en fraction continue.
On tape :
dfc2f([1,2,[2]])
On obtient :
1/(1/(1+sqrt(2))+2)+1
Aprs simplification avec normal :
sqrt(2)
On tape :
dfc2f([1,2,3])
On obtient :
10/7
On tape :
normal(dfc2f([3,3,6,[3,6]]))
On obtient :
sqrt(11)
On tape :
dfc2f([1,2,3,4,5,6,7])

212

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
9976/6961
En effet on tape :
1+1/(2+1/(3+1/(4+1/(5+1/(6+1/7)))))
et on obtient :
9976/6961
On tape :
dfc2f([1,2,3,4,5,43/7])
On obtient :
9976/6961
En effet on tape :
1+1/(2+1/(3+1/(4+1/(5+7/43))))
et on obtient :
9976/6961

6.9.9

Le nime nombre de Bernoulli : bernoulli

bernoulli a comme argument un entier n.


bernoulli renvoie le nime nombre de Bernoulli B(n).
On a :
+
X
t
B(n) n
=
t
t
e 1
n!
n=0

On rappelle que les polynmes de Bernoulli Bk sont dfinis par :


B0 = 1
Bk 0 (x) = kBk1 (x)
Z

Bk (x)dx = 0
0

On a alors :
B(n) = Bn (0)
On tape :
bernoulli(6)
On obtient :
1/42

6.10. LES RELS

6.9.10

213

Accs aux fonctions de PARI/GP : commande pari

La commande pari sans argument exporte les fonctions de pari qui nont pas
dhomonymes sous Xcas en leur nom habituel sous PARI/GP.
Toutes les commandes sont aussi exportes sous leur nom dorigine avec le prfixe
pari_.
La commande pari avec en premier argument un chaine de caractre - le nom
dune commande PARI - et dventuels autres arguments excute la commande
PARI avec les autres arguments.
Par exemple :
On tape :
pari() puis weber(1+i) ou directement
pari("weber",1+i), cela excute la commande weber de PARI avec
comme argument 1+i. La commande weber nexistant pas sous Xcas.
On tape :
pari("content",[25,15,50,75]) ou
pari_content([25,15,50,75]), cela excute la commande content
de PARI avec comme argument [25,15,50,75] et renvoie 5 qui est
le pgcdde la liste dentiers donne en argument alors que pari() puis
content([25,15,50,75]) excute la commande content de Xcas
et renvoie aussi 5 car content est une commande Xcas qui a comme argument un polynme donn sous sa forme symbolique ou par la liste de ses
coefficients et qui renvoie le mme rsultat que la commande content de
PARI car on a :
content([25,15,50,75])=content(25x^3+15x^2+50x+75)=5
On tape :
pari("gcd",[4,3,2,15],[20,30,50,75]) ou
pari_gcd([4,3,2,15],[20,30,50,75]), cela excute la commande
gcd de PARI darguments L1=[4,3,2,15] et L2=[20,30,50,75]
qui renvoie la matrice :
[[4,1,2,5],[2,3,2,15],[2,1,2,5],[1,3,1,15]] :cest la matrice M[j,k] gale au pgcd des entiers L1[j] et L2[k] alors que, :
pari() puis
gcd([4,3,2,15],[20,30,50,75]) renvoie [4,3,2,15] car gcd
est une commande Xcas qui avec comme argument 2 listes L1 et L2 renvoie la liste L3[j] des pgcd de L1[j] et L2[j] cest dire la diagonale
de la matrice prcdente car on a :
gcd([4,3,2,15],[20,30,50,75])=
diag(pari("gcd", [4,3,2,15],[20,30,50,75]))
La documentation de PARI/GP est disponible depuis le menu Aide->Manuels.

6.10

Les rels

6.10.1

valuer un rel et nombre de digits : evalf et Digits, DIGITS)

Il faut distinguer le nombre rel de sa valeur numrique qui est un nombre flottant.
La prcision des nombres flottants, en nombre de chiffres est contrle par la va-

214

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

riable Digits qui vaut 12 par dfaut.


Une expression peut tre value en flottant grce la commande evalf.
Attention ! ! ! !
Les nombres flottants sont contagieux ( !) car une expression qui comporte un
nombre flottant est calcule en flottant.
On tape :
1+1/2
On obtient :
3/2
On tape :
1.0+1/2
On obtient :
1.5
On tape :
exp(pi*sqrt(20))
On obtient :
exp(pi*2*sqrt(5))
Avec la commande evalf, on tape :
evalf(exp(pi*2*sqrt(5)))
On obtient :
1263794.75367
On tape :
1.1^20
On obtient :
6.72749994933
On tape :
sqrt(2)^21
On obtient :
sqrt(2)*2^10
On tape pour avoir 30 chiffres significatifs :
Digits:=30
On tape pour avoir la valeur numrique de e

163

evalf(exp(pi*sqrt(163)))
On obtient :
0.262537412640768743999999999985e18

6.10. LES RELS

6.10.2

215

Les fonctions infixes de base sur les rels : +,-,*,/,

+,-,*,/, sont les oprateurs habituels pour faire des additions, des soustractions, des multiplications, des divisions et des lvations une puissance entire
ou fractionnaire.
On tape :
3+2
On obtient :
5
On tape :
3-2
On obtient :
1
On tape :
3*2
On obtient :
6
On tape :
3/2
On obtient :
3/2
On tape :
3.2/2.1
On obtient :
1.52380952381
On tape :
3^2
On obtient :
9
On tape :
3.2^2.1
On obtient :

216

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


11.5031015682

Remarque
Si vous avez une touche carre ou une touche cube sur votre clavier vous pouvez
lutiliser, par exemple : 32 vaut 9.
Remarque sur les puissances fractionnaires
Par dfinition af racpq = exp(f racpq ln(a)) et donc af racpq nest dfini que
pour a > 0.
Il y a donc une diffrence entre :

n
a et af rac1n lorsque n est impair.

Si on veut, par exemple, tracer la courbe y = 3 x3 x2 , il faut taper :


plotfunc([(x^3-x^2)^(1/3),-(x^2-x^3)^(1/3)],x,xstep=0.01)
on peut aussi taper :
plotimplicit(y^3=x^3-x^2)

6.10.3

Les fonctions prefixes de base sur les rels : rdiv

rdiv est loprateur prefix pour faire des divisions.


On tape :
rdiv(3,2)
On obtient :
3/2
On tape :
rdiv(3.2,2.1)
On obtient :
1.52380952381

6.10.4

La fonction racine n-ime : root

root a deux arguments : un entier n et un nombre a.


root renvoie la racine n-ime de a (i.e. a1/n ).
On tape :
root(3,2)
ou on tape :
2^(1/3)
On obtient :
2^(1/3)
On tape :
root(3,2.0)
ou on tape :

6.10. LES RELS

217
2.^(1/3)

On obtient :
1.259921049892
On tape :
root(3,sqrt(2))
ou on tape :
sqrt(2)^(1/3)
On obtient :
2^(1/6)

6.10.5

La fonction exponentielle integrale Ei : Ei

Ei a comme argument un nombre complexe a.


Ei calcule les valeurs de la fonction Ei au point a.
On a par dfinition :
Z x
exp(t)
dt
Ei(x) =
t
t=
Pour x > 0, on prolonge par la valeur principale de lintgrale (les morceaux en
0 et 0+ se compensent). On a :
Ei(0) = ,

Ei() = 0

Lorsque lon est proche de x = 0 on sait que :


exp(x)
1
x
x2
xn
= +1+ +
+ ... +
....
x
x
2!
3!
(n 1)!
on a donc pour x C R+ , (la fonction est discontinue sur R+ ) :
Ei(x) = ln(x) + + x +

x2
x3
+
+ ...
2.2! 3.3!

o = la constante dEuler = 0.57721566490..


sur laxe x > 0 on prend : Ei(x) = ln(x) + + x +
On tape :
Ei(1.)
On obtient :
1.89511781636
On tape :
Ei(-1.)
On obtient :

x2
2.2!

x3
3.3!

+ ...

218

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


-0.219383934396

On tape :
Ei(1.)-Ei(-1.)
On obtient :
2.11450175075
On tape :
int((exp(x)-1)/x,x=-1..1.)
On obtient :
2.11450175075
On tape :
evalf(Ei(-1)-sum((-1)^n/n/n!,n=1..100))
On obtient la constante dEuler :
0.577215664901532860606507

Lorsque Ei a comme argument 2 nombres : a rel et b entier positif, on a :


Ei(a,1)=-Ei(-a)
Ei(a,2)=exp(-a)+a*Ei(-a) =exp(-a)-a*Ei(a,1)
Ei(a,3)=(exp(-a)-a*(exp(-a)+a*Ei(-a)))/2=(exp(-a)-a*Ei(a,2))/2
Ei(a,4)=(exp(-a)-a*(exp(-a)-a*(exp(-a)+a*Ei(-a)))/2)/3=(exp(-a)-a*Ei(a
Ei(a,n)= (exp(-a)-a*Ei(a,n-1))/n-1 pour n entier 2
Donc :
Ei(a,1)=-Ei(-a) a*Ei(a,1)+Ei(a,2)=exp(-a) donc a Ei(a, 1) +
Ei(a, 2) = exp(a)
a*Ei(a,2)+2*Ei(a,3)=exp(-a) donc a2 Ei(a, 1)2Ei(a, 3) = exp(a)
(a 1)
a*Ei(a,3)+3*Ei(a,4)=exp(-a) donc a3 Ei(a, 1) + 3! Ei(a, 4) =
exp(a) (a2 a + 2) a*Ei(a,4)+4*Ei(a,4)=exp(-a) donc
a4 Ei(a, 1) 4! Ei(a, 4) = exp(a) (a3 a2 + 2a 3!)
a5 Ei(a, 1) + 5! Ei(a, 4) = exp(a) (a4 a3 + 2a2 3!a + 4!)
etc...

6.10.6

La fonction cosinus integral Ci : Ci

Ci a comme argument un nombre complexe a.


Ci calcule les valeurs de la fonction Ci au point a.
On a par dfinition :
Z

Ci(x) =
t=+

cos(t)
dt = ln(x) + +
t

Z
0

cos(t) 1
dt
t

6.10. LES RELS

219

On a : Ci(0) = , Ci() = i, Ci(+) = 0. Lorsque lon est proche de


x = 0 on sait que
cos(x)
1 x x3
x2n1
= +
+ ... + (1)n
....
x
x 2
4!
(2n)!
ce qui donne par intgration le dveloppement en sries de Ci.
On tape :
Ci(1.)
On obtient :
0.337403922901
On tape :
Ci(-1.)
On obtient :
0.337403922901+3.14159265359*i
On tape :
Ci(1.)-Ci(-1.)
On obtient :
-3.14159265359*i
On tape :
int((cos(x)-1)/x,x=-1..1.)
On obtient :
-3.14159265359*i

6.10.7

La fonction sinus integral Si : Si

Si a comme argument un nombre complexe a.


Si calcule les valeurs de la fonction Si au point a.
On a par dfinition
Z x
sin(t)
dt
Si(x) =
t
t=0
On a Si(0) = 0, Si() = 2 , Si(+) = 2 . Lorsque lon est proche de x = 0
on sait que :
sin(x)
x2 x4
x2n
=1
+
+ ... + (1)n
....
x
3!
5!
(2n + 1)!
ce qui donne par intgration le dveloppement en sries de Si en 0. On observe
aussi que Si est une fonction impaire.
On tape :

220

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Si(1.)

On obtient :
0.946083070367
On tape :
Si(-1.)
On obtient :
-0.946083070367
On tape :
Si(1.)+Si(-1.)
On obtient :
0
On tape :
Si(1.)-Si(-1.)
On obtient :
1.89216614073
On tape :
int(sin(x)/x,x=-1..1.)
On obtient :
1.89216614073

6.10.8

La fonction de Heaviside : Heaviside

Heaviside a comme argument un nombre a.


Heaviside calcule les valeurs de la fonction Heaviside au point a.
On a par dfinition :
Heaviside(x) = 0 si x < 0 et 1 sinon
On tape :
Heaviside(2)
On obtient :
1
On tape :
Heaviside(-4)
On obtient :
0

6.10. LES RELS

6.10.9

221

La distribution de Dirac : Dirac

Dirac a comme argument un nombre a.


Dirac est la distribution de Dirac, cest la distribution associe la fonction
Heaviside.
On a par dfinition :
Dirac(x) = 0 si x 6= 0 et sinon
et si a 0 et b 6= 0 on a :
a

Dirac(x)dx = 1
b

Dirac(x)f (x)dx =

[Heaviside(x)f (x)]ab

Heaviside(x)f 0 (x)dx = f (0)

Dirac(x) f (x)dx = f (0)

On tape :
int(Dirac(x)*sin(x),x,-1,2)
On obtient :
sin(0)
On tape :
int(Dirac(x-1)*sin(x),x,-1,2)
On obtient :
sin(1)

6.10.10

La fonction erf : erf

erf a comme argument un nombre a.


erf calcule les valeurs de la fonction erf au point a.
On a par dfinition :
Z x
2
2
erf (x) =
et dt
0
On a :
erf (+) = 1
erf () = 1
En effet on sait que :
Z

e
0

On tape :

t2

dt =

222

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


erf(1)

On obtient :
0.84270079295
On tape :
erf(1/(sqrt(2)))*1/2+0.5
On obtient :
0.841344746069
Remarque
Il y a une relation entre les fonctions erf et normal_cdf :
normal_cdf(x) = 12 + 12 erf( x2 )
En effet :
Rx
2
normal_cdf(x) = 12 + 12 0 et /2 dt

donc avec le changement de variables t = u 2 on a :


x
R
2
normal_cdf(x) = 12 + 1 0 2 eu du = 12 + 12 erf( x2 )
On vrifie en tapant :
normal_cdf(1)=0.841344746069

6.10.11

La fonction erf c : erfc

erfc a comme argument un nombre a.


erfc calcule les valeurs de la fonction erf c au point a.
On a par dfinition :
2
erf c(x) =

et dt = 1 erf (x)

On a :
erf c(0) = 1
erf c() = 1
En effet on sait que :
Z

t2

dt =

On tape :
erfc(1)
On obtient :
0.15729920705
On tape :
1- erfc(1/(sqrt(2)))*1/2

6.10. LES RELS

223

On obtient :
0.841344746069
Remarque
Il y a une relation entre les fonctions erfc et normal_cdf :
normal_cdf(x) = 1 12 erfc( x2 )
En effet :
Rx
2
normal_cdf(x) = 21 + 12 0 et /2 dt

donc avec le changement de variables t = u 2


R x
2
normal_cdf(x) = 12 + 1 0 2 eu du = 1 12 erfc( x2 )
On vrifie en tapant :
normal_cdf(1)=0.841344746069

6.10.12

La fonction : Gamma

Gamma a comme argument un nombre a.


Gamma calcule les valeurs de la fonction au point a.
On a par dfinition :
+

Z
(a) =

et ta1 dt, si a > 0

et on utilise la formule :
(a + 1) = a (a) si a nest pas un entier negatif
Donc :
(1) = 1
(a + 1) = a (a)
et ainsi :
(n + 1) = n!
On tape :
Gamma(5)
On obtient :
24
On tape :
Gamma(1/2)
On obtient :
sqrt(pi)
On tape :
Gamma(0.7)

224

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
1.29805533265
On tape :
Gamma(-0.3)
On obtient :
-4.32685110883
En effet : Gamma(0.7)=-0.3*Gamma(-0.3)
On tape :
Gamma(-1.3)
On obtient :
3.32834700679
En effet :
Gamma(0.7)=-0.3*Gamma(-0.3)=(-0.3)*(-1.3)*Gamma(-1.3)

6.10.13

La fonction incomplte : igamma

igamma a 2 ou 3 arguments, un nombre a > 0 et un nombre x et ventuellement


1 comme 3-ime argument si on veut que la fonction soit rgularise (i.e. divise
par Gamma(a).
igamma est la fonction qui est la fonction incomplte de paramtres a et x.
On a par dfinition :
Rx
igamma(a,x)=(a, x) = 0 et ta1 dt, si a > 0 On tape :
igamma(2.0,3.0)
On obtient :
0.800851726529
On tape :
igamma(4.0,3.0)
On obtient :
2.11660866731
On tape :
igamma(4.0,3.0,1)
On obtient :
0.352768111218
car Gamma(4)=6 et 2.11660866731/6=0.352768111218 On tape :

6.10. LES RELS

225
igamma(4.0,20.0)

On obtient :
5.99998077768
On tape :
igamma(4.0,20.0,1)
On obtient :
0.99999679628
car Gamma(4)=6 et 5.99998077768/6=0.99999679628

6.10.14

La fonction : Beta

Beta a comme argument deux rels a, b ou trois rels a, b, p ou trois rels et 1


a, b, p, 1.
avec 2 arguments a, b, Beta calcule les valeurs de la fonction au point
a, b de R2 .
On a par dfinition :
(x, y) =

(x) (y)
(x + y)

On a :
(1, 1) = 1
(n, 1) =
et :
(n, 2) =

1
n

1
n(n + 1)

On a :
R1
Beta(a,b)= 0 t( a 1) (1 t)( b 1)dt
R1
Beta(a,b) est dfini pour a et b rels positifs (pour que lintgrale 0 t( a
1) (1 t)( b 1)dt soit convergente).
On tape :
Beta(5,2)
On obtient :
1/30
On tape :
simplify(Beta(5,-3/2))
On obtient :
256/15
On tape :
Beta(x,y)
On obtient :
Gamma(x)*Gamma(y)/Gamma(x+y)

226

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On tape :
Beta(5.1,2.2)
On obtient :
0.0242053671402
avec 3 arguments a, b, p cest la fonction Beta incomplte pour p entre 0 et
1, cest :
Rp
Beta(a,b,p)= 0 t( a 1) (1 t)( b 1)dt, lintegrale va de 0 p au
lieu de 0 1 pour la fonction Beta. On tape :
Beta(5,2,0.5)
On obtient :
0.00364583333333
avec 4 arguments a, b, p, 1 si on met 1 en 4eme argument cela calcule la
fonction Beta incomplte regularise i.e. la fonction Beta incomplte qui est
divis par Beta(a,b). On tape :
Beta(5,2,0.5,1)
On obtient :
0.109375
en effet Beta(5,2)=1/30 et 0.00364583333333*30=0.109375

6.10.15

Les derives de la fonction DiGamma : Psi

Psi a comme arguments un rel a et un entier n (par dfault n = 0).


Psi est la valeur de la n-ime drive de la fonction DiGamma au point a.
La fonction DiGamma est la drive de ln((x)).
On tape :
Psi(3,1)
On obtient :
pi^2/6-5/4
On peut ommettre le paramtre n lorsque n = 0.
Lorsque Psi a comme seul paramtre un nombre a, Psi renvoie la valeur de la
fonction DiGamma au point a :
on a donc Psi(a,0)=Psi(a).
On tape :
Psi(3)
On obtient :
Psi(1)+3/2
On tape :
evalf(Psi(3))
On obtient :
.922784335098

6.10. LES RELS

6.10.16

227

La fonction : Zeta

Zeta a comme argument un rel x.


+
X
1
Zeta renvoie pour x > 1 :
.
nx
n=1
On tape :
Zeta(2)
On obtient :
pi^2/6
On tape :
Zeta(4)
On obtient :
pi^4/90

6.10.17

Les fonctions de Airy : Airy_Ai et Airy_Bi

Airy_Ai et Airy_Bi a comme argument un rel x.


Airy_Ai et Airy_Bi sont deux solutions indpendantes de lquation :
y 00 x y = 0.
On dfinit :
R
Airy_Ai(x) = (1/) 0 cos(t3 /3 + x t)dt
R
3
Airy_Bi(x) = (1/) 0 (et /3 + sin(t3 /3 + x t))dt
On a aussi :
Airy_Ai(x) vrifie :
Airy_Ai(x) = Airy_Ai(0) f(x) + Airy_Ai0 (0) g(x) et
Airy_Bi vrifie
:
Airy_Bi(x) = 3(Airy_Ai(0) f(x) Airy_Ai0 (0) g(x))
o f et g sont deux sries entires solutions de w00 x w = 0 :
!

X
(k + 31 )
x3k
k
f (x) =
3
(3k)!
( 31 )
k=0
!

X
(k + 23 )
x3k+1
k
g(x) =
3
(3k + 1)!
( 23 )
k=0
On tape :
Airy_Ai(1)
On obtient :
0.135292416313
On tape :
Airy_Bi(1)

228

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
1.20742359495
On tape :
Airy_Ai(0)
On obtient :
0.355028053888
On tape :
Airy_Bi(0)
On obtient :
0.614926627446

6.11

Les permutations

Une permutation p de longueur n est une bijection de [0..n 1] sur [0..n 1]


et est reprsente par la liste : [p(0), p(1), p(2)...p(n 1)].
Par exemple, la permutation p reprsente par [1, 3, 2, 0] est lapplication de [0, 1, 2, 3]
sur [0, 1, 2, 3] dfinie par : p(0) = 1, p(1) = 3, p(2) = 2, p(3) = 0.
Un cycle c dordre p est reprsent par la liste [(a0 , ..., ap1 )] (0 p n 1) et
cest une permutation telle que :
c(ai ) = ai+1 pour (i = 0..p 2), c(ap1 ) = a0 et c(ai ) = ai (i = p + 1..n).
Un cycle c est reprsent par la liste et une dcomposition en cycles par une liste
de listes.
Par exemple, le cycle c reprsent par la liste [3, 2, 1] est la permutation c dfinie
par c(3) = 2, c(2) = 1, c(1) = 3, c(0) = 0 (qui est reprsent en tant que
permutation par la liste [0, 3, 1, 2]).

6.11.1

Permutation alatoire : randperm

randperm a comme argument un entier n.


randperm renvoie une permutation alatoire de [0..n 1].
On tape :
randperm(3)
On obtient :
[2,0,1]

6.11.2

Permutation prcdente : prevperm

prevperm a comme argument une permutation.


prevperm renvoie la permutation prcdente dans lordre lexicographique, ou
undef sil ny en a pas.
On tape :
prevperm([0,3,1,2])
On obtient :
[0,2,3,1]

6.11. LES PERMUTATIONS

6.11.3

229

Permutation suivante : nextperm

nextperm a comme argument une permutation.


nextperm renvoie la permutation suivante dans lordre lexicographique, ou undef
sil ny en a pas.
On tape :
nextperm([0,2,3,1])
On obtient :
[0,3,1,2]

6.11.4

Dcomposition en cycles : permu2cycles

permu2cycles a comme argument une permutation.


permu2cycles renvoie sa dcomposition en cycles.
On tape :
permu2cycles([1,3,4,5,2,0])
On obtient :
[[0,1,3,5],[2,4]]
Dans la rponse les cycles dordre 1 sont omis sauf celui qui vaut [n 1] (pour
pouvoir dterminer la valeur de n).
On tape :
permu2cycles([0,1,2,4,3,5])
On obtient :
[[5],[3,4]]
On tape :
permu2cycles([0,1,2,3,5,4])
On obtient :
[[4,5]]

6.11.5

Produit de cycles : cycles2permu

cycles2permu a comme argument une liste de cycles.


cycles2permu renvoie la permutation (de longueur n la plus petite possible)
gale au produit des cycles de la liste donne en argument (voir permu2cycles).
On tape :
cycles2permu([[1,3,5],[2,4]])
On obtient :
[0,3,4,5,2,1]

230

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
cycles2permu([[2,4]])
On obtient :
[0,1,4,3,2]
On tape :
cycles2permu([[5],[2,4]])
On obtient :
[0,1,4,3,2,5]

6.11.6

Transformer un cycle en permutation : cycle2perm

cycle2perm a comme argument un cycle.


cycle2perm renvoie la permutation de longueur la plus petite possible correspondant au cycle donn en argument (voir aussi permu2cycles et cycles2permu).
On tape :
cycle2perm([1,3,5])
On obtient :
[0,3,2,5,4,1]

6.11.7

Transformer une permutation en une matrice : permu2mat

permu2mat a comme argument une permutation p de longueur n.


permu2mat renvoie la matrice obtenue en permutant, selon la permutation p, les
lignes de la matrice identit dordre n.
On tape :
permu2mat([2,0,1])
On obtient :
[[0,0,1],[1,0,0],[0,1,0]]
Remarques
Pour faire une permutation sur les composantes dun vecteur, par exemple faire
agir la permutation [2,0,1] sur [10,20,30], on tape :
P:=permu2mat([2,0,1]);V:=[10,20,30];P*V
ou bien, on tape p:=[2,0,1];V:=[10,20,30];V[p[j]]$(j=0..2) :
et on obtient [30,10,20].
Pour faire une permutation sur les lignes dune matrice carre, par exemple faire
agir la permutation [2,0,1] sur les lignes de [[1,2,3],[4,5,6],[7,8,9]],
on tape :
P:=permu2mat([2,0,1]);A:=[[1,2,3],[4,5,6],[7,8,9]];P*A et
on obtient [[4,5,6],[7,8,9],[1,2,3]].
Pour faire une permutation sur les colonnes dune matrice carre, par exemple faire
agir la permutation [2,0,1] sur les colonnes de [[1,2,3],[4,5,6],[7,8,9]],
on tape :
P:=permu2mat([2,0,1]);A:=[[1,2,3],[4,5,6],[7,8,9]];A*tran(P))
et on obtient [[3,1,2],[6,4,5],[9,7,8]].

6.11. LES PERMUTATIONS

6.11.8

231

Reconnaitre une permutation : is_permu

is_permu a comme argument une liste de dimension s.


is_permu est une fonction boolenne qui renvoie 1 ou 0 selon que largument
est ou nest pas une permutation de 0, 1, s 1.
On tape :
is_permu([2,1,3])
On obtient :
0
On tape :
is_permu([2,1,3,0])
On obtient :
1

6.11.9

Reconnaitre un cycle : is_cycle

is_cycle est une fonction boolenne qui renvoie 1 ou 0 selon que largument
est ou nest pas un cycle.
On tape :
is_cycle([2,1,3])
On obtient :
1
On tape :
is_cycle([2,1,3,2])
On obtient :
0

6.11.10

Composition de deux permutations : p1op2

p1op2 a comme arguments deux permutations.


p1op2 renvoie la permutation obtenue par la composition :
1er arg 2ime arg
On tape :
p1op2([3,4,5,2,0,1],[2,0,1,4,3,5])
On obtient :
[5,3,4,0,2,1]
Attention
Cest la permutation donne comme deuxime argument qui est effectue la premire.

232

6.11.11

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Produit dun cycle et dune permutation : c1op2

c1op2 a comme arguments un cycle et une permutation.


c1op2 renvoie la permutation obtenue par la composition :
1er arg 2ime arg
On tape :
c1op2([3,4,5],[2,0,1,4,3,5])
On obtient :
[2,0,1,5,4,3]
Attention
Cest la permutation donne comme deuxime argument qui est effectue la premire.

6.11.12

Produit dune permutation et dun cycle : p1oc2

p1oc2 a comme arguments une permutation et un cycle.


p1oc2 renvoie la permutation obtenue par la composition :
1er arg 2ime arg
On tape :
p1oc2([3,4,5,2,0,1],[2,0,1])
On obtient :
[4,5,3,2,0,1]
Attention
Cest le cycle donn comme deuxime argument qui est effectu en premier.

6.11.13

Produit de deux cycles : c1oc2

c1oc2 a comme arguments deux cycles.


c1oc2 renvoie la permutation obtenue par la composition :
1er arg 2ime arg
On tape :
c1oc2([3,4,5],[2,0,1])
On obtient :
[1,2,0,4,5,3]
Attention
Cest le cycle donn comme deuxime argument qui est effectu en premier.

6.11. LES PERMUTATIONS

6.11.14

233

Signature dune permutation : signature

signature a comme argument une permutation.


signature renvoie la signature de la permutation donne en argument.
La signature dune permutation vaut :
1 si elle peut se dcomposer en un produit pair de transpositions,
-1 si elle peut se dcomposer en un produit impair de transpositions.
La signature dun cycle dordre k est : (1)k+1 .
On tape :
signature([3,4,5,2,0,1])
On obtient :
-1
En effet permu2cycles([3,4,5,2,0,1])=[[0,3,2,5,1,4]].

6.11.15

Inverse dune permutation : perminv

perminv a comme argument une permutation.


perminv renvoie la permutation inverse de la permutation donne en argument.
On tape :
perminv([1,2,0])
On obtient
[2,0,1]

6.11.16

Inverse dun cycle : cycleinv

cycleinv a comme argument un cycle.


cycleinv renvoie le cycle inverse du cycle donn en argument.
On tape :
cycleinv([2,0,1])
On obtient
[1,0,2]

6.11.17

Ordre dune permutation : permuorder

permuorder a comme argument une permutation.


permuorder renvoie lordre k de la permutation p donne en argument (cest le
plus petit entier m telle que pm soit lidentit).
On tape :
permuorder([0,2,1])
On obtient
2

234

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
permuorder([3,2,1,4,0])
On obtient
6

6.11.18

Groupe engendr par deux permutations : groupermu

groupermu a comme argument deux permutations a et b.


groupermu renvoie le groupe des permutations engendr par a et b.
On tape :
groupermu([0,2,1,3],[3,1,2,0])
On obtient
[[0,2,1,3],[3,1,2,0],[0,1,2,3],[3,2,1,0]]

6.12

Les complexes

Vous trouverez dans le menu Math (Cmplx) les fonctions ayant comme paramtre une expression valeur complexe.
Remarque
Les nombres complexes sont utiliss pour reprsenter un point sur lcran graphique : par exemple, le graphe de y = f (x) est lensemble des points x + i
f (x) pour x variant entre WX- et WX+ (WX- et WX+ sont initialiss avec le menu
CfgIConfiguration graphique).

6.12.1

Les fonctions de base sur les complexes : +,-,*,/,

+,-,*,/, sont les oprateurs habituels pour faire des additions, des soustractions, des multiplications, des divisions et des lvations une puissance entire
ou fractionnaire.
On tape :
(1+2*i)^2
On obtient :
-3+4*i

6.12.2

La partie relle dun nombre complexe : re real

re (ou real) a comme argument un nombre complexe (resp un point A).


re (ou real) renvoie la partie relle de ce nombre complexe (resp le point daffixe
la partie relle de laffixe de A).
On tape :
re(3+4*i)
On obtient :
3

6.12. LES COMPLEXES

6.12.3

235

La partie imaginaire dun nombre complexe : im imag

im (ou imag) a comme argument un nombre complexe (resp un point A).


im (ou imag) renvoie la partie imaginaire de ce nombre complexe (resp le point
daffixe la partie imaginaire de laffixe de A).
On tape :
im(3+4*i)
On obtient :
4

6.12.4

criture des complexes sous la forme re(z)+i*im(z) : evalc

evalc a comme argument un nombre complexe z.


evalc renvoie ce nombre complexe, crit sous la forme re(z)+i*im(z).
On tape :
evalc(sqrt(2)*exp(i*pi/4))
On obtient :
1+i

6.12.5

Le module dun nombre complexe : abs

abs a comme argument un nombre complexe.


abs renvoie le module de ce nombre complexe.
On tape :
abs(3+4*i)
On obtient :
5

6.12.6

Largument dun nombre complexe : arg

arg a comme argument un nombre complexe.


arg renvoie largument de ce nombre complexe.
On tape :
arg(3+4.i)
On obtient :
atan(4/3)

236

6.12.7

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Le nombre complexe normalis : normalize unitV

normalize ou unitV a comme argument un nombre complexe.


normalize ou unitV renvoie le nombre complexe divis par le module de ce
nombre complexe.
On tape :
normalize(3+4*i)
On obtient :
(3+4*i)/5

6.12.8

Le nombre complexe conjugu : conj

conj a comme argument un nombre complexe.


conj renvoie le complexe conjugu de ce nombre complexe.
On tape :
conj(3+4*i)
On obtient :
3-4*i

6.12.9

Multiplier par le complexe conjugu : mult_c_conjugate


multiplier_conjugue_complexe

Si une expression a un dnominateur complexe, mult_c_conjugate multiplie


le numrateur et le dnominateur de cette expression par le complexe conjugu du
dnominateur.
Si une expression na pas de dnominateur complexe, mult_c_conjugate multiplie le numrateur et le dnominateur de cette expression par le complexe conjugu du numrateur.
On tape :
mult_c_conjugate((2+i)/(2+3*i))
On obtient :
(2+i)*(2+3*(-i))/((2+3*(i))*(2+3*(-i)))
On tape :
mult_c_conjugate((2+i)/2)
On obtient :
(2+i)*(2+-i)/(2*(2+-i))

6.13. LES EXPRESSIONS ALGBRIQUES

6.12.10

237

Barycentre de complexes : barycenter barycentre

Voir aussi : 9.9.10 et 10.4.7.


barycentre a comme argument soit des listes de longueur 2 : chaque liste reprsente un point Aj ou laffixe aj dun point suivi par un coefficient rel j , soit une
matrice ayant deux colonnes : la premire colonne contient des points Aj ou des
nombres complexes aj reprsentant laffixe de ces points et la deuxime colonne
contient des coefficients rels j .
barycentre renvoie le point ou laffixe du point qui estPle barycentreP
des points
Aj daffixes aj affects des coefficients rels j lorsque j 6= 0. Si j = 0,
barycentre renvoie une erreur.
Attention pour avoir un nombre complexe il faut demander laffixe du barycentre,
sinon vous avez le trac du point barycentre dans lcran gomtrique.
On tape :
affixe(barycentre([1+i,2],[1-i,1]))
Ou on tape :
affixe(barycentre([[1+i,2],[1-i,1]]))
On obtient :
(3+i)/3

6.13

Les expressions algbriques

6.13.1

Quest-ce qune expression

Il ne faut pas confondre expression et fonction.


Une expression est une combinaison de nombres et de variables relis par des oprations alors quune fonction associe une variable une expression.
Par exemple :
a:=x^2+2*x+1 dfinit une expression et b(x):=x^2+2*x+1 dfinit une fonction.
On obtient la valeur de lexpression a en 0, avec subst(a,x=0) et la valeur de
la fonction b en 0, avec b(0).
On peut aussi considrer une expression comme un arbre.
Par exemple, si A:=3+2*x/y ou si B:=sin(2x+3) on a :
le sommet de larbre A est loprateur + et le sommet de larbre B est la
fonction sin.
On a :
sommet(A) renvoie +
sommet(B) renvoie sin
les feuilles de larbre A sont 3,2*x/y (car + est un oprateur binaire)
et la feuille de larbre B est 2*x+3 (car sin est une fonction dune variable).
On a :
feuille(A) renvoie 3,2*x/y
feuille(B) renvoie 2*x+3

238

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


la feuille 2*x/y est elle-mme un arbre de sommet * etc...
Les variables A et B permettent de retrouver la structure darbre en effet :
A[0],A[1],A[2],A[2,0],A[2,1],A[2,2],A[2,3],A[2,3,0],A[2,3,1]
renvoie : +,3,2*x,*,2,x,1/y,inv,y
B[0],B[1,0],B[1,1],B[1,2],B[1,1,0],B[1,1,1],B[1,1,2]
renvoie : sin,+,2*x,3,*,2,x

Attention
Si C:=2*x-y alors
sommet(C) renvoie + et
feuille(C) renvoie 2*x,-y
car lexpression est C scrit 2*x+(-y)
De mme si D:=x/3 alors
sommet(D) renvoie * et
feuille(C) renvoie x,1/3
car lexpression est D scrit x*1/3
On a alors :
C[0],C[1],C[1,0],C[1,1],C[1,2],C[2],C[2,0],C[2,1]
renvoie : +,2*x,*,2,x,-y,-,y (- est le "moins" unaire).
Et :
D[0],D[1],D[2],D[2,0],D[2,1],B[1,1,2]
renvoie : *,x,1/3,inv,3
Remarque
Ce qui suit nest valable que pour des programmeurs confirms avec les manipulations qui suivent, les erreurs sont faciles !
On peut changer le sommet ou une feuille terminale en affectant lune des variables
A[0],A[1],A[2],A[2,0],A[2,1],A[2,2],A[2,3],A[2,3,0],A[2,3,1]
ou B[0],B[1,0],B[1,1],B[1,2],B[1,1,0],B[1,1,1],B[1,1,2]
MAIS il faut faire cela avec prudence car le systme ne fait pas de vrifications et
nenverra pas de message derreurs.
On tape :
A:=3+2*x/y
A[0]:=* Et A renvoie 6*x/y Maintenant :A[1] renvoie 6
On peut taper :
A[1]:=2+z Maintenant A renvoie (2+z)*x/y
On tape :
B:=sin(2*x+3)
B[0]:=cos Et B renvoie cos(2*x+3) Puis, on tape :
B[1,2]:=y et B renvoie cos(2*x+y)

6.13.2

Pour valuer une expression : eval

eval sert valuer une expression.


eval a un ou deux argument(s) : une expression et ventuellement le niveau souhait de lvaluation.
Il faut savoir que Xcas value toujours les expressions, sans avoir besoin de la
commande eval : le niveau dvaluation est indiqu dans la case eval de la
Configuration du CAS du menu Cfg et vaut par dfaut vaut 25.

6.13. LES EXPRESSIONS ALGBRIQUES

239

La commande eval est surtout utile lorsquon veut valuer une sous-expression
dans lditeur dexpressions.
On tape :
a:=2
On obtient :
2
On tape :
eval(2+3*a)
ou
2+3*a
On obtient :
8
On tape :
purge(r);purge(p);a:=1+i*r
r:=p+1;p:=-4;
on peut alors avoir diffrentes valuation de a selon le niveau dvaluation demand :
on tape :
a
On obtient :
1-3*i
on tape :
eval(a,1)
On obtient :
1+(i)*r
on tape :
eval(a,2)
On obtient :
1+(i)*(p+1)
on tape :
eval(a,3)
On obtient :
1-3*i
Remarque
Pour les objets gomtriques, en plus de lvaluation exacte (au niveau 25 par dvaut), Xcas rajoute une valuation numrique (au niveau 1) au moment de laffichage pour pouvoir reprsenter les objets gomtriques dependant de paramtres
dfinis par assume ou par une affectation numrique.
Voici diffrents exemples :
On tape :

240

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

purge(r);
R:=point(1+i*r);
r:=-3;
Le niveau correspondant R:=point(1+i*r); affichera dans tous les
cas le point et sa lgende car lvaluation numrique pour laffichage de ce
niveau est faite au moment de laffichage donc aprs que r ait t dfini.
On tape :
purge(r);
purge(p);
R:=point(1+i*r);
r:=p+1;
p:=-4;
Le point R napparait pas car lvaluation numrique au moment de laffichage nest faite quau niveau 1. Ainsi r est remplac par p mais p nest pas
remplac donc la commande R:=point(1+i*r); naffiche rien.
On tape
purge(r);
R:=point(1+i*r):;
r:=-3;
eval(R,1);
La commande eval(R,1) renvoie point(1+(i)*r) et dessine le point
R et sa lgende. En effet la rponse est value formellement au niveau 1
ce qui donne la rponse point(1+i*r) puis pour la reprsentation graphique, point(1+i*r) est valu numriquement (sans toucher aux lgendes) ce qui permet dafficher le point. La lgende n apparait pas, lorsquon value un objet gomtrique, mais ici, lorsquon fait eval(R,1), R
est valu en un objet gomtrique, mais lobjet gomtrique lui-mme nest
pas valu. Donc eval(R,1) dessine le point R et sa lgende.
On tape
purge(r);
purge(p);
R:=point(1+i*r):;
r:=p+1;
p:=-4;
eval(R,1);
La commande eval(R,1) renvoie point(1+(i)*r), mais ne dessine
pas le point R. En effet la rponse est value formellement au niveau 1
ce qui donne la rponse point(1+i*r) puis pour la reprsentation graphique, point(1+i*r) est valu numriquement au niveau 1 ce qui ne
permet pas dafficher le point.
On tape :
purge(r);
R:=point(1+i*r):;
r:=-3;
eval(R,2);
La commande eval(R,2) renvoie point(1,-3) et le dessin du point R
sans sa lgende. En effet, quand on fait eval(R,2), alors R est valu en
un objet gomtrique, et cet lobjet gomtrique est lui-mme valu et donc

6.13. LES EXPRESSIONS ALGBRIQUES

241

la lgende disparait.
On tape :
purge(r);
purge(p);
R:=point(1+i*r):;
r:=p+1;
p:=-4;
eval(R,2);
La commande eval(R,2) renvoie point(1,p+1) et le dessin du point
R sans sa lgende. En effet, quand on fait eval(R,2), alors R est valu
en un objet gomtrique, et cet lobjet gomtrique est lui-mme valu et
donc la lgende disparait.

6.13.3

Pour changer le niveau dvaluation : eval_level

On peut alors avoir diffrentes valuation dune variable selon le niveau n dvaluation demand : ce nombre n est le nombre de la case eval de la configuration
du CAS qui reprsente le nombre maximum dvaluations rcursives en mode interactif (cf 1.6.1). On peut changer ce nombre avec eval_level qui a comme
argument lentier n > 0.
eval_level() renvoie la valeur de eval de la configuration du CAS.
eval_level(0) met la valeur de eval de la configuration du CAS 0 et du
coup plus rien ne sera valu. On peut revenir en situation normale en changeant
la valeur de eval de la configuration du CAS.
On tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
On tape :
eval_level(1)
puis
a,b,c
On obtient :
b+1,c+1,3
et eval de la configuration du CAS vaut 1.
On tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
On tape :
eval_level(2)
puis
a,b,c
On obtient :

242

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


c+1+1,4,3

et eval de la configuration du CAS vaut 2.


On tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
On tape :
eval_level(3)
puis
a,b,c
On obtient :
5,4,3
et eval de la configuration du CAS vaut 3.
On tape ensuite :
eval_level()
On obtient :
3
ce qui veut dire que eval de la configuration du CAS vaut 3.
Remarque
On peut prciser le niveau dvaluation dune variable sans changer la configuration du CAS en utilisant eval avec 2 arguments une expression et son niveau
dvaluation. On tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
puis
eval(a,0),eval(a,1),eval(a,2),eval(a,3)
On obtient :
a,b+1,c+1+1,5
Attention
eval_level est fait pour tre excut seul, sinon il y aura forcment des effets
de frontire entre la valeur du niveau dvaluation utilis pour les commandes de

la ligne (en principe le prcdent)


et la nouvelle valeur qui sappliquera aprs. Si on
tape :
purge(a,b,c);a:=b+1; b:=c+1;c:=3;
puis sur un mme niveau :
eval_level(3);a,b,c
si eval de configuration du CAS vaut 1 alors a,b,c seront valus au niveau 1,
puis eval de configuration du CAS vaudra 3.

6.13. LES EXPRESSIONS ALGBRIQUES

6.13.4

243

Pour valuer une expression en mode Maple : evala

evala sert en mode Maple valuer une expression contenant des extentions algbriques, par contre Xcas value toujours les expressions, sans avoir besoin de
la commande evala.

6.13.5

Pour ne pas valuer une expression : quote hold ou

Si on ne veut pas quune expression soit value dans un calcul, il faut la quoter, soit avec , soit laide de la fonction quote (ou hold).
Remarque Lorsquon tape par exemple a:=quote(a) (ou a:=hold(a)) cela
a pour effet de purger la variable a et cette instruction renvoie la valeur de cette
variable (ou les hypothses faites sur cette variable).
Donc a:=quote(a) est synonyme de purge(a) (cest pour avoir la compatibilit Maple).
On tape :
a:=2;quote(2+3*a)
ou
a:=2;2+3*a
On obtient :
(2,2+3.a)

6.13.6

Pour forcer valuer une expression : unquote

Si on veut quune expression quote soit value dans un calcul, il faut utiliser
la fonction unquote.
Par exemple dans une affectation, la variable est quote cest dire non value.
On peut forcer son valuation pour cela on tape :
purge(b);a:=b;unquote(a):=3
On obtient :
a et b contiennent 3

6.13.7

Distributivit : expand fdistrib developper

Si on veut effectuer, sur une expression, la distributivit de la multiplication par


rapport laddition on utilise la fonction expand ou developper ou fdistib.
Ou on tape :
developper((x+1)*(x-2))
Ou on tape :
expand((x+1)*(x-2))
Ou on tape :

244

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


fdistrib((x+1)*(x-2))

On obtient :
x^2-x-2
Remarque On peut aussi utiliser convert avec loption + ou sa version infixe=> avec loption + : On tape :
(x+1)*(x-2)=>+
Ou on tape :
convert((x+1)*(x-2),+)
On obtient :
x^2-x-2

6.13.8

Forme canonique : canonical_form

canonical_form a comme paramtre un trinme du second degr que lon veut


mettre sous la forme canonique.
Exemple :
Mettre sous la forme canonique :
x2 6x + 1
On tape :
canonical_form(x^2-6*x+1)
On trouve :
(x-3)^2-8

6.13.9

Multiplier par la quantit conjugue : mult_conjugate multiplier_conju

mult_conjugate a comme argument une expression avec un dnominateur ou


un numrateur comportant des racines carres :
mult_conjugate a comme argument une expression avec un dnominateur comportant des racines carres.
mult_conjugate multiplie le numrateur et le dnominateur de cette expression par la quantit conjugue du dnominateur.
mult_conjugate a comme argument une expression avec un dnominateur ne comportant pas de racines carres.
mult_conjugate multiplie le numrateur et le dnominateur de cette expression par la quantit conjugue du numrateur.
On tape :
mult_conjugate((2+sqrt(2))/(2+sqrt(3)))
On obtient :

6.13. LES EXPRESSIONS ALGBRIQUES

245

(2+sqrt(2))*(2-sqrt(3))/((2+sqrt(3))*(2-sqrt(3)))
On tape :
mult_conjugate((2+sqrt(2))/(sqrt(2)+sqrt(3)))
On obtient :
(2+sqrt(2))*(-sqrt(2)+sqrt(3))/
((sqrt(2)+sqrt(3))*(-sqrt(2)+sqrt(3)))
On tape :
mult_conjugate((2+sqrt(2))/2)
On obtient :
(2+sqrt(2))*(2-sqrt(2))/(2*(2-sqrt(2)))

6.13.10

Sparation des variables : split

split a deux arguments : une expression dpendant de deux variables et la liste


de ces deux variables.
Si lexpression est factorisable avec deux facteurs qui ne dependent chacun que
dune des 2 variables, split renvoie une liste forme par ces deux facteurs et
sinon renvoie la liste [0].
On tape :
split((x+1)*(y-2),[x,y])
Ou on tape :
split(x*y-2*x+y-2,[x,y])
On obtient :
[x+1,y-2]
On tape :
split(x^2*y^2-1,[x,y])
On obtient :
[0]

246

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.13.11

Factorisation : factor factoriser

=>* est la version postfixe de factor.


factor ou factoriser a comme paramtre une expression.
factor ou factoriser factorise cette expression sur le corps de ses coefficients si Complex et Sqrt sont dcochs dans lcran de configuration du CAS.
Remarque On peut aussi utiliser convert avec loption * ou sa version infixe=> avec loption * : On tape :
x^2-x-2=>*
Ou on tape :
convert(x^2-x-2,*)
On obtient :
(x-2)*(x+1)
Exemples :
1. Factoriser dans Z (on doit dcoche Complex dans lcran de configuration
du CAS) :
x4 1
On tape :
factor(x^4-1)
Ou on tape :
x^4-1=>*
On obtient :
(x^2+1)*(x+1)*(x-1)
Les coefficients sont entiers donc la factorisation se fera avec des polynmes
coefficients entiers.
2. Factoriser dans C :

x4 1

Pour avoir une factorisation complexe, on coche Complex dans lcran de


configuration du CAS (bouton donnant la ligne dtat) on tape :
factor(x^4-1)
Ou on tape :
x^4-1=>*
On obtient :
(x-1)*(x+1)*(x+i)*(x-i)
3. Factoriser dans Z (on doit dcoche Complex dans lcran de configuration
du CAS) :
x4 + 1
On tape :

6.13. LES EXPRESSIONS ALGBRIQUES

247

factor(x^4+1)
Ou on tape :
x^4+1=>*
On obtient :
x^4+1
car

x4

+ 1 ne se fatorise pas sur les entiers.

4. Factoriser sur les entiers de Gauss :


x4 + 1
Si lon veut une factorisation sur les entiers de Gauss, on coche Complex
dans lcran de configuration du CAS (bouton donnant la ligne dtat), on
tape :
factor(x^4+1)
Ou on tape :
x^4+1=>*
On obtient :
(x^2+i)*(x^2+-i)
5. Factoriser dans R :

x4 + 1

Si lon veut une factorisation relle, afin de connaitre le rel qui sert dans la
factorisation, on coche Complex dans lcran de configuration du CAS et
on tape tout dabord :
solve(x^4+1,x)
On obtient :
[sqrt(2)/2+(i)*sqrt(2)/2,sqrt(2)/2+(i)*(-(sqrt(2)/2)),
-sqrt(2)/2+(i)*sqrt(2)/2,-sqrt(2)/2+(i)*(-(sqrt(2)/2))]

On voit que les racines dpendent de 2 donc on tape :


factor(sqrt(2)*(x^4+1))
On obtient :
sqrt(2)*(x^2+sqrt(2)*x+1)*(x^2+(-(sqrt(2)))*x+1)
Ou bien on tape :
factor(x^4+1,sqrt(2)))
On obtient :

248

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


(x^2+sqrt(2)*x+1)*(x^2+(-(sqrt(2)))*x+1)
Remarques
Si on coche Sqrt dans la configuration du CAS, les trinmes du second
degr (et seulement du second degr) seront factoriss mme si les facteurs
ne sont pas dans le corps de base des coefficients.
Pour factoriser dans C lexpression x4 + 1, il faut cocher Complex et Sqrt
dans lcran de configuration du CAS et taper :
factor(x^4+1)
ou taper (avec juste Sqrt coch) :
cfactor(x^4+1) (cf cfactor).

6.13.12

Factorisation dans C : cFactor factoriser_sur_C cfactor

cFactor ou cfactor ou factoriser_sur_C a comme paramtre une expression que lon veut factoriser sur le corps des complexes sans avoir besoin dtre
en mode complexe. Lorsquil y a plus de 2 variables la factorisation se fait sur les
entiers de Gauss.
Exemples
1. Factoriser dans C :
x4 1
On tape :
cFactor(x^4-1)
On obtient :
-((x+-i)*((-i)*x+1)*((-i)*x+i)*(x+1))
2. Factoriser dans C :
x4 + 1
On tape :
cFactor(x^4+1)
On obtient :
(x^2+i)*(x^2+-i)
Puis, on tape :
cFactor(sqrt(2)*(x^2+i))*cFactor(sqrt(2)*(x^2+-i))
On obtient :
sqrt(2)*1/2*(sqrt(2)*x+1-i)*(sqrt(2)*x-1+i)*sqrt(2)*
1/2*(sqrt(2)*x+1+i)*(sqrt(2)*x-1-i)
Mais si on tape, :
cFactor(sqrt(2)*(x^4+1))
On obtient :
sqrt(2)*(x^2+sqrt(2)*x+1)*(x^2+(-(sqrt(2)))*x+1)

6.13. LES EXPRESSIONS ALGBRIQUES

6.13.13

249

Zros dune expression : zeros

zeros a comme paramtre une expression.


zeros renvoie la liste des lments qui annulent lexpression.
Selon le mode choisi, si on est en mode rel (complex_mode:=0) les zros
seront rels et si on est en mode complexe (complex_mode:=1) les zros seront
complexes.
On tape en mode rel :
zeros(x^2+4)
On obtient :
[]
On tape en mode complexe :
zeros(x^2+4)
On obtient :
[-2*i,2*i]
On tape en mode rel :
zeros(ln(x)^2-2)
On obtient :
[exp(sqrt(2)),exp(-(sqrt(2)))]
On tape en mode rel :
zeros(ln(y)^2-2,y)
On obtient :
[exp(sqrt(2)),exp(-(sqrt(2)))]
On tape en mode rel :
zeros(x*(exp(x))^2-2*x-2*(exp(x))^2+4)
On obtient :
[ln(2)/2,2]

6.13.14

Zros complexe dune expression : cZeros

cZeros a comme paramtre une expression.


cZeros renvoie la liste des lments complexes qui annulent lexpression.
Remarque
Diffrence entre zeros et cZeros : En mode complexe zeros renvoie le mme
rsultat que cZeros (pour cZeros que lon soit en mode complexe ou rel cela
importe peu). Ainsi, si on ne veut pas que le rsultat dpende du mode, pour avoir
les solutions complexes il est prfrable dutiliser cZeros.
On tape en mode rel ou complexe :

250

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


cZeros(x^2+4)

On obtient :
[-2*i,2*i]
On tape :
cZeros(ln(x)^2-2)
On obtient :
[exp(sqrt(2)),exp(-(sqrt(2)))]
On tape :
cZeros(ln(y)^2-2,y)
On obtient :
[exp(sqrt(2)),exp(-(sqrt(2)))]
On tape :
cZeros(x*(exp(x))^2-2*x-2*(exp(x))^2+4)
On obtient :
[[log(sqrt(2)),log(-sqrt(2)),2]]

6.13.15

Regrouper et simplifier : regrouper regroup

regrouper a comme paramtre une expression.


regrouper effectue les simplifications videntes sur une expression en regroupant des termes.
On tape :
regrouper(x+3*x+5*4/x)
On obtient :
20/x+4*x

6.13.16

Dvelopper et simplifier : normal

normal a comme paramtre une expression.


normal renvoie lexpression dveloppe et simplifie.
On tape :
normal(x+3*x+5*4/x)
On obtient :
(4*x^2+20)/x
On tape :

6.13. LES EXPRESSIONS ALGBRIQUES

251

normal((x-1)*(x+1))
On obtient :
x^2-1
Attention normal est moins efficace que simplify et on est quelquefois oblig
de faire plusieurs fois la commande normal.
On tape :
normal(3-54*sqrt(1/162))
On obtient :
(-9*sqrt(2)+9)/3
On tape :
normal((-9*sqrt(2)+9)/3)
On obtient :
-(3*sqrt(2))+3

6.13.17

Simplifier : simplify simplifier

simplify simplifie lexpression de faon automatique.


On tape :
simplify((x-1)*(x+1))
On obtient :
x^2-1
On tape :
simplify(3-54*sqrt(1/162))
On obtient :
-3*sqrt(2)+3
Attention simplify est plus efficace lorsquon est en mode radian pour simplifier des expressions trigonomtriques (pour cela on coche radian dans la configuration du cas ou bien on tape angle_radian:=1).
On tape :
simplify((sin(3*x)+sin(7*x))/sin(5*x))
On obtient :
4*(cos(x))^2-2

252

6.13.18

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Pour rcrire les rsultats selon son choix : autosimplify

autosimplify a pour argument une commande (comme factor, simplify


...) qui sera utilise pour rcrire les rsultats dans Xcas (la valeur de largument
de autosimplify au lancement est regroup).
Si on ne veut pas de simplifications automatique il faudra taper au dbut de la
session : autosimplify(nop).
Si on veut changer le mode de simplification en cours de session il faudra que le
nouveau autosimplify(...) se trouve seul sur une ligne. On tape en dbut
de session :
autosimplify(1)
ou
autosimplify(regroup)
Puis on tape :
1+x^2-2
On obtient :
x^2-1
On tape sur une ligne :
autosimplify(factor)
Puis on tape :
1+x^2-2
On obtient :
(x-1)*(x+1)
On tape :
autosimplify(nop)
ou
autosimplify()
ou
autosimplify(0)
Puis on tape :
1+x^2-2
On obtient :
1+x^2-2
On tape :
autosimplify(regroup)
Puis on tape :
1+x^2-2
On obtient comme en dbut de session :
x^2-1

6.13. LES EXPRESSIONS ALGBRIQUES

6.13.19

253

Simplifier laide de fractions rationnelles : ratnormal

ratnormal simplifie lexpression sous forme de fraction irrductible.


On tape :
ratnormal((x^3-1)/(x^2-1))
On obtient :
(x^2+x+1)/(x+1)
On tape :
ratnormal((-2x^3+3x^2+5x-6)/(x^2-2x+1))
On obtient :
(-2*x^2+x+6)/(x-1)

6.13.20

Substituer une valeur une variable : |

| est une fonction infixe qui substitue des valeurs des variables : | a deux arguments : une expression dependant dun paramtre et une galit (paramtre=valeur
de substitution,paramtre=valeur de substitution,... ) . On tape :
a^2+1|a=2
On obtient mme si la variable a est affecte :
5
On tape :
a^2+b|a=2,b=3
On obtient mme si les variables a et b sont affectes :
7

6.13.21

Substituer une valeur une variable : subst substituer

subst a deux ou trois arguments : une expression dpendant dun paramtre et


une galit (paramtre=valeur de substitution) ou une expression dependant dun
paramtre , le paramtre et la valeur de substitution.
subst effectue la substitution demande dans lexpression condition que
le paramtre ne soit pas affect car subst value tout dabord lexpression
et remplace donc le paramtre (si il a t affect) par sa valeur sans tenir
compte de la valeur de substitution donn par le deuxime paramtre.
On tape :
subst(a^2+1,a=2)
ou :
subst(a^2+1,a,2)
On obtient si la variable a nest pas affecte :
5

254

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Si la variable a est affecte, il faut taper auparavant purge(a) pour obtenir
5.
Lorsque lon veut substituer plusieurs variables, pour eviter de faire plusieurs
substitutions la suite, on met comme deuxime argument la liste de ces
variables et comme troisime argument la liste de les valeurs de substitution
(ou encore on met comme deuxime argument la liste forme des noms de
variables = valeur de substitution).
On tape :
subst(a^2+b,[a,b],[2,1])
Ou on tape :
subst(a^2+b,[a=2,b=1])
On obtient si les variables a et b ne sont pas affectes :
2^2+1
subst permet aussi deffectuer des changements de variables dans une intgrale mais subst ne gre les changements de variable dans une integrale
que si le changement de variable est de la forme x=f(u). Dans ce cas il
faut quoter lintgrale pour que celle-ci ne soit pas calcule si on utilise
integrate ou bien il faut utiliser la commande Int. Dans les deux cas il
faut spcifier le nom de la variable dintgration mme si celle-ci est x.
On tape :
subst(integrate(sin(x^2)*x,x,0,pi/2),x=sqrt(t))
Ou on tape :
subst(Int(sin(x^2)*x,x,0,pi/2),x=sqrt(t))
On obtient
integrate(sin(t)*sqrt(t)*1/2*1/t*sqrt(t),t,0,(pi/2)^2)
On tape :
subst(integrate(sin(x^2)*x,x),x=sqrt(t))
Ou on tape :
subst(Int(sin(x^2)*x,x),x=sqrt(t))
On obtient
integrate(sin(t)*sqrt(t)*1/2*1/t*sqrt(t),t)

6.13.22

Substituer une valeur une variable (compatibilit Maple et


Mupad) : subs

En Maple et en Mupad la commande synonyme de subst est subs, mais lordre


des paramtres de subs nest pas le mme en Maple et en Mupad.
Ainsi les arguments de subs sont :
En mode Maple, la fonction subs a deux arguments : une galit (paramtre=valeur de substitution) et une expression dpendant du paramtre.
Pour faire plusieurs substitutions, subs a deux arguments : une liste dgalit (paramtre=valeur de substitution) et une expression dpendant de ces
paramtres.
En mode Mupad ou Xcas ou TI, la fonction subs a deux ou trois arguments : une expression dpendant dun paramtre et une galit (paramtre=valeur de substitution) ou une expression dpendant dun paramtre,

6.13. LES EXPRESSIONS ALGBRIQUES

255

le paramtre et la valeur de substitution.


Pour faire plusieurs substitutions, la fonction subs a deux ou trois arguments : une expression dpendant de paramtres et une liste dgalit (paramtre=valeur de substitution) ou une expression dpendant de paramtres,
la liste des paramtres et la liste des valeurs de substitution.
subs effectue la substitution demande dans lexpression condition que le paramtre ne soit pas affect car subs value tout dabord lexpression et remplace
donc le paramtre par sa valeur sans tenir compte de la valeur de substitution donne par le deuxime paramtre.
On tape en mode Maple :
subs(a=2,a^2+1)
On obtient (si la variable a nest pas affecte, sinon il faut taper auparavant purge(a)) :
5
Lorsque lon veut substituer plusieurs variables :
On tape, en mode Maple :
subs([a=2,b=1],a^2+b)
On obtient (si les variables a et b ne sont pas affectes, sinon il faut taper auparavant purge(a,b)) :
2^2+1
On tape, en mode Mupad ou Xcas ou TI :
subs(a^2+1,a=2)
ou :
subs(a^2+1,a,2)
On obtient (si la variable a nest pas affecte, sinon il faut taper auparavant purge(a)) :
5
Lorsque lon veut substituer plusieurs variables :
On tape, dans les modes Mupad Xcas TI :
subs(a^2+b,[a=2,b=1])
ou on tape
subs(a^2+b,[a,b],[2,1])
On obtient (si les variables a et b ne sont pas affectes, sinon il faut taper auparavant purge(a,b)) :
2^2+1

256

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.13.23

Substituer dans une expression, une expression algbrique par


une variable : algsubs

algsubs permet de substituer dans une expression, une expression algbrique


par une autre expression algbrique.
algsubs a 2 arguments :
une quation entre 2 expressions algbriques Xpr1=Xpr2 et
une expression dans laquelle algsubs remplacera lexpression algbrique Xpr1
par Xpr2.
On tape :
algsubs(x^2=u,1+x^2+x^4)
On obtient :
u^2+u+1
On tape :
algsubs(a*b/c=d, 2*a*b^2/c)
On obtient :
2*b*d
On tape :
algsubs(2a=p^2-q^2,algsubs(2c=p^2+q^2,c^2-a^2))
On obtient :
p^2*q^2

6.13.24

liminer une (ou des) variable(s) dans une liste dquations :


eliminate

eliminate permet dliminer une ou plusieurs variables dans une liste dquations algbriques, quations algbriques qui sont verifies par plusieurs variables.
eliminate a 2 arguments :
une liste dquations L1 et
la variable ou la liste des variables liminer.
eliminate renvoie la liste L2 des quations qui sont vrifies par les variables
non limines et pour lesquelles =0 est sous entendu.
On tape :
eliminate([x=v0*t,y=y0-g*t^2],t)
On obtient si la variable t nest pas affecte et si les autres variables ne sont pas affectes (si les autres variables sont affectes, elles sont remplaces par leur valeurs
ce qui modifie le rsultat) :
[x^2*g-v0^2*y0+v0^2*y]
On tape :

6.13. LES EXPRESSIONS ALGBRIQUES

257

eliminate([x=2*t,y=1-10*t^2,z=x+y-t],t)
On obtient si la variable t nest pas affecte et si les variables x,y,z ne sont pas
affectes :
[x+2*y-2*z,-10*y^2+20*y*z-y-10*z^2+1]
On tape :
eliminate([x+y+z+t-2,x*y*t=1,x^2+t^2=z^2],[x,z])
On obtient si les variables x et z ne sont pas affectes et si les autres variables ne
sont pas affectes (si les autres variables sont affectes, elles sont remplaces par
leur valeurs ce qui modifie le rsultat) :
[y^3*t+2*y^2*t^2-4*y^2*t-4*y*t^2+4*y*t+2*y+2*t-4]
Attention
Si la rponse est [1] ou [-1], cela veut dire que la ou les variables ne peuvent
pas tre linmines.
Si la rponse est [], cela veut dire que certaines quations dterminent les valeurs
des variables liminer et que ces valeurs vrifient toutes les quations.
On tape :
x:=2;y:=-5
eliminate([x=2*t,y=1-10*t^2],t)
On obtient si la variable t nest pas affecte :
[1]
On ne peut donc pas liminer t des deux quations :
2 = 2t, 5 = 1 10t2 .
On tape :
x:=2;y:=-9
eliminate([x=2*t,y=1-10*t^2],t)
On obtient si la variable t nest pas affecte :
[]
En effet la premire quation :
2 = 2t donne t = 1 et t = 1 vrifie la deuxime quation 9 = 1 10t2 .
On tape :
x:=2;y:=-9
eliminate([x=2*t,y=1-10*t^2,z=x+y-t],t)
On obtient si la variable t nest pas affecte :
[z+8]
En effet la premire quation :
2 = 2t donne t = 1, t = 1 vrifie la deuxime quation 9 = 1 10t2 et il reste
la troisime quation z = 2 9 1 = 8 soit z + 8 = 0.

258

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.13.25

valuer une primitive : preval

preval a trois paramtres : une expression F(x) dpendant de la variable x, et


deux expressions a et b.
preval effectue F(b)-F(a).
preval est utile pour calculer une intgrale dfinie partir dune primitive : on
calcule une primitive, puis on value cette primitive entre les deux bornes de lintgrale.
On tape :
preval(x^2+x,2,3)
On obtient :
6

6.13.26

Sous-expression dune expression : part

part a deux arguments : une expression et un entier n.


part value lexpression puis renvoie la n-ime sous-expression de lexpression.
On tape :
part(x^2+x+1,2)
On obtient :
x
On tape :
part(x^2+(x+1)*(y-2)+2,2)
On obtient :
(x+1)*(y-2)
On tape :
part((x+1)*(y-2)/2,2)
On obtient :
y-2

6.14

Valeurs de un

6.14.1

Tableau de valeurs des termes dune suite : tablefunc table_fonction

tablefunc ou table_fonction est une commande qui sutilise lintrieur dun tableur (que lon ouvre avec Alt+t) et qui .
remplit deux colonnes donnant la table des valeurs dune fonction.
tablefunc(ex,n,n0,1), o ex est une expression dpendant de n, remplira
le tableur avec les valeurs de la suite un = ex pour n = n0, n0 + 1, n0 + 2, .....
Exemple : Affichage des valeurs de un = sin(n) On ouvre un tableur avec
Alt+t.
Puis, on slectionne une case du tableur (par exemple C0) et on tape dans la ligne
de commande du tableur :

6.14. VALEURS DE UN

259

tablefunc(sin(n),n,0,1)
On obtient :
deux colonnes : n et sin(n)
dans la colonne n il y a la valeur du pas (qui doit tre gal 1) et la valeur
de n0 (ici 0), puis une formule C2+C$1 qui a t recopie vers le bas.
dans la colonne sin(n) il y a "Tablefunc", puis une formule qui a t
aussi recopie vers le bas.
Les valeurs de la suite un = sin(n) saffichent alors en face des n correspondants partir de n=n0 (ici 0).

6.14.2

Valeurs dune suite rcurrente ou dun systme de suites rcurrentes : seqsolve

Voir aussi rsolve 6.14.3.


seqsolve a comme argument lexpression ou la liste des expressions qui dfini(ssen)t une/des relation(s) de rcurrence, par exemple f (x, n) si la relation de
rcurrence est un+1 = f (un , n) (resp g(x, y, n) si la relation de rcurrence est
un+2 = g(un , un+1 , n) = g(x, y, n)), le nom des variables utilises (par exemple
[x, n] (resp [x, y, n])) et les valeurs de dpart de la suite : par exemple a si u0 = a
(resp [a, b] si u0 = a et u1 = b).
La relation de rcurrence doit comporter une partie homogne linaire, la partie
non homogne doit tre une combinaison linaire de produit de polynme en n
par une suite gomtrique en n. seqsolve renvoie alors la valeur de la suite en
fonctions de n.
Exemples :
Valeurs de la suite u0 = 3, un+1 = 2un + n
On tape :
seqsolve(2x+n,[x,n],3)
On obtient :
-n-1+4*2^n
On peut aussi taper rsolve(u(n+1)=2*u(n)+n,u(n),u(0)=3) (cf6.14.3)
Valeurs de la suite u0 = 3, un+1 = 2un + n3n
On tape :
seqsolve(2x+n*3^n,[x,n],3)
On obtient :
(n-3)*3^n+6*2^n
Valeurs de la suite u0 = 0, u1 = 1, un+1 = un + un1 pour n > 0.
On tape :
seqsolve(x+y,[x,y,n],[0,1])
On obtient :
(5+sqrt(5))/10*((sqrt(5)+1)/2)^(n-1)+
(5-(sqrt(5)))/10*((-sqrt(5)+1)/2)^(n-1)
Valeurs de la suite u0 = 0, u1 = 1, un+2 = 2 un+1 + un + n + 1 pour
n > 0.
la main, on trouve u2 = 3, u3 = 9 u4 = 24 etc...
On tape :

260

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


seqsolve(x+2y+n+1,[x,y,n],[0,1])
On obtient :

(-4*n-3*(-(sqrt(2)-1))^n*sqrt(2)+2*(-(sqrt(2)-1))^n+3*(sqrt(2)+1)^
On vrifie pour n:=4 on obtient bien 24
Ou on tape car on a un+1 = 2un + vn + n et vn+1 = un (donc vn = un1 )
avec u0 = 0 et u1 = 2u0 + v0 + 0 = 1 donc v0 = 1 :
seqsolve([2x+y+n,x],[x,y,n],[0,1])
On obtient :
[(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)^n(-2+3*sqrt(2))/8*(-sqrt(2)+1)^n-1/2*n,
-(-4+sqrt(2))/8*(sqrt(2)+1)^n(-4-sqrt(2))/8*(-sqrt(2)+1)^n-1/2*n]
On vrifie pour n:=4 on obtient bien 24
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + 2vn , vn+1 = un + n + 1
pour n > 0.
On tape :
seqsolve([x+2*y,n+1+x],[x,y,n],[0,1])
On obtient :
[(-2*n-(-1)^n+2^n*4-3)/2,((-1)^n+2*2^n-1)/2]
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + 2vn + n + 1, vn+1 = un
pour n > 0.
On tape :
seqsolve([x+2*y+n+1,x],[x,y,n],[0,1])
On obtient :
[(-2*n-(-1)^n*3+2^n*8-5)/4,(-2*n+(-1)^n*3+2^n*4-3)/4]
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + vn , vn+1 = un vn pour
n > 0.
On tape :
seqsolve([x+y,x-y],[x,y,n],[0,1])
On obtient :
[(-4*n-3*(-(sqrt(2)-1))^n*sqrt(2)+
2*(-(sqrt(2)-1))^n+ 3*(sqrt(2)+1)^n*sqrt(2)+
2*(sqrt(2)+1)^n-4)/8,
(-4*n+(-(sqrt(2)-1))^n*sqrt(2)+
4*(-(sqrt(2)-1))^n-(sqrt(2)+ 1)^n*sqrt(2)+
4*(sqrt(2)+1)^n)/8]
Valeurs de la suite u0 = 2, v0 = 0, un+1 = 4 vn + n + 1, vn+1 = un , pour
n > 0.
On tape :
seqsolve([4y+n+1,x],[x,y,n],[2,0])
On obtient :
[(-8)/9+2*2^n-(-8)/9*(-1)^n*2^n-1/3*n,
(-5)/9+2^n-4/9*(-1)^n*2^n-1/3*n]

6.14. VALEURS DE UN

6.14.3

261

Valeurs dune suite rcurrente ou dun systme de suites rcurrentes : rsolve

Voir aussi seqsolve 6.14.2.


rsolve a comme argument la ou les relation(s) de rcurrence, le nom des variables utilises et les valeurs de dpart de la suite.
La relation de rcurrence est :
soit une partie homogne linaire, la partie non homogne doit tre une combinaison linaire de produit de polynme en n par une suite gomtrique en
n. Par exemple un+1 = 2un + n3n ,
un 1
soit une fonction homographique. Par exemple un+1 =
un 2
rsolve renvoie alors une matrice dont les lignes sont les valeurs de la suite en
fonctions de n.
Remarques
Contrairement seqsolve, rsolve est plus mallable car avec rsolve :
la suite ne dbute pas forcment par u(0),
on peut donner plusieurs valeurs de dpart par exemple u(0)^2=1, cest
pourquoi rsolve renvoie une liste,
on crit la relation de rcurrence comme en mathmatiques.
Exemples :
Valeurs de la suite u0 = 3, un+1 = 2un + n
On tape :
rsolve(u(n+1)=2u(n)+n,u(n),u(0)=3)
On obtient :
[-1+4*2^(n+1-1)-n]
Valeurs de la suite u21 = 1, un+1 = 2un + n
On tape :
rsolve(u(n+1)=2u(n)+n,u(n),u(1)^2=1)
On obtient :
[[-1-(-3)/2*2^(n+1-1)-n,
-1-(-1)/2*2^(n+1-1)-n]]
Valeurs de la suite u0 = 3, un+1 = 2un + n3n
On tape :
rsolve(u(n+1)=2u(n)+(n)*3^n,u(n),u(0)=3)
On obtient :
[-3*3^(n+1-1)+6*2^(n+1-1)+n*3^(n+1-1)]
un 1
Valeurs de la suite u0 = 4, un+1 =
un 2
On tape :
rsolve(u(n+1)=(u(n)-1)/(u(n)-2),u(n),u(0)=4)
On obtient :
[((10*sqrt(5)+30)*((sqrt(5)-3)/2)^n+30*sqrt(5)-70)/
(20*((sqrt(5)-3)/2)^n+10*sqrt(5)-30)]
Valeurs de la suite u0 = 0, u1 = 1, un+1 = un + un1 pour n > 0.
On tape :
rsolve(u(n+1)=u(n)+u(n-1),u(n),u(0)=0,u(1)=1)
On obtient :

262

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


[(5+sqrt(5))/10*((sqrt(5)+1)/2)^(n+1-1-1)+
(5-sqrt(5))/10*((-sqrt(5)+1)/2)^(n+1-1-1)]
Valeurs de la suite u0 = 0, u1 = 1, un+1 = 2 un + un1 + n pour n > 0.
On tape :
rsolve(u(n+1)=2*u(n)+u(n-1)+n,u(n),u(0)=0,u(1)=1)
On obtient :
[(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)^(n+1-1)(-2+3*sqrt(2))/8*(-sqrt(2)+1)^(n+1-1)-1/2*n]
Ou on tape :
rsolve([u(n+1)=2*u(n)+v(n)+n,v(n+1)=u(n)],
[u(n),v(n)],u(0)=0,v(0)=1) On obtient :
[[(-1)/2-(-2-3*sqrt(2))/8*(sqrt(2)+1)^(n+1-1)(-2+3*sqrt(2))/8*(-sqrt(2)+1)^(n+1-1)-1/2*n,
-(-4+sqrt(2))/8*(sqrt(2)+1)^(n+1-1)(-4-sqrt(2))/8*(-sqrt(2)+1)^(n+1-1)-1/2*n]]
Valeurs de la suite u0 = 0, v0 = 1, un+1 = un + vn , vn+1 = un vn ,.
On tape :
rsolve([u(n+1)=u(n)+v(n),v(n+1)=u(n)-v(n)],
[u(n),v(n)],[u(0)=0,v(0)=1])
On obtient :
[[1/2*2^((n-1)/2)+1/2*(-(sqrt(2)))^(n-1),
(-1+sqrt(2))/2*2^((n-1)/2)+
(-1-sqrt(2))/2*(-(sqrt(2)))^(n-1)]]
Valeurs de la suite u0 = 2, v0 = 0, un+1 = 4 vn + n + 1, vn+1 = un ,.
On tape :
rsolve([u(n+1)=4*v(n)+n+1,v(n+1)=u(n)],
[u(n),v(n)],[u(0)=2,v(0)=0])
On obtient :
[[(-8)/9+2*2^(n+1-1)-(-8)/9*(-1)^(n+1-1)*2^(n+1-1)1/3*n,(-5)/9+2^(n+1-1)-4/9*(-1)^(n+1-1)*2^(n+1-1)1/3*n]]

6.14.4

Tableau de valeurs et graphe dune suite rcurrente : tableseq


table_suite et plotseq graphe_suite

tableseq ou table_suite est une commande qui sutilise lintrieur


dun tableur (que lon ouvre avec Alt+t) et qui .
remplit une colonne avec u0 , un+1 = f(un ) (rcurrence sur un terme) ou plus gnrallement u0 , ..., uk , un+k+1 = f (un , un+1 , ..., un+k ). tableseq ou table_suite
remplit une colonne partir de la cellule slectionne ou partir de 0 si cest le
nom de la colonne qui est slectionne.
Voir aussi plotseq (section 3.19) pour la reprsentation graphique des suites rcurrentes.
Exemples :
Affichage des valeurs de la suite u0 = 3.5, un = sin(un1 )
On ouvre un tableur avec Alt+t.
Puis, on slectionne une case du tableur (par exemple B0) et pour avoir les

6.15. LES FONCTIONS INFIXES OU OPRATEUR

263

valeurs de u0 = 3.5, un = sin(un1 ), on tape, dans la ligne de commande


du tableur :
tableseq(sin(u),u,4)
On obtient :
une colonne contenant sin(n), n, 3.5 et une
formule evalf(subst(B$0,B$1,B2))
Les valeurs de la suite u0 = 4, un = sin(un1 ) saffichent dans la colonne
B.
Affichage des valeurs de la suite de Fibonacci u0 = 1, u1 = 1 un+2 =
un + un+1
Aprs avoir selectionn B0, on tape, dans la ligne de commande du tableur :
tableseq(x+y,[x,y],[1,1])
On obtient, les premiers termes de la suite de Fibonacci :
ligne B
x+y
1
x
2
y
3
1
4
1
5
2
..
..
7
5
..
..

6.15

Les fonctions infixes ou oprateur

Un oprateur est une fonction infixe.

6.15.1

Les oprateurs usuels :+, -, *, /,

+, -, *, /, sont les oprateurs habituels pour faire des additions, des


soustractions, des multiplications, des divisions et des lvations une puissance.

6.15.2

Les autres oprateurs de Xcas

$ est la version infixe de seq par exemple :


(2^k)$(k=0..3)= seq(2^k,k=0..3)=(1,2,4,8) (ne pas oublier
de parenthser les arguments),
mod ou % pour dfinir un nombre modulaire,
@ pour composer des fonctions par exemple : (f@g)(x)=f(g(x)),
@@ pour composer une fonction avec elle-mme par exemple :
(f@@3)(x)=f(f(f(x))),
minus union intersect pour traduire la diffrence, lunion et lintersection de deux ensembles,
-> pour dfinir une fonction,
:= ou => pour affecter une variable (cest la version infixe de sto avec
lordre permut des arguments pour :=), par exemple : a:=2 or 2=>a or

264

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


sto(2,a).
=> permet aussi de faire des conversions dunit et des rcritures dexpressions, par exemples : 3_m=>_cm, sin(x)=>diff, sin(x)=>exp,
x^2-1=>* etc... =< pour stocker une expression dans une variable, avec
une affectation par rfrence (lordre des arguments est le mme que pour :=)
si la cible est un lment dune matrice ou dune liste. Ceci est plus rapide
si on modifie les lments dune matrice ou dune liste existante de grande
dimension, car on ne fait pas de copie. utiliser avec prcautions car tous
les objets pointant sur cette matrice seront modifis. Dans un programme
il faudra utiliser copy lors de linitialisation pour que les modifications se
fassent sur la copie (cf 8.4.15)

6.15.3

Dfinition dun oprateur : user_operator

user_operator a comme argument :


une chane de caractres qui est le nom de loprateur,
une fonction de deux variables valeur dans R ou dans true, false,
une option Binary pour la dfinition ou Delete pour annuler cette dfinition.
user_operator renvoie 1 si la dfinition a eu lieu et 0 sinon.
Exemple 1
Soit la loi R dfinit sur R par x R y = x y + x + y.
On tape pour dfinir la loi R :
user_operator("R",(x,y)->x*y+x+y,Binary)
On obtient :
1
On tape :
5 R 7
Bien mettre les espace autour de R.
On obtient :
47
Exemple 2
Soit la relation S dfinit sur N par :
pour x et y entiers, x S y <=> x et y ne sont pas premiers entre eux.
On tape pour dfinir la relation S :
user_operator("S",(x,y)->(gcd(x,y))!=1,Binary)
On obtient :
1
On tape :
5 S 7

6.16. LES FONCTIONS ET LES EXPRESSIONS DE VARIABLES SYMBOLIQUES265


Bien mettre les espace autour de S.
On obtient :
0
On tape :
8 S 12
Bien mettre les espace autour de S.
On obtient :
1

6.16

Les fonctions et les expressions de variables symboliques

6.16.1

Diffrence entre fonction et expression

Une fonction f est dfinie par exemple par :


f(x):=x^2-1 ou encore par f:=x->x^2-1
cela signifie que pour tous les x, f (x) est gale lexpression x2 1.
On pourra ainsi taper f(2) pour avoir la valeur de f en x = 2.
Par contre si on dfinit :
g:=x^2-1 cela signifie que g est une variable qui contient lexpression x2 1.
Pour avoir la valeur de g en x = 2 il faut alors crire :
subst(g,x=2) car g est une expression qui dpend de x.
Aussi, lorsque largument dune commande est une fonction il faut mettre comme
argument, soit par exemple x->x^2-1, soit f (si f est une fonction qui a t dfinie auparavant par exemple par f(x):=x^2-1) et
lorsque largument dune commande est une expression on met comme argument,
soit par exemple x^2-1, soit g (si g est une variable que lon a dfinie auparavant par exemple g:=x^2-1), soit f(x) (si f est une fonction qui a t dfinie
auparavant par exemple f(x):=x^2-1).

6.16.2

Transformer une expression en une fonction : unapply

Pour transformer une expression en une fonction, on utilise la commande unapply.


unapply a deux arguments une expression et le nom dune (ou des) variable(s).
unapply renvoie une fonction dfinie partir de cette expression et de la (ou des)
variable(s) donne(s) en argument.
Attention lorsquon dfinit une fonction, le membre de droite de laffectation
nest pas valu, ainsi lcriture g:=x^2; f(x):=g ne dfinit pas la fonction
f : x x2 mais la fonction f : x g.
On tape :
g:= sin(x+1); f:=unapply(g,x)
On obtient :
(sin(x+1), (x)->sin(x+1))

266

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On a alors la variable g qui contient une expression symbolique et la variable f qui


contient une fonction.
On tape :
unapply(exp(x+2),x)
On obtient :
(x)->exp(x+2)
On tape :
f:=unapply(lagrange([1,2,3],[4,8,12]),x)
On obtient :
(x)->4+4*(x-1)
On tape :
f:=unapply(integrate(log(t),t,1,x),x)
On obtient :
(x)->x*log(x)-x+1
On tape :
f:=unapply(integrate(log(t),t,1,x),x)
f(x)
On obtient :
x*log(x)-x+1
Remarque Pour dfinir, partir dune fonction de 2 variables f (x, w), la fonction
g qui w fait correspondre la fonction g(w) dfinie par : g(w)(x) = f (x, w), on
utilise aussi unapply.
On tape :
f(x,w):=2*x+w
g(w):=unapply(f(x,w),x)
g(3)
On obtient :
x->2 x+3

6.16. LES FONCTIONS ET LES EXPRESSIONS DE VARIABLES SYMBOLIQUES267

6.16.3

Sommet et feuille dune expression : sommet feuille op

Un oprateur est une fonction infixe : par exemple + est un oprateur et sin
est une fonction.
On peut reprsenter une expression par un arbre. Le sommet de larbre est soit un
oprateur, soit une fonction et les feuilles de larbre sont les arguments de loprateur ou de la fonction (voir aussi 6.40.13).
La fonction sommet (resp feuille (ou op)) renvoie le sommet (resp la liste des
feuilles) dune expression.
On tape :
sommet(sin(x+2))
On obtient :
sin
On tape :
sommet(x+2*y)
On obtient :
+
On tape :
feuille(sin(x+2))
Ou on tape :
op(sin(x+2))
On obtient :
x+2
On tape :
feuille(x+2*y)
Ou on tape :
op(x+2*y)
On obtient :
(x,2*y)
Remarque
Lorsque lutilisateur dfinit une fonction par un programme par exemple la fonction pgcd.
On tape :
pgcd(a,b):={local r; while (b!=0)
{r:=irem(a,b);a:=b;b:=r;} return a;}

268

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Puis on tape :
sommet(pgcd)
On obtient :
program
Puis on tape :
feuille(pgcd)[0]
On obtient :
(a,b)
Puis on tape :
feuille(pgcd)[1]
On obtient :
(0,0) ou (15,25) si lon vient dexcuter pgcd(15,25)
Puis on tape :
feuille(pgcd)[2]
On obtient :
Le corps du programme : {local r;....return(a);}

6.17

Les fonctions

6.17.1

Les fonctions ayant plusieurs usages

+ et + (resp -) est une fonction infixe et + (resp -) est une fonction prfixe.
Elle renvoie un rsultat qui dpend de la nature de ses arguments.
Voici des exemples avec + (seul le dernier exemple nest pas utilisable avec -) :
On tape (1,2)+(3,4) ou (1,2,3)+4=1+2+3+4 ou+(1,2,3,4), on obtient 10,
On tape 1+i+2+3*i ou +(1,i,2,3*i), on obtient 3+4*i,
On tape [1,2,3]+[4,1] ou [1,2,3]+[4,1,0] ou +([1,2,3],[4,1]), on obtient [5,3,3],
On tape [1,2]+[3,4] ou +([1,2],[3,4]), on obtient [4,6],
On tape [[1,2],[3,4]]+ [[1,2],[3,4]], on obtient [[2,4],[6,8]],
On tape [1,2,3]+4 ou +([1,2,3],4), on obtient poly1[1,2,7],
On tape [1,2,3]+(4,1) ou +([1,2,3],4,1), on obtient poly1[1,2,8],
On tape "bon"+"jour" ou +("bon","jour"), on obtient "bonjour".

6.17. LES FONCTIONS

269

*
* est une fonction infixe et * est une fonction prfixe. Elle renvoie un rsultat
qui dpend de la nature de ses arguments.
Voici des exemples avec * :
On tape (1,2)*(3,4) ou (1,2,3)*4 ou 1*2*3*4 ou *(1,2,3,4), on obtient 24,
On tape 1*i*2*3*i ou *(1,i,2,3*i), on obtient -6,
On tape [10,2,3]*[4,1] ou [10,2,3]*[4,1,0] ou +([10,2,3],[4,1]), on obtient
42 (produit scalaire),
On tape [1,2]*[3,4] ou *([1,2],[3,4]), on obtient 11 (produit scalaire),
On tape [[1,2],[3,4]]* [[1,2],[3,4]], on obtient [[7,10],[15,22]],
On tape [1,2,3]*4=*([1,2,3],4), on obtient [4,8,12],
On tape [1,2,3]*(4,2)ou *([1,2,3],4,2), on obtient [1,2,3]*8=[8,16,24],
On tape (1,2)+i*(2,3), on obtient 1+2+i*2*3=3+6*i.
/
/ est une fonction infixe et / est une fonction prfixe. Elle renvoie un rsultat
qui dpend de la nature de ses arguments.
Voici des exemples avec / :
On tape [10,2,3]/[4,1], on obtient invalid dim,
On tape [1,2]/[3,4] ou /([1,2],[3,4]), on obtient [1/3,1/2],
On tape 1/[[1,2],[3,4]], on obtient [[-2,1],[3/2,(-1)/2]],
On tape [[1,2],[3,4]]*1/ [[1,2],[3,4]], on obtient [[1,0],[0,1]],
On tape [[1,2],[3,4]]/ [[1,2],[3,4]], on obtient [[1,1],[1,1]] (division terme
terme),
On tape [1,2,3]*4 ou *([1,2,3],4), on obtient [4,8,12],
On tape [1,2,3]/(4,2) ou *([1,2,3],4,2)=[1,2,3]*8, on obtient [8,16,24].

6.17.2

Les fonctions usuelles

max dune squence ou dune liste de rels renvoie leur maximum,


min dune squence ou dune liste de rels renvoie leur minimum,
abs dun rel renvoie sa valeur absolue,
sign dun rel renvoie son signe (+1 si il est positif, 0 si il est nul et -1 si il est
ngatif),
floor dun rel renvoie sa partie entire,
round dun rel renvoie lentier le plus proche,
ceil ou ceiling dun rel renvoie sa partie entire plus un,
frac (ou fPart) dun rel renvoie sa partie fractionnaire,
trunc dun rel renvoie lentier gal au rel argument sans sa partie fractionnaire
ou le rel tronqu n dcimales,
iPart) dun rel renvoie le rel gal au rel argument sans sa partie fractionnaire,
id dsigne la fonction identit,
sq dsigne la fonction carre,
sqrt dsigne la fonction racine carre,
surd dsigne la fonction puissance n1 ,
exp dsigne la fonction exponentielle,
log ou ln dsigne la fonction logarithme nprien,

270

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

log10 dsigne la fonction logarithme base dix,


logb dsigne la fonction logarithme base donne comme deuxime argument :
logb(7,10)=log10(7)=log(7)/log(10),
alog10 dsigne la fonction anti-logarithme base dix : cest la fonction x >
10x .
sinh dsigne la fonction sinus hyperbolique,
cosh dsigne la fonction cosinus hyperbolique,
tanh dsigne la fonction tangente hyperbolique,
asinh ou arcsinh (respectivement acosh ou arccosh, atanh ou arctanh)
dsigne la fonction rciproque de sinh (respectivement cosh, tanh)
sin, cos, tan, cot, sec, csc et asin (ou arcsin),acos (ou arccos),
atan (ou arctan), acot, asec, acsc pour les fonctions trigonomtriques
et pour leurs fonctions rciproques (on se reportera la section 6.23.1 pour les
commandes les concernant). On tape :
normal(surd(8,3))
On obtient :
2
On tape :
normal(surd(-8,3))
On obtient :
-2
On tape :
normal(8^(1/3))
On obtient :
2
On tape :
simplify((-8)^(1/3))
On obtient :
(i)*sqrt(3)+1
car Xcas prend i comme dtermination de ln(1) et i/3 comme dtermination
de ln((1)1/3 )

6.17. LES FONCTIONS

6.17.3

271

Dfinition dune fonction

Dfinition dune fonction de Rp dans R


On tape pour dfinir la fonction f : (x) > x sin(x) :
f(x):=x*sin(x)
Ou on tape :
f:=x->x*sin(x)
On obtient :
(x)->x*sin(x)
On tape pour dfinir la fonction f : (x, y) > x sin(y) :
f(x,y):=x*sin(y)
Ou on tape :
f:=(x,y)->x*sin(y)
On obtient :
(x,y)->x*sin(y)
Attention ! ! ! ce qui se trouve aprs -> nest pas valu.
Dfinition dune fonction de Rp dans Rq
On tape pour dfinir la fonction h : (x, y) > (x cos(y), x sin(y)) :
h(x,y):=(x*cos(y),x*sin(y))
On tape pour dfinir la fonction h : (x, y) > [x cos(y), x sin(y)] :
h(x,y):=[x*cos(y),x*sin(y)];
Ou on tape :
h:=(x,y)->[x*cos(y),x*sin(y)];
Ou on tape :
h(x,y):={[x*cos(y),x*sin(y)]};
Ou on tape :
h:=(x,y)->return[x*cos(y),x*sin(y)];
Ou on tape
h(x,y):={return [x*cos(y),x*sin(y)];}
On obtient :
(x,y)->{return([x*cos(y),x*sin(y)]);}
Attention ! ! ! ce qui se trouve aprs -> nest pas valu.

272

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Dfinition dune fonction de Rp1 dans Rq partir dune fonction de Rp dans


Rq
On dfinit la fonction f (x, y) = x sin(y), puis on veut dfinir la famille de
fonctions dpendant du paramtre t par g(t)(y) := f (t, y).
Comme ce qui se trouve aprs -> nest pas valu, on ne peut pas dfinir g(t) par
g(t):=y->f(t,y) et on doit utiliser la commande unapply.
On tape pour dfinir les fonctions f (x, y) = x sin(y) et g(t) = y > f (t, y) :
f(x,y):=x*sin(y);g(t):=unapply(f(t,y),y)
On obtient :
((x,y)->x*sin(y), (t)->unapply(f(t,y),y))
On tape
g(2)
On obtient :
y->2 sin(y)
On tape
g(2)(1)
On obtient :
2 sin(1)
On dfinit la fonction h(x, y) = (x cos(y), x sin(y)), puis on veut dfinir la
famille de fonctions dpendant du paramtre t par k(t)(y) := h(t, y).
Comme ce qui se trouve aprs -> nest pas valu, on ne peut pas dfinir k(t) par
k(t) := y > h(x, y) et on est oblig dutiliser la commande unapply.
On tape pour dfinir la fonction h(x, y) :
h(x,y):=(x*cos(y),x*sin(y))
On tape pour dfinir la fonction k(t) :
k(t):=unapply(h(x,t),x)
On obtient :
(t)->unapply(h(x,t),x)
On tape
k(2)
On obtient :
(x)->(x*cos(2),x*sin(2))
On tape

6.17. LES FONCTIONS

273
k(2)(1)

On obtient :
(2*cos(1),2*sin(1))
Ou encore On dfinit la fonction h(x, y) = [x cos(y), x sin(y)], puis on veut
dfinir la famille de fonctions dpendant du paramtre t par k(t)(y) := h(t, y).
Comme ce qui se trouve aprs -> nest pas valu, on ne peut pas dfinir k(t) par
k(t) := y > h(x, y) et on est oblig dutiliser la commande unapply.
On tape pour dfinir la fonction h(x, y) :
h(x,y):={[x*cos(y),x*sin(y)]}
On tape pour dfinir la fonction k(t) :
k(t):=unapply(h(x,t),x)
On obtient :
(t)->unapply(h(x,t),x)
On tape
k(2)
On obtient :
(x)->{[x*cos(2),x*sin(2)];}
On tape
k(2)(1)
On obtient :
[2 cos(1),2 sin(1)]

6.17.4

Composition de fonctions : @

La composition de fonctions se fait avec Xcas grce loprateur @ qui est


infix.
On tape :
(sq@sin+id)(x)
On obtient :
(sin(x))^2+x
On tape :
(sin@sin)(pi/2)
On obtient :
sin(1)

274

6.17.5

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Puissance n-ime de composition dune fonction : @@

La puissance n-ime de composition dune fonction se fait avec Xcas grce


loprateur @@ qui est infix.
On tape :
(sin@@3)(x)
On obtient :
sin(sin(sin(x)))
On tape :
(sin@@2)(pi/2)
On obtient :
sin(1)

6.17.6

Definir une fonction avec lhistorique : as_function_of

Si on a affect une valeur la variable a et si on dfinit ensuite, dans une autre ligne
dentre, la variable b, partir de a, on utilise c:=as_function_of(b,a)
pour dfinir une fonction c vrifiant : c(a)=b.
On tape :
a:=sin(x)
On obtient :
sin(x)
On tape :
b:=sqrt(1+a^2)
On obtient :
b:=sqrt(1+sin(x)^2)
On tape :
c:=as_function_of(b,a)
c(x)
On obtient :
sqrt(1+x^2)
On tape :
a:=2
b:=1+a^2

6.17. LES FONCTIONS

275

On obtient :
b:=5
On tape :
c:=as_function_of(b,a)
On obtient :
(a)->
{ local NULL;
return(sqrt(1+a^2));
}
On tape :
c(x)
On obtient :
1+x^2
Attention
Si la variable b a t affecte plusieurs fois cest la premire affectation de b aprs
la dernire affectation de a qui compte.
On tape par exemple :
a:=2 puis
b:=2*a+1 puis
b:=3*a+2 puis
c:=as_function_of(b,a)
On obtient :
(a)-> {local NULL; return(2*a+1);}
cest dire que c(x) vaut 2*x+1.
Mais si on tape par exemple :
a:=2 puis
b:=2*a+1 puis
a:=2 puis
b:=3*a+2 puis
c:=as_function_of(b,a)
On obtient :
(a)-> {local NULL; return(3*a+2);}
cest dire que c(x) vaut 3*x+2.
Il est donc prfrable de valider la ligne ou se trouve a avant de dfinir le b qui
convient.

276

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.18

Drivation

6.18.1

Gnralits

Pour dfinir la fonction drive dune fonction on a plusieurs possibilits.


Exemple Calculer la drive de la fonction f dfinie par f (x) = sin(2x) + x.
On tape, par exemple, pour dfinr f :
f(x):=sin(2x)+x
On peut taper pour dfinr la drive g de f :
g:=f ou
g(x):=f(x) ou
g:=x->f(x)
g:=function_diff(f) ou
g(x):=function_diff(f)(x) ou
g:=x->function_diff(f)(x)
g:=unapply(diff(f(x),x),x) ou
g(x):=unapply(diff(f(x),x),x)(x) ou
g:=x->unapply(diff(f(x),x),x)(x)
g:=unapply(diff(f(x)),x) ou
g(x):=unapply(diff(f(x)),x)(x) ou
g:=x->unapply(diff(f(x)),x)(x)
g:=diff(f) ou
g(x):=diff(f)(x) ou
g:=x->diff(f)(x)
MAIS ATTENTION
g(x):=diff(f(x)) ou g(x):=diff(f(x),x) nest pas correct, car lors
dune affectation ce qui est droite de := nest pas valu lors de la dfinition....il
faut utiliser unapply ou crire g(x):=diff(f)(x).

6.18.2

Calcul du taux daccroissement : taux_accroissement

taux_accroissement calcule le taux daccroissement dune expression lorsque


la variable passe dune valeur une autre. Par dfaut la variable est gale x.
Permet dintroduire la notion de nombre driv.
On tape :
taux_accroissement(x^2,1,2)
Ou on tape :
taux_accroissement(y^2,y,1,2)
On obtient :
3
On tape :
taux_accroissement(x^2,1,1+h)
Ou on tape :

6.18. DRIVATION

277

taux_accroissement(y^2,y,1,1+h)
On obtient :
((1+h)^2-1)/(1+h-1)
Aprs simplification, on obtient :
h+2
On tape :
limit(taux_accroissement(x^2,1,1+h),h,0)
On obtient :
2

6.18.3

Fonction drive dune fonction : function_diff


fonction_derivee

function_diff a comme argument une fonction.


function_diff renvoie la fonction drive de cette fonction.
On tape :
function_diff(sin)
On obtient :
( x)->cos( x)
On tape :
function_diff(sin)(x)
On obtient :
cos(x)
On tape :
f(x):=x^2+x*cos(x)
function_diff(f)
On obtient :
( x)->2* x+cos( x)+ x*(-(sin( x)))
On tape :
function_diff(f)(x)
On obtient :
cos(x)+x*(-(sin(x)))+2*x
Attention ! ! !
Lorsquon est en mode Maple, pour des raisons de compatibilit, on peut aussi
utiliser D la place de function_diff et cest pourquoi en gomtrie on ne
pourra pas avoir dobjet gomtrique ayant comme nom D, lorsquon est en mode
Maple.

278

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.18.4

Derives et derives partielles dune expression et derives dune


fonction : diff derive deriver

Gnralits
diff ou derive ou deriver sont des fonctions prfixes alors que est la
version postfixe de diff ou derive ou deriver.
Ces fonctions ont un, deux ou plus de 2 arguments :
avec un argument qui peut tre soit une fonction, soit une expression de la
variable x.
Si cet argument est une fonction, diff ou derive ou deriver ou
renvoie la fonction drive de cette fonction.
Ces fonctions sont alors equivalentes function_diff.
Si cet argument est une expression de la variable x, diff ou derive ou
deriver ou renvoie la drive de lexpression par rapport x
Remarque Dans ce cas on peut aussi utiliser convert (ou sa version
infixe =>) avec loption diff.
avec 2 arguments qui peuvent tre soit une expression et le nom dune variable, soit une expression et une liste de noms de variables.
Cela va permettre de calculer des drives et des derives partielles du premier ordre et plusieurs arguments pour calculer des derives partielles de
tous les ordres dune expression.
avec plus que 2 arguments qui peuvent tre :
une expression et le nom des variables par rapport auxquelles il faut driver
cette expression (le nom des variables est ventuellement suivi de $n pour
indiquer le nombre n de fois que lon veut driver) ,
Derive et fonction derive
diff ou derive ou deriver ou ont comme argument soit une fonction,
soit une expression de la variable x.
Si cet argument est une fonction, diff ou derive ou deriver ou renvoie une fonction qui est la fonction drive de la fonction argument.
diff (ou derive ou deriver ou ) est alors equivalente function_diff.
On tape :
f(x):=x^2+x*cos(x)+
Pour dfinir g comme f 0 , on tape :
g:=f
Ou :
g:=(f=>diff)
Ou :
g:=diff(f)
Ou :
g:=function_diff(f)
Ou :
g:=unapply(diff(f(x),x),x)

6.18. DRIVATION

279

Ou :
g(x):=f(x)
Ou :
g(x):=(f(x)=>diff)
Ou :
g(x):=diff(f)(x))
Puis, on tape :
g(x)
On obtient :
cos(x)+x*(-(sin(x)))+2*x
Pour dfinir h comme f 00 , on tape :
h:=f
Ou :
h:=diff(diff(f))
Ou :
h:=function_diff(function_diff(f))
Ou :
h:=diff(unapply(diff(f(x),x),x))
Ou :
h(x):=diff(diff(f))(x))
Ou :
h(x):=f(x)
Puis, on tape :
h(x)
On obtient :
-sin(x)+x*(-cos(x))-sin(x)+2
Si cet argument est une expression de la variable x, diff ou derive ou
deriver ou renvoie une expression qui est lexpression de la drive de
largument par rapport x. On tape :
f(x):=x^+x*cos(x)+
Pour calculer la drive de f (x), on tape :
A:=f(x)
Ou :
A:=diff(f(x))
On obtient :
cos(x)+x*(-(sin(x)))+2*x
Ou encore :
A:=diff(f(a),a)
On obtient :
cos(a)+a*(-(sin(a)))+2*a
MAIS ATTENTION
cela ne dfinit pas une fonction car le rsultat est une expression.
g(x):=diff(f(x)) ou g(x):=diff(f(x),x) nest pas correct, car
lors dune affectation ce qui est droite de := nest pas valu lors de la dfinition....il faut utiliser unapply (g(x):=unapply(diff(f(x),x),x))

280

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


ou crire g(x):=diff(f)(x).

Derives et derives partielles dordre 1 : diff derive deriver


Pour avoir des derives partielles dordre 1 :
diff (ou derive ou deriver ou ) a deux arguments : une expression et une
variable (resp une liste contenant le nom des variables) (voir fonctions de plusieurs
variables paragraphe 6.53).
diff renvoie la drive de lexpression par rapport la variable donne comme
deuxime paramtre, trs utile pour calculer des drives partielles !) (resp renvoie
une liste contenant les drives par rapport aux variables de la liste du 2nd argument).
Exemples :
Soit calculer :
(x.y 2 .z 3 + x.y.z)
z
On tape :
(x*y ^2*z^3+x*y*z,z)
ou on tape :
diff(x*y ^2*z^3+x*y*z,z)
On obtient :
x*y^2*3*z^2+x*y
Soit calculer les 3 derives partielles premires de x y 2 z 3 + x y z.
On tape :
(x*y^2*z^3+x*y,[x,y,z])
Ou on tape :
diff(x*y^2*z^3+x*y,[x,y,z])
On obtient :
[y^2*z^3+y*z, x*2*y*z^3+x*z, x*y^2*3*z^2+x*y]
Soit calculer :
3 (x.y 2 .z 3 + x.y.z)
y 2 z
On tape :
(x*y ^2*z^3+x*y*z,y,z$2)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,y,z$2)
On obtient :
12*x*y*z
Derive et derive partielle dordre n : diff derive deriver
Lorsque derive (ou diff) a plus de deux arguments, ce sont : une expression et
le nom des variables par rapport auxquelles il faut driver cette expression (le nom
des variables est ventuellement suivi de $n pour indiquer le nombre n de fois que
lon veut driver).
diff renvoie la drive de lexpression par rapport aux variables donnes aprs le
premier paramtre (utile pour calculer des drives partielles de tous les ordres).
Donc pour driver n fois :

6.18. DRIVATION

281

diff (ou derive) a n + 1 arguments : une expression et le nom de la variable qui sera rpt n fois. Pour avoir une criture plus facile on crira plutt
le nom de la variable suivi de $n pour indiquer que lon veut driver n fois (en
effet x$3=(x,x,x)). Par exemple pour driver exp(x*y) 1 fois par rapport
x et 2 fois par rapport y, on met comme arguments lexpression, puis, les
noms des variables ventuellement suivi de $ pour indiquer le nombre de fois
que lon veut driver et on tape diff(exp(x*y),x,y$2) qui est quivalent
diff(exp(x*y),x,y,y) (en effet y$2=(y,y)).
Exemples
Soit calculer :
2 (x.y 2 .z 3 + x.y.z)
xz
On tape :
(x*y ^2*z^3+x*y*z,x,z)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,x,z)
On obtient :
y^2*3*z^2+y
Soit calculer :
3 (x.y 2 .z 3 + x.y.z)
x 2 z
On tape :
(x*y ^2*z^3+x*y*z,x,z,z)
Ou on tape :
(x*y ^2*z^3+x*y*z,x,z$2)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,x,z,z)
Ou on tape :
diff(x*y ^2*z^3+x*y*z,x,z$2)
On obtient :
6*y^2*z
Soit calculer la drive troisime de :
x2

1
+2

On tape :
(1/(x^2+2),x,x,x)
Ou on tape :
(1/(x^2+2),x$3)
Ou on tape :
diff((1)/(x^2+2),x,x,x)
Ou on tape :
diff((1)/(x^2+2),x$3)
On obtient :
(-24*x^3+48*x)/(x^8+8*x^6+24*x^4+32*x^2+16)
Remarque
Bien voir la diffrence entre diff(Xpr,x,y) et diff(Xpr,[x,y]) o Xpr
est une expression :

282

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

2 (Xpr)
et
xy
(Xpr) (Xpr)
diff(Xpr, [x, y]) renvoie [
,
]
x
y
diff(Xpr, x, y) renvoie

6.19

Intgration

6.19.1

Primitive et intgrale dfinie : integrate Int integrer


int integration

integrate (ou int) permettent de calculer une primitive ou une intgrale dfinie. La seule diffrence
entre ces deux commandes est que integrate crit
R
avec le symbole la rponse de la commande quest() qui suit lvaluation de
integrate.
Par contre Int renvoie integrate sans lvaluer : cest pour avoir la compatibilit avec Maple, lorsque lon fait un calcul numrique dintgrales :
On tape :
Int(exp(x),x,0,1))
On obtient :
integrate(exp(x),x,0,1)
On tape :
int(exp(x),x,0,1))
On obtient :
exp(1)-1)
On tape :
evalf(Int(exp(x^2),x,0,1))
Ou on tape :
evalf(int(exp(x^2),x,0,1))
On obtient :
1.46265174591
integrate (ou int ou Int) a un, deux ou quatre arguments.
avec un argument qui est une expression de la variable x, (resp une fonction).
integrate (ou int) renvoie alors une expression qui est une primitive de
lexpression par rapport la variable x (resp renvoie une fonction primitive
de la fonction donne en argument) On tape :
integrate(x^2)
On obtient :
x^3/3
On tape :

6.19. INTGRATION

283
f(t):=t^2
g:=integrate(f)

On obtient :
(t)->t^3/3
Remarque Dans ce cas on peut aussi utiliser convert (ou sa version infixe =>) avec loption int.
On tape :
f(x):=x^2
g(x):=(f(x)=>int)
ou
g:=(f=>int))
avec deux arguments qui sont :
une expression et une variable,
integrate (ou int) renvoie alors une primitive de lexpression par rapport la variable donne comme deuxime paramtre.
On tape :
integrate(x^2)
On obtient :
x^3/3
On tape :
integrate(t^2,t)
On obtient :
t^3/3
avec quatre arguments qui sont :
une expression, une variable et les bornes de lintgrale dfinie,
integrate (ou int) renvoie alors la valeur de lintgrale dfinie.
On tape :
integrate(x^2,x,1,2)
On obtient :
7/3
On tape :
integrate(1/(sin(x)+2),x,0,2*pi)
On obtient aprs simplification (appel simplify) :
2*pi*sqrt(3)/3
Exercice 1
Soit
x
x+1
f (x) = 2
+ ln(
)
x 1
x1
Calculer une primitive de f.
On tape :
int(x/(x^2-1)+ln((x+1)/(x-1)))
On trouve :
x*log((x+1)/(x-1))+log(x^2-1)+1/2*log(2*x^2/2-1)
Ou bien on dfinit la fonction f en tapant :
f(x):=x/(x^2-1)+ln((x+1)/(x-1))

284

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

puis on tape :
int(f(x))
On obtient bien sr le mme rsultat.
Attention
Pour Xcas, log est gal ln (logarithme nprien) et log10 est le logarithme
en base 10.
Exercice 2
Calculer :
Z
2
dx
6
x + 2 x4 + x2
On tape :
int(2/(x^6+2*x^4+x^2))
On trouve :
2*((3*x^2+2)/(-(2*(x^3+x)))+-3/2*atan(x))
Exercice 3
Calculer :

1
dx
sin(x) + sin(2 x)

On tape :
integrate(1/(sin(x)+sin(2*x )))
On trouve :
(1/-3*log((tan(x/2))^2-3)+1/12*log((tan(x/2))^2))*2

6.19.2

Primitive et intgrale dfinie : risch

risch calcule une primitive ou une intgrale dfinie par lalgorithme de Risch.
On tape :
risch(x^2)
On obtient :
x^3/3
On tape :
risch(x^2,x,0,1)
On obtient :
1/3
On tape :
risch(exp(-x^2))
On obtient :
R

exp(x^2) dx

ce qui signifie que exp(x2 ) na pas de primitive exprimable avec des fonctions
connues.

6.19. INTGRATION

6.19.3

285

Somme indice finie et infinie et primitive discrte : sum

sum a deux, quatre ou cinq arguments :


Avec 5 arguments sum(Xpr,Var,a,b,p) renvoie la somme demande
cest dire renvoie la somme des valeurs de lexpression Xpr quand la variable Var va de a b avec un pas gal p.
On tape :
sum(x^2+1,x,1,5,1)
Ou on tape :
sum(x^2+1,x,1,5)
Ou on tape :
sum(x^2+1,x,5,1,1)
Ou on tape :
sum(x^2+1,x,5,1,-1)
On obtient :
60
En effet :
2 + 5 + 10 + 17 + 26 = 60
On tape :
sum(x^2+1,x,1,5,2)
On obtient :
38
En effet :
2 + 10 + 26 = 38
Avec 4 ou 2 arguments, sum(Xpr,Var,a,b) ou sum(Xpr,Var=a..b)
na pas la mme valeur selon que a est plus petit ou gal b ou non, car on
veut avoir lgalit :
sum(Xpr,Var,a,b)=sum(Xpr,Var,a,c)+sum(Xpr,Var,c+1,b).
Aussi, lorsque le pas p nest pas prcis on a :
si a est infrieur b,
sum(Xpr,Var,a,b) renvoie la somme des valeurs de lexpression Xpr
quand la variable Var va de a b avec un pas de 1 : cette syntaxe est compatible avec Maple.
Ainsi si a<= b on a :
sum(Xpr,Var,a,b)=sum(Xpr,Var,a,b,1).
On tape :
sum(x^2+1,x,1,5)
Ou on tape :
sum(x^2+1,x=1..5)
On obtient :
60
En effet :
2 + 5 + 10 + 17 + 26 = 60
si a est suprieur b+1,
sum(Xpr,Var,a,b) renvoie loppos de la somme des valeurs de lexpression Xpr quand la variable Var va de b+1 a-1 avec un pas de 1 :
cette syntaxe est compatible avec Maple.

286

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On tape :
sum(x^2+1,x,5,1)
On obtient :
-32
En effet :
(5 + 10 + 17) = 32 Attention on nobtient pas la mme chose si on
prcise le pas (avec p = 1 ou p = 1)
On tape :
sum(x^2+1,x,5,1,-1)
Ou on tape :
sum(x^2+1,x,5,1,1)
On obtient :
60
Car on a :
2 + 5 + 10 + 17 + 26 = 60
On tape :
sum(x^2+1,x,4,1)
On obtient :
-15
En effet :
(5 + 10) = 15
si a est gal b+1,
sum(Xpr,Var,b+1,b) renvoie 0.
On tape :
sum(x^2+1,x,5,4)
Ou on tape :
sum(x^2+1,x=5..4)
On obtient :
0
si sum a deux arguments :
sum a comme premier argument une expression (par exemple f (x)) dune
variable (par exemple x) qui est donne comme deuxime argument.
sum renvoie la primitive discrte de cette expression, cest dire la fonction
G verifiant G(x + 1) G(x) = f (x).
On tape :
sum(x,x)
On obtient :
(x^2-x)/2
Donc :
4 + 5 + ...19 = (20^2 20)/2 (4^2 4)/2 = 190 6 = 184 On tape :
sum(1/(x*(x+1)),x)
On obtient :
-1/x
On tape :
sum(cos(p*x),p)
On obtient :
(-cos(p*x)*cos(x)+cos(p*x)-sin(p*x)*sin(x))/(2*cos(x)-2)

6.19. INTGRATION

287

Autes Exemples
On tape :
sum(k,k,2,6)
On obtient :
20
On tape :
sum(k,k,7,2)
On obtient :
-18
On tape :
sum(k,k,3,2)
On obtient :
0
On tape :
sum(1,k,-2,n)
On obtient :
n+1+2
On tape :
normal(sum(2*k-1,k,1,n))
On obtient :
n^2
On tape :
sum(1/(n^2),n,1,10)
On obtient :
1968329/1270080
On tape :
sum(1/(n^2),n,1,+(infinity))
On obtient :
pi^2/6
On tape :

288

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


sum((-1)^n/(2*n+1)!,n,0,+(infinity))

On obtient :
sin(1))
On tape :
sum(1/(3*n)!,n,0,+(infinity))
On obtient :
(2*cos((sqrt(3))/2)*exp(1/-2)+exp(1))/3
On tape :
sum(1/(n*2^n),n,1,+(infinity))
On obtient :
-(ln(1/2))
On tape :
sum((-1)^n/(2*n+1),n,0,+(infinity))
On obtient :
pi/4
On tape :
assume(x>0 && x<1);
sum(x^(2*n)/(2*n+1),n,0,+(infinity))
On obtient :
x,(-ln(-x+1)+ln(x+1))/(2*x)
On tape :
sum(1/(n^3-n),n,2,10)
On obtient :
27/110
On tape :
sum(1/(n^3-n),n,1,+(infinity))
On obtient :
1/4
Pour justifier ce rsultat on dcompose 1/(n^3 n), on tape :
partfrac(1/(n^3-n))

6.19. INTGRATION

289

On obtient :
1/(2*(n+1))-1/n+1/(2*(n-1))
Donc quand on fait la somme de 2 N on a :
N
N
1
N 2
X
X
1
1
1 X 1
1
=
=

n
n+1
2
n+1 N
n=2

n=1

N
X
n=2

n=2

1
1
= (
n1
2

N
2
X
n=0

N 2
1
1
1 X 1
) = (1 + +
)
n+1
2
2
n+1
n=2

N
N
2
X
1
1
1
1
1 X 1

= (
+
+
)
2
n+1
2
n+1 N
N +1
n=2
n=2
P 2
se
dtruisent
et il reste :
les termes N
n=2
1 1
1
1
1
1
1
1
1
+ (1 + )
+ ( +
)=
2 2
2
N
2
N
N +1
4 2N (N + 1)
dou les rsultat prcdents :
- pour N = 10 la somme vaut : 1/4 1/220 = 27/110
1
- pour N = + la somme vaut : 1/4 car
tend vers zro quand N
2N (N + 1)
tend vers linfini.

6.19.4

Somme de Riemann : sum_riemann

sum_riemann a deux arguments : une expression Xpr dpendant de deux variables et la liste des noms de ces deux variables.
sum_riemann(Xpr(n,k),[n,k])
Pn1 au voisinage de n =
Pn1 renvoie un quivalent,
Pn
+, de k=1 Xpr(n, k) ou de k=0 Xpr(n, k) ou de k=1 Xpr(n, k), lorsque
la somme considre est une somme de Riemann associe une fonction continue
sur [0,1] ou rpond quand la recherche a t infructueuse "ce nest probablement
pas une somme de Riemann" .
Exercice 1
n
X
k2
Soit Sn =
.
n3
k=1
Calculer lim Sn .
n+

On tape :
sum_riemann(k^2/n^3,[n,k])
On obtient :
1/3
car :

n
n
X
k2
1 X k2
=
n3
n
n2
k=1

k=1

est la somme de riemann associe :


Z 1
0

x2 dx =

1
3

290

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Exercice 2
n
X
k3
.
Soit Sn =
n4
k=1
Calculer lim Sn .
n+

On tape :
sum_riemann(k^3/n^4,[n,k])
On obtient :
1/4
car :

n
n
X
1 X k3
k3
=
n4
n
n3
k=1

k=1

est la somme de riemann associe :


Z 1

x3 dx =

Exercice 3
Calculer lim (
n+

On tape :

1
4

1
1
1
+
+ ... +
).
n+1 n+2
n+n
sum_riemann(1/(n+k),[n,k])

On obtient :
log(2)
car :

n
X
k=1

1X
1
1
=
n+k
n
1 + (k/n)
k=1

est la somme de riemann associe :


Z 1
1
dx = ln(1 + 1) = ln(2)
0 1+x
Exercice 4
n
X
Soit Sn =

32n3
.
16n4 k 4
k=1
Calculer lim Sn .
n+

On tape :
sum_riemann(32*n^3/(16*n^4-k^4),[n,k])
On obtient :
2*atan(1/2)+log(3)

6.19. INTGRATION

291

car :
n
X
k=1

1X
32
32n3
=
4
4
16n k
n
16 (k/n)4
k=1

est la somme de riemann associe :


Z
0

32
dx =
16 x4

Z
0

1
4
1

2
x+2 x2x +4

qui vaut donc ln(3) ln(2) + ln(2) ln(1) + 2 atan (1/2) = ln(3) + 2 atan (1/2)
Exercice 5
n
n
n
Calculer lim ( 2
+ 2
+ ... + 2
).
2
2
n+ n + 1
n +2
n + n2
On tape :
sum_riemann(n/(n^2+k^2),[n,k])
On obtient :
pi/4
car :
n

n
X

1X
1
n
=
n2 + k 2
n
1 + (k/n)2
k=1

k=1

est la somme de riemann associe :


Z

dx = atan (1) =
2
1+x
4

Exercice 6
1
1
1
Calculer lim (
+
+ ... +
).
2
2
2
2
2
n+
n +1
n +2
n + n2
On tape :
sum_riemann(1/sqrt(n^2+k^2),[n,k])
On obtient :
-ln(sqrt(2)-1)
car :
n
X
k=1

1X
1
1
p
=
2
2
n
n +k
1 + (k/n)2
k=1

est la somme de riemann associe :


Z
0

p
p

1
dx = ln(1 + 1 + 12 ln(0 + 1 + 02 = ln(1 + 2
1 + x2

292

6.19.5

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Intgration par parties : integrer_par_parties_dv ibpdv


et integrer_par_parties_u ibpu

ibpdv
ibpdv permet de chercher une primitive (ou de calculer une intgrale dfinie)
dune expression de la forme u(x).v 0 (x).
ibpdv a deux paramtres pour les primitives et cinq paramtres pour les intgrales
dfinies :
soit une expression de la forme u(x).v 0 (x) et v(x) (ou une liste de deux
expressions [F (x), u(x) v 0 (x)] et v(x)),
soit une expression de la forme g(x) et 0 (ou une liste de deux expressions
[F (x), g(x)] et 0).
pour les intgrales dfinies, il faut rajouter trois autres paramtres : le nom
de la variable et les bornes.
Lorsque ibpdv a 2 arguments ibpdv renvoie :
si v(x) 6= 0, une liste forme de u(x).v(x) et de v(x).u0 (x) (ou une liste
forme de F (x) + u(x).v(x) et de v(x).u0 (x)),
si le deuxime argument est nul, une primitive de g(x) (le premier argument)
(ou F (x)+une primitive de g(x)) :
donc, ibpdv(g(x),0) renvoie une primitive G(x) de g(x) ou
ibpdv([F(x),g(x)],0) renvoie F(x)+G(x) o diff(G(x))=g(x).
Cest dire ibpdv renvoie les termes que lon doit calculer quand on fait une
intgration par parties, en faisant ventuellement plusieurs ibpdv la suite.
Ainsi, lorsque lon vient dutiliser la commande ibpdv(u(x)*v(x),v(x)),
il reste alors calculer lintgrale du deuxime terme puis faire la somme avec le
premier terme pour obtenir une primitive de u(x).v 0 (x) : pour cela on peut utiliser
nouveau la commande ibpdv avec comme premier paramtre la liste obtenue et
comme deuxime paramtre un nouveau v(x) (ou 0 pour terminer lintgration).
On tape :
ibpdv(ln(x),x)
On obtient :
[x.ln(x),-1]
puis
ibpdv([x.ln(x),-1],0)
On obtient :
-x+x.ln(x)
Lorsque ibpdv a 5 arguments ibpdv(u(x)*v(x),v(x),x,a,b) ou
ibpdv([F(x),u(x)*v(x),v(x),x,a,b) renvoie :
si v(x) 6= 0, une liste forme de u(b).v(b)u(a).v(a) et de v(x).u0 (x) (ou
une liste forme de F (b)+u(b).v(b)F (a)u(a).v(a) et de v(x).u0 (x)),
si le deuxime argument est nul, ibpdv(g(x),0,x,a,b) renvoie G(b)
G(a) o G(x) est une primitive du premier argument g(x) et
ibpdv([F(x),g(x)],0,x,a,b) renvoie F (x)+G(b)G(a) o G(x)
est une primitive de g(x)) de faon pouvoir faire plusieurs ibpdv la
suite.

6.19. INTGRATION

293

On tape :
ibpdv(ln(x),x,x,2,3)
On obtient :
[3*ln(3)-2*ln(2),-1]
puis
ibpdv([3*ln(3)-2*ln(2),-1],0,x,2,3)
On obtient :
-1+3*ln(3)-2*ln(2)
Remarque
Lorsque le premier paramtre de ibpdv est une liste de deux lments, ibpdv
nagit que sur le dernier lment de cette liste et ajoute le terme intgr au premier
lment de la liste (de faon pouvoir faire plusieurs ibpdv la suite).
On a par exemple :
ibpdv((log(x))^2,x) = [x*(log(x))^2,-(2*log(x))]
il reste intgrer -(2*log(x)), on utilise ibpdv(ans(),x) ou on tape :
ibpdv([x*(log(x))^2,-(2*log(x))],x)
On obtient :
[x*(log(x))^2+x*(-(2*log(x))),2]
et il reste intgrer 2, on utilise ibpdv(ans(),0) :
ibpdv([x*(log(x))^2+x*(-(2*log(x))),2],0).
On obtient : x*(log(x))^2+x*(-(2*log(x)))+2*x
ibpu
ibpu permet de chercher une primitive (ou de calculer une intgrale dfinie) dune
expression de la forme u(x).v 0 (x).
ibpu a deux paramtres pour les primitives et cinq paramtres pour les intgrales
dfinies :
soit une expression de la forme u(x).v 0 (x) et u(x) (ou une liste de deux
expressions [F (x), u(x) v 0 (x)] et u(x)),
soit une expression de la forme g(x) et 0 (ou une liste de deux expressions
[F (x), g(x)] et 0).
pour les intgrales dfinies, il faut rajouter trois autres paramtres : le nom
de la variable et les bornes.
Lorsque ibpu a 2 arguments ibpu renvoie : ibpu renvoie :
si u(x) 6= 0, une liste forme de u(x).v(x) et de v(x).u0 (x) (ou une liste
forme de F (x) + u(x).v(x) et de v(x).u0 (x)),
si le deuxime argument est nul, une primitive de g(x) (le premier argument)
(ou F (x)+une primitive de g(x)) :
ibpu(g(x),0) renvoie G(x) o diff(G(x))=g(x) ou
ibpu([F(x),g(x)],0) renvoie F(x)+G(x) o diff(G(x))=g(x).

294

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

cest dire ibpu renvoie les termes que lon doit calculer quand on fait une intgration par parties, en faisant ventuellement plusieurs ibpu la suite.
Ainsi, lorsque lon vient dutiliser la commande ibpu(u(x)*v(x),u(x)), il
reste calculer lintgrale du deuxime terme puis faire la somme avec le premier terme pour obtenir une primitive de u(x).v 0 (x). Pour cela, on peut utiliser
nouveau la commande ibpu avec comme premier paramtre la liste obtenue et
comme deuxime paramtre un nouveau u(x) (ou 0 pour terminer lintgration).
On tape :
ibpu(ln(x),ln(x))
On obtient :
[x.ln(x),-1]
puis
ibpu([x.ln(x),-1],0)
On obtient :
-x+x.ln(x)

Lorsque ibpu a 5 arguments ibpu(u(x)*v(x),u(x),x,a,b) ou ibpu([F(x),u(x)*v


renvoie :
si u(x) 6= 0, une liste forme de u(b).v(b)u(a).v(a) et de v(x).u0 (x) (ou
une liste forme de F (b)+u(b).v(b)F (a)u(a).v(a) et de v(x).u0 (x)),
si le deuxime argument est nul, ibpu(g(x),0,x,a,b) renvoie G(b)
G(a) o G(x) une primitive de g(x) (le premier argument) (ou ibpu([F(x),g(x)],0,x,a,b
renvoie F (x) + G(b) G(a) o G(x) est une primitive de g(x)) de faon
pouvoir faire plusieurs ibpu la suite.
On tape :
ibpu(ln(x),ln(x),x,2,3)
On obtient :
[3*ln(3)-2*ln(2),-1]
puis
ibpu([3*ln(3)-2*ln(2),-1],0,x,2,3)
On obtient :
-1+3*ln(3)-2*ln(2)
Remarque
Lorsque le premier paramtre de ibpu est une liste de deux lments, ibpu nagit
que sur le dernier lment de cette liste et ajoute le terme intgr au premier lment de la liste (de faon pouvoir faire plusieurs ibpu la suite).
On a par exemple :
ibpu((log(x))^2,log(x)) = [x*(log(x))^2,-(2*log(x))]

6.19. INTGRATION

295

il reste intgrer -(2*log(x)), on utilise ibpu(ans(),log(x)) ou on


tape :
ibpu([x*(log(x))^2,-(2*log(x))],log(x))
On obtient :
[x*(log(x))^2+x*(-(2*log(x))),2]
et il reste intgrer 2, on utilise ibpu(ans(),0) :
ibpu([x*(log(x))^2+x*(-(2*log(x))),2],0).
On obtient : x*(log(x))^2+x*(-(2*log(x)))+2*x

6.19.6

Changement de variables : subst substituer

On se reportera la commande subst de la section 6.13.21.

6.19.7

Longueur dun arc de courbe : arcLen

arcLen a soit 1 soit quatre paramtres.


le paramtre est soit un cercle ou un arc de cercle, soit un polygone.
On tape
arcLen(cercle(0,1,0,pi/2))
On obtient :
pi/4
On tape
arcLen(hexagone(0,1))
On obtient :
6
les 4 paramtres sont :une expression expr (resp une liste de 2 expressions
[expr1, expr2]), le nom dun paramtre et deux valeurs a et b de ce paramtre.
arcLen calcule la longueur de larc de courbe dfinie par lquation y =
f (x) = expr (resp par x = expr1, y = expr2) pour les valeurs du paramtre comprises entre a et b.
On a donc arcLen(f(x),x,a,b)= :
integrate(sqrt(diff(f(x),x)^2+1),x,a,b)
ou
integrate(sqrt(diff(x(t),t)^2+diff(y(t),t)^2),t,a,b).
Exemples
Calculer la longueur de larc de cercle AB (avec A = (0, 0) et B = (0, 1))
et dangle au centre /2.
On tape
arcLen(arc(0,1,pi/2))
On obtient :
sqrt(2)*pi/4
Calculer le primtre du triangle ABC (avec A = (0, 0), B = (0, 1) et
C = (1, 1)).
On tape
arcLen(triangle(0,1,1+i))

296

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On obtient :
sqrt(2)+2
On tape
On obtient :
Calculer la longueur de larc de parabole y = x2 pour x allant de 0 x = 1.
On tape
arcLen(x^2,x,0,1)
ou
arcLen([t,t^2],t,0,1)
On obtient :
(sqrt(5))/2-ln(sqrt(5)-2)/4
Calculer la longueur de larc de la courbe y = cosh(x) pour x allant de 0
x = ln(2).
On tape :
arcLen(cosh(x),x,0,log(2))
On obtient :
3/4
Calculer la longueur de larc de cercle x = cos(t), y = sin(t) pour t allant
de 0 t = 2 .
On tape
arcLen([cos(t),sin(t)],t,0,2*pi)
On obtient :
2*pi

6.20

Maximum, minimum, tableau de valeurs et graph

6.20.1

Maximum et minimum dune expression : fMax fMin

fMax et fMin ont comme argument : une expression dune variable et le nom de
cette variable (par dfaut x).
fMax renvoie labscisse de la solution principale du maximum de lexpression.
fMin renvoie labscisse de la solution principale du minimum de lexpression.
On tape :
fMax(sin(x),x)
Ou on tape :
fMax(sin(x))
Ou on tape :
fMax(sin(y),y)
On obtient :
pi/2
On tape :

6.20. MAXIMUM, MINIMUM, TABLEAU DE VALEURS ET GRAPH

297

fMin(sin(x),x)
Ou on tape :
fMin(sin(x))
Ou on tape :
fMin(sin(y),y)
On obtient :
-pi/2
On tape :
fMin(sin(x)^2,x)
On obtient :
0

6.20.2

Tableau de valeurs et graphe : tablefunc table_fonction


et plotfunc

On peut avoir, dans le tableur, les diffrentes valeurs dune expression f (x)
pour x = x0 , x0 + h, ...., grce la commande :
tablefunc(f(x), x, x0 , h) ou tablefunc(f(x), x).
Dans ce cas les valeurs de dpart x0 et le pas h, valent par dfaut : x0 = 5.0 et
h = 1.0.
On ouvre un tableur avec Alt+t.
Puis, on slectionne une case du tableur (par exemple C0) et pour avoir une table
de "sinus", on tape, dans la ligne de commande du tableur :
tablefunc(sin(x),x)
On obtient deux colonnes x et sin(x) :
- dans la colonne x il y a la valeur du pas h (1.0) et le dpart de lvaluation
numrique (-5.0), puis une formule, par exemple =C2+C$1 qui a t recopie vers
le bas.
- dans la colonne sin(x) il y a "Tablefunc" puis une formule, par exemple
=evalf(subst(D$0,C$0,C2)), qui a t aussi recopie vers le bas.
Les valeurs de sin(x) saffichent alors en face des x correspondants.
On peut bien sr changer le pas ou la valeur de dpart ou encore remplacer sin(x)
par cos(x) en changeant la valeur de la cellule correspondante.
La reprsentation graphique se fait avec la commande :
plotfunc pour cela voir 3.7.1.

298

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.21

Limites

6.21.1

Limites : limit limite

limit permet de calculer condition dtre en radians la limite dune expression en un point fini (ou infini). En utilisant un paramtre supplementaire, on
peut indiquer si on cherche une limite par valeurs suprieures ou par valeurs infrieures (1 pour dire "par valeurs suprieures" et -1 pour dire "par valeurs infrieures").
limit a trois ou quatre arguments :
une expression, le nom de la variable (par exemple x), le point limite (par exemple
a) et un argument optionnel qui indique si la limite est unidirectionnelle ou bidirectionnelle (par dfaut 0). Cet argument est gal -1 pour une limite gauche
(x<a) ou est gal 1 pour une limite droite (x>a) ou 0 pour une limite.
Largument optionnel est donc utilis lorsque lon veut calculer une limite droite
(+1) ou une limite gauche (-1).
limit renvoie la limite demande (si elle existe !).
Remarque
On peut aussi mettre comme argument x=a la place de x,a donc : limit a aussi
comme arguments une expression dpendant dune variable, une galit (variable
=la valeur o lon veut calculer la limite) et ventuellement 1 ou -1 pour indiquer
la direction.
Autre remarque
si on tape limit((-1)^n,n=inf), alors Xcas rpond bounded_function(5)
ce qui veut dire que la fonction est borne mais quelle na pas de limite linfini.
On tape :
limit(1/x,x,0,-1)
ou
limit(1/x,x=0,-1)
On obtient :
-(infinity)
On tape :
limit(1/x,x,0,1)
ou
limit(1/x,x=0,1)
On obtient :
+(infinity)
On tape :
limit(1/x,x,0,0)
ou

6.21. LIMITES

299
limit(1/x,x,0)

ou
limit(1/x,x=0)
On obtient :
infinity
cela veut dire que abs(1/x) tend vers + quand x tend vers 0.
Exercices :
Trouver pour n > 2, la limite quand x tend vers 0 de :
n tan(x) tan(nx)
sin(nx) n sin(x)
On tape :
limit((n*tan(x)-tan(n*x))/(sin(n*x)-n*sin(x)),x=0)
On obtient :
2
Trouver la limite quand x tend vers + de :
r
q

x+ x+ x x
On tape :
limit(sqrt(x+sqrt(x+sqrt(x)))-sqrt(x),x=+infinity)
On obtient :
1/2
Trouver la limite quand x tend vers 0 de :
p
1 + x + x2 /2 exp(x/2)
(1 cos(x)) sin(x)
On tape :
limit((sqrt(1+x+x^2/2)-exp(x/2))/((1-cos(x))*sin(x)),x,0)
On obtient :
-1/6
Pour calculer quelquefois des limites plus aisment, il peut tre judicieux de
quoter le premier argument.
On tape par exemple :
limit((2*x-1)*exp(1/(x-1)),x=+infinity)
On remarquera que lon a quot ici le premier argument pour quil ne soit pas
valu cest dire pour quil ne soit pas simplifi.
On obtient :
+(infinity)

300

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.21.2

Limite et intgrale

On ne donne ici que deux exemple :


Dterminer la limite quand a tend vers linfini de :
Z
2

1
dx
x2

On tape :
limit(integrate(1/(x^2),x,2,a),a,+(infinity))
On obtient (vrifier que a est formelle sinon faire purge(a)) :
1/2
Ra 1
1
1
En effet
R a 2 x2 dx = 2 a
Donc 2 x12 dx tend vers 12 quand a tend vers linfini.
Dterminer la limite quand a tend vers linfini de :
Z

(
2

x+1
x
+ ln(
)) dx
1
x1

x2

On tape :
limit(integrate(x/(x^2-1)+log((x+1)/(x-1)),x,2,a),
a,+(infinity))
On obtient (vrifier que a est formelle sinon faire purge(a)) :
+(infinity)
En
effet
:
Ra x
dx = 12 (ln(a2 1) ln(3)) et
R2a x2 1
x+1
a+1
2 ln( x1 ) dx = ln(a + 1) + ln(a 1) + a ln( a1 ) 3 ln(3) Donc quand
a tend vers + lintgrale tend vers +.
Dterminer la limite quand a tend vers 0 de :
Z

3a

cos(x)/x dx
a

limit(int(cos(x)/x,x,a,3a),a,0)
On obtient (vrifier que a est formelle sinon faire purge(a)) :
ln(3)
Pour trouver cette limite on encadre cos(x)
car on ne connait pas la primitive
x
cos(x)
de x .
On sait que :
1 2 sin2 x2 = cos(x) 1 et
2
sin2 x2 x4 donc,
2
1 x2 = cos(x) 1 et
cos(x)
1
x
x1
x 2
x
Donc
R 3a 1: x
R 3a
R 3a
dx a x1 dx.
a ( x 2 ) dx a cos(x)/x
R 3a
ln(3) 9a2 /4 + a2 /4 a cos(x)/x dx ln(3).
R 3a
Donc a cos(x)/x dx tend vers ln(3) quand a tend vers 0.

6.22. RCRIRE DES EXPRESSIONS TRANSCENDANTES ET TRIGONOMTRIQUES301

6.22

Rcrire des expressions transcendantes et trigonomtriques

6.22.1

Dvelopper une expression transcendante et trigonomtrique :


texpand tExpand developper_transcendant

texpand ou tExpand a comme argument une expression transcendante et trigonomtrique.


texpand ou tExpand est la gnralisation de expexpand, lnexpand et
trigexpand car elle dveloppe les expressions transcendantes et trigonomtriques.
texpand ou tExpand permet, par exemple, de transformer ln(xn ) en n ln(x),
exp(x)n en exp(nx) et sin(2x) en 2 sin(x) cos(x).
texpand ou tExpand a comme argument une expression transcendante
et trigonomtrique.
Exemple :
Dvelopper exp(x + y) + cos(x + y) + ln(3x2 ).
On tape :
texpand(exp(x+y)+cos(x+y)+ln(3*x^2))
On obtient :
cos(x)*cos(y)-sin(x)*sin(y)+exp(x)*exp(y)+
ln(3)+2*ln(x)
texpand ou tExpand a comme argument une expression trigonomtrique.
texpand ou tExpand dveloppe cette expression en fonction de sin(x)
et cos(x).
Exemples
1. Dvelopper cos(x + y).
On tape :
texpand(cos(x+y))
On obtient :
cos(x)*cos(y)-sin(x)*sin(y)
2. Dvelopper cos(3x).
On tape :
texpand(cos(3*x))
On obtient :
4*(cos(x))^ 3-3*cos(x)
sin(3 x) + sin(7 x)
3. Dvelopper
.
sin(5 x)
On tape :
texpand((sin(3*x)+sin(7*x))/sin(5*x))
On obtient
(4*(cos(x))^2-1)*(sin(x)/(16*(cos(x))^412*(cos(x))^2+1))/sin(x)+(64*(cos(x))^6-

302

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


80*(cos(x))^4+24*(cos(x))^2- 1)*sin(x)/
(16*(cos(x))^4-12*(cos(x))^2+1)/sin(x)
Et, aprs une simplification en tapant normal(ans()), on obtient :
4*(cos(x))^2-2
texpand ou tExpand a comme argument une expression transcendante.
texpand ou tExpand dveloppe cette expression.
Exemples
1. Dvelopper exp(x + y).
On tape :
texpand(exp(x+y))
On obtient :
exp(x)*exp(y)
2. Dvelopper ln(x + y).
On tape :
texpand(log(x*y))
On obtient :
log(x)+log(y)
3. Dvelopper ln(xn ).
texpand(ln(x^n))
On obtient :
n*ln(x)
4. Dvelopper ln((e2 ) + exp(2 ln(2)) + exp(ln(3) + ln(2))).
On tape :
texpand(log(e^2)+exp(2*log(2))+exp(log(3)+log(2)))
On obtient :
6+3*2
Ou on tape :
texpand(log(e^2)+exp(2*log(2)))+
lncollect(exp(log(3)+log(2)))
On obtient :
12

6.23. LES EXPRESSIONS TRIGONOMTRIQUES

6.22.2

303

Rassembler les termes de mme nature : combine

combine a deux arguments : une expression Xpr et une option exp,log,ln,sin,cos,trig


le nom dune classe de fonction.
combine rassemble les termes de lexpression contenant cette fonction.
combine(Xpr,ln) ou combine(Xpr,log) donne le mme rsultat que lncollect(Xpr)
combine(Xpr,trig) ou combine(Xpr,sin) ou combine(Xpr,cos)
donne le mme rsultat que tcollect(Xpr).
On tape :
combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),exp)
On obtient :
exp(x+y)+sin(x)*cos(x)+ln(x)+ln(y)
On tape :
combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),trig)
ou
combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),sin)
ou
combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),cos)
On obtient :
exp(y)*exp(x)+(sin(2*x))/2+ln(x)+ln(y)
On tape :
combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),ln)
ou
combine(exp(x)*exp(y)+sin(x)*cos(x)+ln(x)+ln(y),log)
On obtient :
exp(x)*exp(y)+sin(x)*cos(x)+ln(x*y)

6.23

Les expressions trigonomtriques

6.23.1

Les diffrentes fonctions trigonomtriques

sin dsigne la fonction sinus,


cos dsigne la fonction cosinus,
tan dsigne la fonction tangente (tan(x)= sin(x)/cos(x)),
cot dsigne la fonction cotangente (cot(x)= cos(x)/sin(x)),
sec dsigne la fonction scante (sec(x)= 1/cos(x)),
csc dsigne la fonction coscante (csc(x) = 1/sin(x)),
asin ou arcsin, acos ou arccos, atan ou arctan, acot, asec, acsc
dsignent les fonctions rciproques des fonctions prcdentes.
On a :
asec(x) = acos(1/x),
acsc(x) = asin(1/x),
acot(x) = atan(1/x).

304

6.23.2

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Dvelopper une expression trigonomtriques : trigexpand

trigexpand a comme argument une expression trigonomtrique.


trigexpand dveloppe cette expression en fonction de sin(x) et cos(x).
On tape :
trigexpand(cos(x+y))
On obtient :
cos(x)*cos(y)-sin(x)*sin(y)

6.23.3

Linariser une expression trigonomtrique : tlin


lineariser_trigo

tlin a comme argument une expression trigonomtrique.


tlin linarise cette expression en fonction de sin(n.x) et cos(n.x).
Exemples
Linariser cos(x) cos(y).
On tape :
tlin(cos(x)*cos(y))
On obtient :
1/2*cos(x-y)+1/2*cos(x+y)
Linariser cos(x)3 .
On tape :
tlin(cos(x)^3)
On obtient :
3/4*cos(x)+1/4*cos(3*x)
Linariser 4 cos(x)2 2.
On tape :
tlin(4*cos(x)^2-2)
On obtient :
2*cos(2*x)

6.23.4

Augmenter la phase de 2 dans les expressions trigonomtriques :


shift_phase

shift_phase a comme argument une expression trigonomtrique.


shift_phase permet daugmenter la phase de 2 dans les expressions trigonomtriques une fois que la simplification automatique a eu lieu. On tape :
shift_phase(x+sin(x))
On obtient :
x-cos((pi+2*x)/2)
On tape :
shift_phase(x+cos(x))
On obtient :

6.23. LES EXPRESSIONS TRIGONOMTRIQUES

305

x-+sin((pi+2*x)/2)
On tape :
shift_phase(x+tan(x))
On obtient :
x+1/(tan((pi+2*x)/2))
Si on ne veut pas que lexpression soit value (i.e. quil ny ait pas de simplification automatique), il faut quoter largument. On tape :
shift_phase(sin(x+pi/2))
On obtient :
-(cos(pi+x))
Mais si on tape sans quoter le sinus :
shift_phase(sin(x+pi/2))
On obtient :
sin((pi+2*x)/2)
car sin(x+pi/2) est value (i.e. simplifie) en cos(x) avant que la commande shift_phase ne soit appele et ensuite shift_phase(cos(x)) renvoie sin((pi+2
*x)/2). Exercice
P
sin(nx)
Calcul de +
n=1
n
On tape :
normal(sum((sin(n*x))/n,n=1..+infinity))
On obtient :
-atan((sin(x))/(cos(x)-1))
On tape :
normal(shift_phase(halftan(atan(sin(x)/(-cos(x)+1)))))
On obtient :
pi*floor(((pi+x)/2)/pi+1/2)+(-1)/2*pi+(-1)/2*x
si on tape :
tsimplify(atan((sin(x))/(-cos(x)+1)))
On obtient car tsimplify nest pas rigoureux vis a vis des 2k :
-1/2*pi-1/2*x

6.23.5

Rassembler les sinus et les cosinus de mme angle : tcollect


tCollect rassembler_trigo

tcollect ou tCollect a comme argument une expression trigonomtrique.


tcollect linarise cette expression en fonction de sin(n.x) et cos(n.x) puis
rassemble les sinus et les cosinus de mme angle.
On tape :
tcollect(sin(x)+cos(x))

306

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
sqrt(2)*cos(x-pi/4)
On tape :
tcollect(2*sin(x)*cos(x)+cos(2*x))
On obtient :
sqrt(2)*cos(2*x-pi/4)

6.23.6

Simplifier : simplify simplifier

simplify simplifie lexpression de faon automatique.


Comme toutes simplifications automatiques, il ne faut pas sattendre des miracles
et pourtant...
On tape :
simplify((sin(3*x)+sin(7*x))/sin(5*x))
On obtient :
4*(cos(x))^2-2
Attention simplify est plus efficace quen on est en mode radian (pour cela
on coche radian dans la configuration du cas ou bien on tape angle_radian:=1).

6.23.7

Transformer les arccos en arcsin : acos2asin

acos2asin a comme argument une expression trigonomtrique.


acos2asin transforme cette expression en remplaant :

arccos(x) par arcsin(x).


2
On tape :
acos2asin(acos(x)+asin(x))
On obtient aprs simplification :
pi/2

6.23.8

Transformer les arccos en arctan : acos2atan

acos2atan a comme argument une expression trigonomtrique.


acos2atan transforme cette expression en remplaant :

x
arccos(x) par arctan(
).
2
1 x2
On tape :
acos2atan(acos(x))
On obtient :
pi/2-atan(x/sqrt(1-x^2))

6.23. LES EXPRESSIONS TRIGONOMTRIQUES

6.23.9

Transformer les arcsin en arccos : asin2acos

asin2acos a comme argument une expression trigonomtrique.


asin2acos transforme cette expression en remplaant :

arcsin(x) par arccos(x).


2
On tape :
asin2acos(acos(x)+asin(x))
On obtient aprs simplification :
pi/2

6.23.10

Transformer les arcsin en arctan : asin2atan

asin2atan a comme argument une expression trigonomtrique.


asin2atan transforme cette expression en remplaant :
x
).
arcsin(x) par arctan(
1 x2
On tape :
asin2atan(asin(x))
On obtient :
atan(x/sqrt(1-x^2))

6.23.11

Transformer les arctan en arcsin : atan2asin

atan2asin a comme argument une expression trigonomtrique.


atan2asin transforme cette expression en remplaant :
x
arctan(x) par arcsin(
).
1 + x2
On tape :
atan2asin(atan(x))
On obtient :
asin(x/sqrt(1+x^2))

6.23.12

Transformer les arctan en arccos : atan2acos

atan2acos a comme argument une expression trigonomtrique.


atan2acos transforme cette expression en remplaant :
x

arctan(x) par arccos(


).
2
1 + x2
On tape :
atan2acos(atan(x))
On obtient :
pi/2-acos(x/sqrt(1+x^2))

307

308

6.23.13

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Transformer les exponentielles complexes en sin et en cos :


sincos exp2trig

sincos ou exp2trig a comme argument une expression contenant des exponentielles complexes.
sincos ou exp2trig transforme cette expression en fonction de sin(x) et de
cos(x).
On tape :
sincos(exp(i*x))
On obtient si Variables_complex nest pas coch dans la configuration du
CAS :
cos(x)+i*sin(x)
On obtient si Variables_complex est coch dans la configuration du CAS :
exp(im(x))*(cos(re(x))+(i)*sin(re(x)))
On tape :
exp2trig(exp(-i*x))
On obtient si Variables_complex nest pas coch dans la configuration du
CAS :
cos(x)-i*sin(x)
On tape :
simplify(sincos(((i)*(exp((i)*x))^2-i)/(2*exp((i)*x))))
Ou on tape :
simplify(exp2trig(((i)*(exp((i)*x))^2-i)/(2*exp((i)*x))))
On obtient :
-sin(x)

6.23.14

Transformer tan(x) en sin(x)/cos(x) : tan2sincos

tan2sincos a comme argument une expression trigonomtrique.


tan2sincos transforme cette expression en remplaant :
sin(x)
.
tan(x) par
cos(x)
On tape :
tan2sincos(tan(2*x))
On obtient :
sin(2*x)/cos(2*x)

6.23. LES EXPRESSIONS TRIGONOMTRIQUES

6.23.15

309

Transformer sin(x) en cos(x)*tan(x) : sin2costan

sin2costan a comme argument une expression trigonomtrique.


sin2costan transforme cette expression en remplaant :
sin(x) par cos(x) tan(x).
On tape :
sin2costan(sin(2*x))
On obtient :
cos(2*x)*tan(2*x)

6.23.16

Transformer cos(x) en sin(x)/tan(x) : cos2sintan

cos2sintan a comme argument une expression trigonomtrique.


cos2sintan transforme cette expression en remplaant :
sin(x)
.
cos(x) par
tan(x)
On tape :
cos2sintan(cos(2*x))
On obtient :
sin(2*x)/tan(2*x)

6.23.17

Transformer tan(x) avec sin(2x) et cos(2x) : tan2sincos2

tan2sincos2 a comme argument une expression trigonomtrique.


tan2sincos2 transforme cette expression en remplaant :
sin(2.x)
tan(x) par
.
1 + cos(2.x)
On tape :
tan2sincos2(tan(x))
On obtient :
sin(2*x)/(1+cos(2*x))

6.23.18

Transformer tan(x) avec cos(2x) et sin(2x) : tan2cossin2

tan2cossin2 a comme argument une expression trigonomtrique.


tan2cossin2 transforme cette expression en remplaant :
1 cos(2.x)
tan(x) par
.
sin(2.x)
On tape :
tan2cossin2(tan(x))
On obtient :
(1-cos(2*x))/sin(2*x)

310

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.23.19

Transformer une expression trigonomtrique en fonction de


tan(x/2) : halftan

halftan a comme argument une expression trigonomtrique.


halftan transforme les sin(x), cos(x) et tan(x) contenus dans lexpression en
fonction de tan( x2 ).
On tape :
halftan(sin(x))
On obtient :
2*tan(x/2)/(1+tan(x/2)^2)
On tape :
halftan(sin(2*x)/(1+cos(2*x)))
On obtient :
2*tan(2*x/2)/((tan(2*x/2))^2+1)/
(1+(1-(tan(2*x/2))^2)/((tan(2*x/2))^2+1))
Et, aprs simplification avec simplify(ans()), on obtient :
tan(x)
On tape :
halftan(sin(x)^2+cos(x)^2)
On obtient :
(2*tan(x/2)/((tan(x/2))^2+1))^2+
((1-(tan(x/2))^2)/((tan(x/2))^2+1))^2
On obtient, aprs simplification avec normal(ans()) :
1

6.23.20

Transformer les expressions trigonomtriques et hyperboliques


en tan(x/2) et en exp(x) : halftan_hyp2exp

halftan_hyp2exp a comme argument une expression trigonomtrique ou hyperbolique.


halftan_hyp2exp transforme les sin(x), cos(x) et tan(x) contenus dans lexpression en fonction de tan( x2 ) et de exp(x).
On tape :
halftan_hyp2exp(tan(x)+tanh(x))
On obtient :
(2*tan(x/2))/((1-(tan(x/2))^2))+(((exp(x))^2-1))/
(((exp(x))^2+1))
On tape :
halftan_hyp2exp(sin(x)^2+cos(x)^2-sinh(x)^2+cosh(x)^2)
On obtient, aprs simplification avec normal(ans()) :
2

6.23. LES EXPRESSIONS TRIGONOMTRIQUES

6.23.21

311

Transformer avec des fonctions trigonomtriques inverses en


logarithmes : atrig2ln

atrig2ln rcrit lexpression contenant des fonctions trigonomtriques inverses


avec des logarithmes.
On tape :
atrig2ln(asin(x))
On obtient :
i*ln(x+sqrt(x^2-1))+pi/2

6.23.22

Transformer une expression trigonomtrique en des exponentielles complexes : trig2exp

trig2exp a comme argument une expression trigonomtrique.


trig2exp transforme les fonctions trigonomtriques en exponentielles complexes
SANS linariser.
On tape :
trig2exp(tan(x))
On obtient :
((exp((i)*x))^2-1)/((i)*((exp((i)*x))^2+1))
On tape :
trig2exp(sin(x))
On obtient :
(exp((i)*x)-1/(exp((i)*x)))/(2*i)

6.23.23

Simplifier en privilgiant les sinus : trigsin

trigsin a comme argument une expression trigonomtrique.


trigsin simplifie cette expression laide des formules :
sin(x)
et en privilgiant les sinus.
sin(x)2 + cos(x)2 = 1, tan(x) =
cos(x)
On tape :
trigsin(sin(x)^4+cos(x)^2+1)
On obtient :
sin(x)^4-sin(x)^2+2

312

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.23.24

Simplifier en privilgiant les cosinus : trigcos

trigcos a comme argument une expression trigonomtrique.


trigcos simplifie cette expression laide des formules :
sin(x)
sin(x)2 + cos(x)2 = 1, tan(x) =
et en privilgiant les cosinus.
cos(x)
On tape :
trigcos(sin(x)^4+cos(x)^2+1)
On obtient :
cos(x)^4-cos(x)^2+2

6.23.25

Simplifier en privilgiant les tangentes : trigtan

trigtan a comme argument une expression trigonomtrique.


trigtan simplifie cette expression laide des formules :
sin(x)
sin(x)2 + cos(x)2 = 1, tan(x) =
et en privilgiant les tangentes.
cos(x)
On tape :
trigtan(sin(x)^4+cos(x)^2+1)
On obtient :
((tan(x))^2/(1+(tan(x))^2))^2+1/(1+(tan(x)^2)+1
et aprs simplification avec normal on a :
(2*tan(x)^4+3*tan(x)^2+2)/(tan(x)^4+2*tan(x))^2+1)

6.23.26

Recriture dune expression avec diffrentes options : convert


convertir =>

=> est la version infixe de convert.


convert a deux arguments une expression et une option.
convert recrit cette expression en fonction de loption.
Voici la liste des diffrentes options :
+ convertit une expression comme si on appelait directement expand (
noter : il ne faut pas quoter + avec =>).
* convertit une expression comme si on appelait directement factor(
noter : il ne faut pas quoter * avec =>).
sin convertit une expression comme si on appelait directement trigsin.
cos convertit une expression comme si on appelait directement trigcos.
sincos convertit une expression comme si on appelait directement sincos.
trig convertit une expression comme si on appelait directement sincos.
tan convertit une expression comme si on appelait directement halftan.
exp convertit une expression comme si on appelait directement trig2exp.
ln convertit une expression comme si on appelait directement trig2exp.
expln convertit une expression comme si on appelait directement trig2exp.
string convertit une expression en une chane comme si on appelait directement string.

6.24. TRANSFORME DE FOURIER

313

list convertit un polynme en une liste(cf 6.26.28).


polynom convertit un dveloppement de Taylor ou une liste en un polynme (cf 6.26.27 et 6.26.29).
parfrac ou partfrac ou fullparfrac ou + convertit une fraction
rationnelle en lments simples comme si on utilisait directement partfrac(6.30.9).
noter : il ne faut pas quoter + avec =>.
diff calcule la drive dune expression ou dune fonction comme si on
utilisait directement diff.
int calcule lintgrale dune expression ou dune fonction comme si on
utilisait directement int.
convert permet aussi :
des changements dunit, par exemple convert(1000_g,_kg)=1.0_kg
(cf 5.1.3).
dcrire un rel selon une fraction continue : convert(a,confrac,fc)
crit a selon une fraction continue stocke dans fc. Ne pas oublier de quoter
le dernier argument ! ! ! Par exemple, convert(1.2,confrac,fc)=[1,5]
et fc contient la fraction continue gale 1.2 (cf 6.9.7).
de transformer un entier en la liste de ses chiffres dans son criture dans
une base, en commencant par le chiffre des units (et rciproquement) :
convert(n,base,b) transforme lentier n en la liste de ses chiffres
dans son criture dans la base b en commencant par le chiffre des units.
Par exemple, convert(123,base,10)=[3,2,1] et rciproquement
convert(l,base,b) transforme la liste l en lentier n qui a l pour liste
de chiffres dans son criture dans la base b en commencant par le chiffre des
units. Par exemple, convert([3,2,1],base,10)=123 (cf 6.6).

6.24

Transforme de Fourier

6.24.1

Les coefficients de Fourier : fourier_an et fourier_bn ou


fourier_cn

Si la fonction f est continue par morceaux sur R, et est priodique de priode


T , alors aux points de continuit de f on a :
f (x) = a0 +

+
X

an cos(

n=1

ou
f (x) =

2nx
2nx
) + bn sin(
)
T
T

+
X

cn e

2inx
T

n=

o les coefficients an , bn , n N , (ou cn , n Z) sont les coefficients de Fourier


de f et se calculent avec les fonctions :
fourier_an et fourier_bn ou fourier_cn.
fourier_an
fourier_an a quatre ou cinq paramtres : une expression Xpr dependant dune
variable, le nom de la variable (par exemple x), la priode T , un entier n et a (a

314

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

vaut 0 par dfaut).


fourier_an(Xpr,x,T,n,a) renvoie le coefficient de Fourier an dune fonction de variable x dfinie sur [a, a + T [ par f (x) = Xpr et priodique de priode
T.
Si f est continue par morceaux fourier_an(Xpr,x,T,n,a) renvoie an =
Z
2nx
2 a+T
f (x) cos(
)dx
T a
T
Si lon veut que les calculs soient simplifis il faut dire que n est un entier en tapant
assume(n,integer).
Exemples

Soit la fonction f , de priode T = 2, dfinie sur [; [ par f (x) = 1 +


cos(x) + sin(x).
On tape, pour avoir son coefficient a0 :
fourier_an(1+cos(x)+sin(x),x,2*pi,0,-pi)
On obtient :
1
On tape, pour avoir son coefficient a1 :
fourier_an(1+cos(x)+sin(x),x,2*pi,1,-pi)
On obtient :
1
On tape, pour avoir son coefficient an (n 6= 0 et n 6= 1) :
assume(n,integer)
fourier_bn(1+cos(x)+sin(x),x,2*pi,n,-pi)
On obtient :
0
Soit la fonction f , de priode T = 2, dfinie sur [1; 1[ par f (x) = x2 .
On tape, pour avoir son coefficient a0 :
fourier_an(x^2,x,2,0,-1)
On obtient :
1/3
On tape, pour avoir son coefficient an (n 6= 0) :
assume(n,integer)
fourier_an(x^2,x,2,n,-1)
On obtient :
4*(-1)^n/(pi^2*n^2)
fourier_bn
fourier_bn a quatre ou cinq paramtres : une expression Xpr dependant dune
variable, le nom de la variable (par exemple x), la priode T , un entier n et a (a
vaut 0 par dfaut).
fourier_bn(Xpr,x,T,n,a) renvoie le coefficient de Fourier bn dune fonction de variable x dfinie sur [a, a + T [ par f (x) = Xpr et priodique de priode
T.
Si f est continue par morceaux fourier_bn(Xpr,x,T,n,a) renvoie :
Z
2 a+T
2nx
bn =
)dx
f (x) sin(
T a
T

6.24. TRANSFORME DE FOURIER

315

Si lon veut que les calculs soient simplifis il faut dire que n est un entier en tapant
assume(n,integer).
Exemples
Soit la fonction f , de priode T = 2, dfinie sur [; [ par f (x) = 1 +
cos(x) + sin(x).
On tape, pour avoir son coefficient b1 :
fourier_bn(1+cos(x)+sin(x),x,2*pi,1,-pi)
On obtient :
1
On tape, pour avoir son coefficient bn (n 6= 1) :
assume(n,integer)
fourier_bn(1+cos(x)+sin(x),x,2*pi,n,-pi)
On obtient :
0
Soit la fonction f , de priode T = 2, dfinie sur [1; 1[ par f (x) = x2 .
On tape, pour avoir son coefficient bn (n 6= 0) :
assume(n,integer)
fourier_bn(x^2,x,2,n,-1)
On obtient :
0
Soit la fonction f , de priode T = 2, dfinie sur [1; 1[ par f (x) = x3 .
On tape, pour avoir son coefficient b1 :
fourier_bn(x^3,x,2,1,-1)
On obtient :
(2*pi^2-12)/pi^3
On tape, pour avoir son coefficient bn :
assume(n,integer)
fourier_bn(x^3,x,2,n,-1)
On obtient :
(-2*n^2*pi^2*(-1)^n+12*(-1)^n)/(n^3*pi^3)
fourier_cn
fourier_cn a quatre ou cinq paramtres : une expression Xpr, le nom de la
variable (par exemple x), la priode T , un entier n et a (a vaut 0 par dfaut).
fourier_cn(Xpr,x,T,n,a) renvoie le coefficient de Fourier cn dune fonction de variable x dfinie sur [a, a+T [ par f (x) = Xpr et priodique de priode T .
Si f (x) = Xpr est continue par morceaux sur R, fourier_cn(Xpr,x,T,n,a)
Z
2inx
1 a+T
renvoie cn =
f (x)e T dx
T a
Exemples
Soit la fonction f , de priode T = 2, dfinie sur [; [ par f (x) = 1 +
cos(x) + sin(x).
On tape, pour avoir son coefficient c0 :
fourier_cn(1+cos(x)+sin(x),x,2*pi,0,-pi)
On obtient :
1
On tape, pour avoir son coefficient c1 :

316

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


fourier_cn(1+cos(x)+sin(x),x,2*pi,1,-pi)
On obtient :
(1-i)/2
On tape, pour avoir son coefficient c1 :
fourier_cn(1+cos(x)+sin(x),x,2*pi,-1,-pi)
On obtient :
(1+i)/2
On tape, pour avoir son coefficient cn (n 6= 0 et n 6= 1) :
assume(n,integer)
fourier_cn(1+cos(x)+sin(x),x,2*pi,n,-pi)
On obtient :
0
Dterminer les coefficients cn de Fourier de la fonction f priodique de priode 2 et dfinie sur [1; 1[ par f (x) = x2 .
On tape, pour avoir c0 :
fourier_cn(x^2,x,2,0,-1)
On obtient :
1/3
On tape, pour avoir cn :
assume(n,integer)
fourier_cn(x^2,x,2,n,-1)
On obtient :
2*(-1)^n/(pi^2*n^2)
Dterminer les coefficients cn de Fourier de la fonction f priodique de priode 2 et dfinie sur [0; 2[ par f (x) = x2 .
On tape, pour avoir c0 :
fourier_cn(x^2,x,2,0)
On obtient :
4/3
On tape, pour avoir cn :
assume(n,integer)
fourier_cn(x^2,x,2,n)
On obtient :
((2*i)*pi*n+2)/(pi^2*n^2)
Dterminer les coefficients cn de Fourier de la fonction f priodique de priode 2, et dfinie sur [0; 2[ par f (x) = x2 .
On tape :
assume(n,integer)
fourier_cn(x^2,x,2*pi,n)
On obtient :
((2*i)*pi*n+2)/n^2
Si on ne met pas assume(n,integer) on obtient une expression non
simplifie :
((2*i)*pi^2*n^2*exp((-i)*n*2*pi)+2*pi*n*exp((-i)*n*2*pi)+
(-i)*exp((-i)*n*2*pi)+i)/(pi*n^3)
que lon peut simplifier en remplacant exp((-i)*n*2*pi) par 1 :
subst(ans(),exp((-i)*n*2*pi)=1)

6.24. TRANSFORME DE FOURIER

317

On obtient :
((2*i)*pi^2*n^2+2*pi*n+-i+i)/pi/n^3
expression que lon peut simplifier avec normal et on trouve finalement :
((2*i)*pi*n+2)/n^2
Il est donc prfrable dcrire assume(n,integer).
Donc si n 6= 0 on a :
2in+2
cn =
n2
Puis on tape :
fourier_cn(x^2,x,2*pi,0)
On obtient :
4*pi^2/3
Donc si n = 0 on a :
4. 2
c0 =
3
Remarque :
Lorsque lon ne veut plus considrer n comme un entier on doit taper :
purge(n).
Pour connatre les hypothses faites sur une variable, par exemple n, on tape :
about(n)

6.24.2

Transforme de Fourier discrte

Soit N un entier.
On considre une suite x priodique de priode N : elle est entirement dtermine
par la liste x = [x0 , x1 , ...xN 1 ].
La transforme de Fourier discrte est une transformation FN qui a une suite x
priodique de priode N fait correspondre une suite y, priodique de priode N ,
dfinie pour k = 0..N 1 par :
N
1
X
kj
(FN (x))k = yk =
xj N
avec N racine N -ime de lunit.
j=0

Le but est de calculer pour k = 0..N 1 :


N
1
X

kj
x j N

j=0

avec N = exp( 2i
N )
La mthode de la transforme de Fourier rapide permet de calculer rapidement ces
sommes si N est une puissance de 2.
Les proprites
La transforme de Fourier discrte FN est une transformation bijective.
On a :
FN1 = N1 FN
cest dire :
N 1
1 X
kj
(FN1 (x))k =
x j N
N
j=0

318

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Notation
Avec Xcas on a les fonctions fft et ifft qui sont :
fft(x)=FN (x) et
ifft(x)=FN1 (x)
Dfiniton
Soient deux suites x et y priodiques de priode N .
On dfinit :
- le produit de Hadamard, not , par :
(x y)k = xk yk
- le produit P
de convolution, not , par :
1
(x y)k = N
j=0 xj ykj
On a alors :
N FN (x y) = FN (x) FN (y)
FN (x y) = FN (x) FN (y)
O interviennent ces sommes ?
1. Valeur dun polynme
P 1
j
Soit un polynme P (x) = N
j=0 cj x donn par la liste de ces coefficients
[c0 , c1 , ..cN 1 ] complt par des zros pour que N soit une puissance de 2.
k
=
On veut calculer les valeurs prises par P (x) aux points ak = N
PN 1
k j
2ik
exp( N ) pour k = 0..N 1, cest dire les valeurs j=0 cj (N )
pour k = 0..N 1.
On a :
[P (a0 ), P (a1 ), ..P (aN 1 )] = FN ([c0 , c1 , ..cN 1 ])
Par exemple on tape :
P(x):=x+x^2 et w:=i
Les coefficients de P sont [0,1,1,0], = w = i, N = 4 et exp(2i/4) =
i.
On a :
fft([0,1,1,0])=[2,-1-i,0,-1+i] et donc
P(0)=2,
P(-i)=P(w^-1)=-1-i,
P(-1)=P(w^-2)=0,
P(i)=P(w^-3)=-1+i.
k =
On veut calculer les valeurs prises par P (x) aux points bk = N
P
N
1
k j
exp( 2ik
j=0 cj (N )
N ) pour k = 0..(N 1), cest dire les valeurs
pour k = 0..(N 1).
On a :
[P (a0 ), P (a1 ), ..P (a(N 1) )] = N FN1 ([c0 , c1 , ..c(N 1) ])
Par exemple on tape :
P(x):=x+x^2 et w:=i
Les coefficients de P sont [0,1,1,0], = w = i, N = 4 et exp(2i/4) =
i.
On a :
4*ifft([0,1,1,0])=[2,-1+i,0,-1-i] et donc
P(0)=2,
P(i)=P(w^1)=-1+i,

6.24. TRANSFORME DE FOURIER

319

P(-1)=P(w^2)=0,
P(-i)=P(w^3)=-1-i.
2. Interpolation trigonomtrique
Soit f une fonction 2-priodique dont on connait les valeurs en xk =
2k/N , f (xk ) = f (2k/N ) = fk pour k = 0..(N 1) avec N = 2 m.
On veut dterminer le polynme p trigonomtrique interpolateur de f aux
points 2k/N pour k = 0..(N 1), sous la forme :
P N2 1
p(x) = a0 /2 + n=0
an cos(nx) + bn sin(nx) + 1/2a N cos( N2x )
2
on suppose donc b0 = b N = 0 et on choisit cette notation pour simplifier les
2
calculs ultrieurs.
On a aussi :
P N2 1
p(x) = 1/2p N exp(iN x/2)+ n=
p exp(inx)+1/2p N exp(iN x/2).
N
+1 n
2

avec pour k = 0.. N2


pk = 1/2(ak ibk )
pk = 1/2(ak + ibk )
comme b N = 0 on a p N = p N
2
2
2
On veut dterminer les pk pour avoir :
p(xk ) = fk =
P N2 1
1/2p N exp(ik) + n=
p exp(in2k/N ) + 1/2p N exp(ik)
N
+1 n
2

puisque exp(ik) = exp(ik) = 1 et p N = p N on a


2
2
P N2 1
p(xk ) = fk = p N + n= N +1 pn exp(in2k/N )
2
P12
On transforme n= N +1 en posant j = n + N on obtient :
2
PN 1
P1
p
exp(i(j N )x)
N pn exp(inx) =
j= N jN
n=
2

puisque pour k = 0..(N 1), exp(i(j N )xk ) = exp(ijxk ),


on a :
P N2 1
P 1
p(xk ) = N
pjN exp(ijxk ) + n=0
pn exp(inxk ).
j= N
2
ou encore : N
P 2 1
P 1
p(xk ) = n=0
pn exp(inxk ) + N
p
exp(inxk ).
n= N nN
2

On pose :
pour n = 0..( N2 1), qn = pn et
pour n = N2 ..(N 1), qn = pnN .
P 1
Donc pour k = 0..(N 1), p(xk ) = N
n=0 qn exp(inxk ) = fk .
Il suffit donc de rsoudre ce systme dinconnues qn .
On a :
fk = f (2k/N ) = p(xk ) = N FN1 (q) = N ifft(q)
soit :
q = [p0 , ..p N 1 , p N , .., p1 ] = N1 FN ([f0 , ..f(N 1) ]) =
2

1
N fft([f0 , ...f(N1) ])

Remarque
Si la fonction f est relle on a :
pk = pk pour k = 1..( N2 1) et p0 et p N sont rels.
2
Donc si la fonction f est relle on a :
P N2 1
p(x) = p0 + 2 re( k=0
pk exp(ikx) + 1/2p N exp(i N2x ))
2

320

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

En rsum :
pour 0 n < N2 , pn est le n-ime lment de N1 FN ([f0 , ..f(N 1) ]) et,
pour N2 n < 0, pn est le (n+N )-ime lment de N1 FN ([f0 , ..f(N 1) ]).
3. Srie de Fourier
Soit f une fonction 2-priodique dont on connait les valeurs en xk =
2k/N , f (xk ) = f (2k/N ) = yk pour k = 0..(N 1).
On suppose que sa srie de Fourier converge simplement vers f , et on veut
connatre les coefficients cn pour N2 n < N2 .
Il fait donc
R 2calculer de faon approche :
1
cn = 2
0 f (t) exp(int)dt
Remarque
Lorsque la fonction priodique f est gale sa srie de Fourier, on a :
P
ak ibk
.
f (x) = a0 /2 +
k=1 ak cos(kx) + bk sin(kx) avec ck =
2
On calcule lintgrale donnant cn de manire approche par la mthode des
trapzes. Ici Romberg ne sert a rien, car le dveloppement dEuler Mac Laurin a ses coefficients dj nuls puisque la fonction que lon intgre est priodique et donc toutes ses drives sont gales en 0 et en 2.
Si c'
n est la valeur approche de cn obtenue par la mthode des trapzes, on
a pour N2 n < N2 :
1 2 PN 1
c'
n = 2 N
k=0 yk exp(2ink/N )
puisque xk = 2k/N et f (xk ) = yk on a
f (xk ) exp(inxk ) = yk exp(2ink/N ) et
f (0) exp(0) = f (2) exp(2inN /N ) = y0 = yN
On a donc :
1
'
'
'
[c'
0 , ..c N 1 , c N , ..c1 ] = N FN ([y0 , y1 ...y(N 1) ]) car
2

si n 0, on a c'
n = yn et
n+N
2i
N =1
n
si n < 0, on a c'
puisque N
n = yn+N si N = exp( N ), N = N
Proprits
On retrouve les coefficients du polynme interpolateur de f :
N
N
pn = c'
n pour 2 n < 2 .
P N2 1 '
Ce qui veut dire que le polynme trigonomtrique n=
N cn exp(inx) in2

terpole f (x) aux points x = 2k/N .


Donc si f est un polynme trigonomtrique P de degr m N2 :
Pm1
f (t) = P (t) =
k=m ck exp(2ikt), le polynme trigonomtrique qui
interpole f = P est P lui-mme, les coefficients approchs sont exacts
(c'
n = cn ).
On peut, plus gnralement calculer lerreur c'
n cn .
On suppose
que
f
est
gale

sa
srie
de
Fourier,
cest dire que lon a :
R +
P+
f (t) = m= cm exp(2imt) avec m= |cm | <
On a donc :
P
km
f (xk ) = f (2k/N ) = yk = +
m= cm N et
P
N 1
kn
1
c'
n = N
k=0 yk N
En remplaant
yk on obtient :
1 PN 1 P+
km kn
c'
=
n
k=0
m= cm N N
N
Or :
km kn = k(mn) et
N
N
N

6.24. TRANSFORME DE FOURIER

321

mn
puisque N
est une racine N -ime de lunit, on a :
P 1 (mn)k
(mn)N
= 0.
N
= 1 et N
k=0 N
Donc :
P 1 k(mn)
si m n est un multiple de N (m = n + l N ) on a N
= N et
k=0 N
PN 1 k(mn)
sinon k=0 N
=0
En intervertisant
les
deux
on a :
PNsommes
1 k(mn)
1 P+
c'
=
c

n
m= m
k=0
N
N
P
+
c
c'
=
n
l= (n+lN )
cest dire :
c'
n = ...cn2N + cnN + cn cn+N cn+2N + .....
Exemple :
f(t):=cos(t)+cos(2*t)
x:=f(2*k*pi/8)$(k=0..7)
On obtient
:

x = {2, ( 2)/2, 1, (( 2)/2), 0, (( 2)/2), 1, ( 2)/2}


fft(x)=[0.0,4.0,4.0,0.0,0.0,0.0,4.0,4.0]
donc en divisant par N = 8 :
c0 = 0, c1 = 4.0/8, c2 = 4.0/2, c3 = 0.0,
c4 = 0, c3 = 0, c2 = 4.0/8, = c1 = 4.0/8
donc retrouve bien :
bk = 0 et ak = ck + ck vaut 1 si k = 1, 2 et 0 sinon.
4. Produit de convolution
Pm1
P
j
j
Soient deux polynmes P (x) = n1
j=0 bj x donn
j=0 aj x et Q(x) =
par la liste de leurs coefficients a = [a0 , a1 , ..an1 ] et b = [b0 , b1 , ..bm1 ].
On veut calculer le produit de ces deux polynmes cest dire le produit de
convolution de leurs coefficients si on se place dans lensemble des suites
priodiques de priode suprieure ou gale (n + m) en compltant a (resp
b) par m+? (resp n+?) zros (en pratique on choisit ? pour que n + m+?
soit une puissance de 2).
On alors pour P
a = [a0 , a1 , ..an1 , 0..0] et b = [b0 , b1 , ..bm1 , 0..0] :
P (x)Q(x) = n+m1
(a b)j xj
j=0
On calcule donc :
Fn (a), Fn (b), Fn1 (Fn (a) Fn (b)) et puisque
nFn (x y) = Fn (x) Fn (y)
Fn (x y) = Fn (x) Fn (y)
on a :
a b = Fn1 (Fn (a) Fn (b))

6.24.3

La transforme de Fourier rapide : fft

fft a comme argument une liste (ou une squence) [a0 , ..aN1 ] o N est une puissance de deux.
fft renvoie la liste [b0 , ..bN1 ] tel que pour k=0..N-1 on ait :
N1
X
kj
fft([a0 , ..aN1 ])[k] = bk =
xj N
avec N racine N -ime de lunit.
j=0

On tape :
fft(0,1,1,0)

322

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[2.0, -1-i, 0.0, -1+i]
On peut aussi travailler sur un corps fini Z/pZ, en indiquant une racine N ime primitive de lunit en 2ime argument et p en 3ime argument de fft. Par
exemple on verifie que 22798 est une racine primitive dordre 128 de 1 modulo
35969. Par exemple, calculons par FFT le carr dun polynme coefficients entiers alatoire infrieur 10, de degr 60, reprsent par la liste de ses coefficients
par ordre croissant complt par des 0 pour avoir une liste de taille N = 128 :
P:=poly1[op(ranm(1,60,10)[0]),0$68];
p:=fft(P,22798,35969)
il suffit maintenant de calculer le produit terme terme de p avec lui-mme et den
calculer la FFT inverse
Q:=ifft(p .* p,22798,35969)

6.24.4

Linverse de la transforme de Fourier rapide : ifft

ifft a comme argument une liste [b0 , ..bN1 ] (ou une squence) o N est une
puissance de deux.
ifft renvoie la liste [a0 , ..aN1 ] tel que :
fft([a0 , ..aN1 ]) = [b0 , ..bN1 ].
On tape :
ifft([2,-1-i,0,-1+i])
On obtient :
[0.0, 1.0, 1.0, 0.0]
Comme pour la fft, on peut travailler sur un corps fini en indiquant une racine
N -ime primitive de lunit en 2ime argument et p en 3ime argument de ifft.

6.24.5

Un exercice utilisant fft

Voici un relev des tempratures T , en degr Celsius, au temps t :


t
0
3
6
9 12 15 19 21
T 11 10 17 24 32 26 23 19
Quelle est la temprature 13h45 ?
On a N = 8 = 2 m.
Le polynme dinterpolation est :
P
p(t) = 1/2pm (exp(2imt/24)+exp(2imt/24))+ m1
k=m+1 pk exp(2ikt/24)
PN 1
et on a pk = 1/N k=j Tk exp(2ik/N )
On tape :
q:=1/8*fft([11,10,17,24,32,26,23,19])
On obtient :
[20,-4.5+1.7*i,0.37+0.88*i,-0.77+0.22*i,0.5,
-0.77-0.22*i,0.38-0.88*i,-4.5-1.7*i]
ou avec plus de dcimales :

6.25. LES EXPONENTIELLES ET LES LOGARITHMES

323

p0 = 20.25,
p1 = 4.48115530061 + 1.72227182413 i = p1 ,
p2 = 0.375 + 0.875 i = p2 ,
p3 = 0.768844699385 + 0.222271824132 i = p3 ,
p4 = 0.5 car on a :
q = [q0 , ...qN 1 ] = [p0 , ..p N 1 , p N , .., p1 ] = N1 FN ([y0 , ..yN 1 ]) = 1N fft(y)
2
2
On calcule la valeur T 0 du polynme dinterpolation au point t0 = 13, 75 =
13 + 3/4 = 55/4.
On a :
q:=[20.25,-4.48115530061+1.72227182413*i,-0.375+0.875*i,
-0.768844699385+0.222271824132*i,0.5,
-0.768844699385-0.222271824132*i,
-0.375-0.875*i,-4.48115530061-1.72227182413*i]
On pose :
pp:=[q[4],q[5],q[6],q[7],q[0],q[1],q[2],q[3]]
On a pk = pp[k + 4] pour k = 4...3
On tape :
t0(j):=exp(2*i*pi*(13+3/4)/24*j)
T0:=1/2*pp[0]*(t0(4)+t0(-4))+sum(pp[j+4]*t0(j),j,-3,3)
evalf(sincos(T0))
On obtient :
29.4863181684
On prvoit donc une temprature de 29.49 degrs Celsius.
On tape :
q1:=[q[4]/2,q[3],q[2],q[1],q[0]/2]
a:=t0(1) (ou a:=-exp(i*pi*7/48))
g(x):=r2e(q1,x)
evalf(2*re(g(a)))
ou encore
2.0*re(q[0]/2+q[1]*t0(1)+q[2]*t0(2)+q[3]*t0(3)+q[4]/2*t0(4))
On obtient :
29.4863181684
Remarque
Si on utilise le polynme dinterpolation de Lagrange (on interpole par un polynme non priodique).
On tape :
l1:=[0,3,6,9,12,15,18,21]
l2:=[11,10,17,24,32,26,23,19]
subst(lagrange(l1,l2,13+3/4),x=13+3/4)
On obtient :
8632428959
' 30.1144061688
286654464

6.25

Les Exponentielles et les Logarithmes

6.25.1

Transformer les fonctions hyperboliques en exponentielles : hyp2exp

hyp2exp a comme argument an hyperbolic expression.


hyp2exp transforme les hyperbolic fonctions hyperboliques en exponentielles

324

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

SANS linariser.
On tape :

hyp2exp(sinh(x))
On obtient :
(exp(x)-1/(exp(x)))/2

6.25.2

Dvelopper les exponentielles : expexpand

expexpand a comme argument une expression contenant des exponentielles.


expexpand dveloppe cette expression.
On tape :
expexpand(exp(3*x))
On obtient :
exp(x)^3
On tape :
expexpand(exp(3*x)+exp(2*x+2))
On obtient :
exp(x)^3+exp(x)^2*exp(2)

6.25.3

Dvelopper les logarithmes : lnexpand

lnexpand a comme argument une expression contenant des logarithmes.


lnexpand dveloppe cette expression.
On tape :
lnexpand(ln(3*x^2)+ln(2*x+2))
On obtient :
ln(3)+2*ln(x)+ln(2)+ln(x+1)

6.25.4

Linariser les exponentielles : lin lineariser

lin ou lineariser a comme argument une expression contenant des exponentielles.


lin ou lineariser linarise cette expression (lexprime en fonction de exp(n.x)).
Exemples
On tape :
lin(sinh(x)^2)
On obtient :
1/4*exp(2*x)+1/-2+1/4*exp(-(2*x))
On tape :
lin((exp(x)+1)^3)
On obtient :
exp(3*x)+3*exp(2*x)+3*exp(x)+1

6.25. LES EXPONENTIELLES ET LES LOGARITHMES

6.25.5

325

Regrouper les log : lncollect

lncollect a comme argument une expression contenant des logarithmes.


lncollect regroupe les termes en logarithmes. Il est donc prfrable de lutiliser
sur une expression factorise (en utilisant factor).
On tape :
lncollect(ln(x+1)+ln(x-1))
On obtient :
ln((x+1)*(x-1))
On tape :
lncollect(exp(ln(x+1)+ln(x-1)))
On obtient :
(x+1)*(x-1)
Attention ! ! ! Pour CAS, log=ln

6.25.6

Transformer une puissance en produit de puissances :


powexpand

powexpand permet de transformer une puissance en un produit de puissances.


On tape :
powexpand(a^(x+y))
On obtient :
a^x*a^y

6.25.7

Transformer une puissance en une exponentielle : pow2exp

pow2exp permet de transformer une puissance en exponentielle.


On tape :
pow2exp(a^(x+y))
On obtient :
exp((x+y)*ln(a))

6.25.8

Transformer exp(n*ln(x)) en puissance : exp2pow

exp2pow permet de transformer une expression de la forme exp(nln(x)) en une


puissance de x.
On tape :
exp2pow(exp(n*ln(x)))
On obtient :

326

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


x^n

Bien voir la diffrence avec lncollect :


lncollect(exp(n*ln(x))) = exp(n*ln(x))
lncollect(exp(2*ln(x))) = exp(2*ln(x))
exp2pow(exp(2*ln(x)))= x^2
Mais :
lncollect(exp(ln(x)+ln(x))) = x^2
exp2pow(exp(ln(x)+ln(x))) = x^(1+1)

6.25.9

crire avec des exponentielles complexes : tsimplify

tsimplify simplifie toutes les expressions en les transformant en exponentielles


complexes.
On nutilise tsimplify quen dernier ressort.
On tape :
tsimplify((sin(7*x)+sin(3*x))/sin(5*x))
On obtient :
((exp((i)*x))^4+1)/(exp((i)*x))^2

6.26

Les polynmes

6.26.1

Les polynmes une variable poly1[...]

Un polynme dune variable peut tre reprsent, soit par la liste de ses coefficients selon les puissances dcroissantes (on utilise comme dlimiteurs poly1[...]
en particulier lorsquil peut y avoir confusion avec un vecteur), soit par son expression symbolique. Dans les rponses affiches par un diteur dquations, le rsultat
est parenths avec [] et [] pour indiquer quil sagit de la liste de coefficients
dun polynme, lorsquon effectue une copie, cest poly1[...] qui saffiche.
Attention Lcriture est toujours selon les puissances dcroissantes mme si on
a coch puissance croissante dans la configuration du cas (puissance
croissante ne sapplique quaux expressions symboliques).

6.26.2

Les polynmes plusieurs variables

Un monme de plusieurs variables peut tre reprsent :


soit par son expression symbolique (par exemple 3x2 y),
soit par son coefficent et la liste des puissances de ses variables (selon la liste
de ses variables) que lon parenthse avec %%%{ et %%%} : cest le format
interne creux distribu : par exemple symb2poly(3x^2*y,[x,y]) renvoie %%%{3,[2,1]%%%} qui reprsente 3x2 y si la liste des variables est
[x,y],
soit par la liste des coefficients de la premire variable, coefficients qui sont
eux-mmes des polynmes qui seront donns sous la forme la liste des coefficients de la deuxime variable etc... et que lon parenthse avec [],[] :
cest le format interne dense rcursif : par exemple symb2poly(3x^2*y,x,y)
renvoie [][]3,0[],0,0[] qui reprsente 3x2 y si les variables sont x,y.

6.26. LES POLYNMES

327

Un polynme de plusieurs variables est reprsent par la somme de ses monmes.

6.26.3

Transformer le format interne dense rcursif en une criture


polynmiale : poly2symb r2e

r2e ou poly2symb a comme argument la liste des coefficients par puissances


dcroissantes dun polynme et un nom de variable formelle (par dfaut x) (resp
la liste rcursive (cest le format interne dense rcursif) des coefficients par puissances dcroissantes dun polynme et la squence des variables formelles tel que
x,y,z (par exemple [][[1,0],[2,3]],[][]4,0[],5[][] reprsente le polynme
x(yz + 2z + 3) + 4yz + 5) car [],[] sert de parenthsages)
On tape :
r2e([1,0,-1],x)
Ou on tape :
r2e([1,0,-1])
Ou on tape :
poly2symb([1,0,-1],x)
On obtient :
x*x-1
Ou on peut aussi taper :
r2e(%%%{1,[2]%%%}+%%%{-1,[0]%%%},[x])
On obtient :
x^2-1
On tape :
r2e([1,0,-1],x)
Ou on tape :
r2e([1,0,-1])
Ou on tape :
poly2symb([1,0,-1],x)
On obtient :
x*x-1
On tape :
normal(poly2symb([[[1,0],[2,3]],[[4,0],5]],x,y,z))
Ou on tape :

328

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


normal(r2e([[[1,0],[2,3]],[[4,0],5]],x,y,z))

On obtient :
x*y*z+2*x*z+3*x+4*y*z+5
Remarque
Si en deuxime argument on met une valeur a (resp a, b, c), on obtient la valeur du
polynme en x = a (resp en x = a, y = b et z = c).
On tape :
poly2symb([[[1,0],[2,3]],[[4,0],5]],1,1,1)
On obtient car 1 + 2 + 3 + 4 + 5 = 15 :
15

6.26.4

Transformer le format interne creux distribu du polynme en


une criture polynmiale : poly2symb r2e

r2e ou poly2symb a comme argument la liste des coefficients par puissances


dcroissantes dun polynme et un nom de variable formelle (par dfaut x) (resp
le format interne creux distribu du polynme cest dire la somme de monmes
tels que : %%%{c,[px,py,pz] %%%} et une liste de variables formelles tel que
[x,y,z] ce qui reprsente le monme cxpx y py z pz ).
r2e ou poly2symb transforme la liste des coefficients par puissances dcroissantes dun polynme (resp la somme de %%%{c,[px,py,pz] %%%}), en son
criture polynmiale (selon Horner), en utilisant le nom de la variable donn en
deuxime argument (resp en utilisant la liste de variables donn en deuxime argument [x,y,z]).
On tape :
r2e([1,0,-1],x)
Ou on tape :
r2e([1,0,-1])
Ou on tape :
poly2symb([1,0,-1],x)
On obtient :
x*x-1
Ou on peut aussi taper :
r2e(%%%{1,[2]%%%}+%%%{-1,[0]%%%},[x])
On obtient :
x^2-1
On tape :

6.26. LES POLYNMES

329

r2e(%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+%%%{2,[0,1]%%%},[x,y])
Ou on tape :
poly2symb(%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+
%%%{2,[0,1]%%%},[x,y])
On obtient :
x^2-x*y+2*y
Remarque
Si en deuxime argument on met une valeur a (resp [a, b]), on obtient la valeur du
polynme en x = a (resp en x = a et y = b).
On tape :
poly2symb([1,0,-1],3)
On obtient car 32 1 = 8 :
8
On tape :
poly2symb(%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+
%%%{2,[0,1]%%%},[1,2])
On obtient :
1-1*2+2*2

6.26.5

Transformer un polynme en une liste (format interne rcursif


dense) : symb2poly e2r

e2r ou symb2poly a comme argument polynme, donn avec une criture polynmiale, dune variable (resp plusieurs variables), et le nom de cette variable
formelle (par dfaut x) (resp la squence des noms de ces variables).
e2r ou symb2poly transforme cette criture polynmiale, en la liste des coefficients selon les puissances dcroissantes selon le nom de la variable donn en
deuxime argument (resp lcriture rcursive de la liste des coefficients selon les
puissances dcroissantes selon les noms des variables donns en deuxime argument : le rsultat est la liste des coefficients de la premire variable, coefficients
qui sont eux-mmes des polynmes qui seront donns sous la forme la liste des
coefficients de la deuxime variable etc...).
Attention Si le deuxime argument est une liste, le rsultat est lcriture du polynme au format interne.
On tape :
e2r(x^2-1)
Ou on tape :
symb2poly(x^2-1)

330

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Ou on tape :
symb2poly(x^2-1,x)
Ou on tape :
e2r(x^2-1,x)
Ou on tape :
symb2poly(y^2-1,y)
Ou on tape :
e2r(y^2-1,y)
On obtient :
[]1,0,-1[]
On tape :
symb2poly(x*y^2+2y-1,x)
Ou on tape :
e2r(x*y^2+2y-1,x)
On obtient :
[]y^2,2y-1[]
On tape :
symb2poly(x*y^2+2y-1,y)
Ou on tape :
e2r(x*y^2+2y-1,y)
On obtient :
[]x,2,-1[]
On tape :
symb2poly(x*y^2+2y-1,x,y)
Ou on tape :
e2r(x*y^2+2y-1,x,y)
On obtient :
[][]1,0,0[],[]2,-1[][]
ce qui signifie que le polynme est de degr 1 en x que le coeff de x est le polynme
en y de coefficients [1,0,0] cest dire y 2 et que le terme constant est le polynme
en y de coefficients [2,-1] cest dire 2y 1.
On tape :

6.26. LES POLYNMES

331

symb2poly(x^2*y^2-x^2+2x*y+4y^2-y+3,x,y)
Ou on tape :
e2r(x^2*y^2-x^2+2x*y+4y^2-y+3,x,y)
On obtient :
[]1,0,-1[],[]2,0[],[]4,-1,3[][]
ce qui signifie que le polynme est de degr 2 en x que le coeff de x2 est le polynme en y de coefficients []1,0,-1[] cest dire y 2 1, le coeff de x est le
polynme en y de coefficients []2,0[] cest dire 2y et que le terme constant est
le polynme en y de coefficients []4,-1,3[] cest dire 4y 2 y + 3.

6.26.6

Transformer un polynme au format interne : e2r symb2poly

e2r ou symb2poly a comme argument polynme dune ou plusieurs variables,


donn avec une criture polynmiale et la liste de ces variables formelles.
e2r ou symb2poly transforme cette criture polynmiale, en lcriture au format interne selon la liste de variables donne en deuxime argument.
Attention Si le deuxime argument nest pas une liste, le rsultat est la liste des coefficients de la premire variable, coefficients qui sont eux-mmes des polynmes
qui seront donns sous la forme la liste des coefficients de la deuxime variable
etc...
On tape :
e2r(x^2-1,[x])
Ou on tape :
symb2poly(x^2-1,[x])
On obtient :
%%%{1,[2]%%%}+%%%{-1,[0]%%%}
On tape :
e2r(x^2-x*y+y, [x,y])
Ou on tape :
symb2poly(x^2-x*y+2*y, [x,y])
On obtient :
%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+%%%{2,[0,1]%%%}
ce qui signifie que le coefficient du terme x2 y 0 est 1, celui du terme x1 y 1 est -1 et
celui du terme x0 y 1 est 2.
On tape :
symb2poly(x^2*y^2-x^2+2x*y+4y^2-y+3,[x,y])
Ou on tape :
e2r(x^2*y^2-x^2+2x*y+4y^2-y+3,x,y)
On obtient :
%%%{1,[2,2]%%%}+%%%{-1,[2,0]%%%}+%%%{2,[1,1]%%%}+
%%%{4,[0,2]%%%}+%%%{-1,[0,1]%%%}+%%%{3,[0,0]%%%}

332

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.26.7

Transformer un polynme au format interne en une liste et rciproquement : convert

Si convert a comme premier argument un polynme donn a u format interne


et comme deuxime argument loption list alors convert transforme le polynme en une liste (loption list peut tre omis).
Si convert a comme premier argument une liste et comme deuxime argument
loption polynom alors convert transforme la liste en un polynme au format
interne.
On tape :
p:=symb2poly(x^2-x*y+2y, [x,y])
On obtient :
%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+%%%{2,[0,1]%%%}
On tape :
l:=convert(p,list)
Ou on tape :
convert(p)
On obtient :
[[1,[2,0]],[-1,[1,1]],[2,[0,1]]]
ce qui est la liste des coefficients suivi de la liste des exposants.
On tape :
convert(l,polynom)
On obtient :
%%%{1,[2,0]%%%}+%%%{-1,[1,1]%%%}+%%%{2,[0,1]%%%}

6.26.8

Coefficients dun polynme : coeff coeffs

coeff ou coeffs a trois arguments : le polynme, le nom de la variable (ou la


liste des noms des variables) le degr (ou la liste des degrs des variables).
coeff ou coeffs renvoie le coefficient du polynme de degr spcifi.
On tape :
coeff(-x^4+3*x*y^2+x,x,1)
On obtient :
3*y^2+1
On tape :
coeff(-x^4+3x*y^2+x,y,2)
On obtient :

6.26. LES POLYNMES

333
3*x

On tape :
coeff(-x^4+3x*y^2+x,[x,y],[1,2])
On obtient :
3

6.26.9

Degr dun polynme : degree

degree a comme argument un polynme donn sous forme symbolique ou par la


liste de ses coefficients.
degree renvoie le degr de ce polynme (degr du monme de plus grand degr).
On tape :
degree(x^3+x)
On obtient :
3
On tape :
degree([1,0,1,0])
On obtient :
3

6.26.10

Valuation dun polynme : valuation ldegree

valuation ou ldegre a comme argument un polynme donn sous forme symbolique ou par la liste de ses coefficients.
valuation ou ldegre renvoie la valuation de ce polynme, cest le degr du
monme de plus petit degr (ldegree=low degree).
On tape :
valuation(x^3+x)
On obtient :
1
On tape :
valuation([1,0,1,0])
On obtient :
1

334

6.26.11

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Coefficient du terme de plus haut degr dun polynme : lcoeff

lcoeff a comme argument un polynme donn sous forme symbolique ou par la


liste de ses coefficients.
lcoeff renvoie le coefficient de plus haut degr de ce polynme (lcoeff=leading
coefficient).
On tape :
lcoeff([2,1,-1,0])
On obtient :
2
On tape :
lcoeff(3*x^2+5*x,x)
On obtient :
3
On tape :
lcoeff(3*x^2+5*x*y^2,y)
On obtient :
5*x

6.26.12

Coefficient du terme de plus bas degr dun polynme : tcoeff

tcoeff a comme argument un polynme donn sous forme symbolique ou par la


liste de ses coefficients.
tcoeff renvoie le coefficient de plus bas degr de ce polynme (tcoeff=trailing
coefficient).
On tape :
tcoeff([2,1,-1,0])
On obtient :
-1
On tape :
tcoeff(3*x^2+5*x,x)
On obtient :
5
On tape :
tcoeff(3*x^2+5*x*y^2,y)
On obtient :
3*x^2

6.26. LES POLYNMES

6.26.13

335

valuation dun polynme : peval polyEval

peval ou polyEval a comme argument un polynme p donn par la liste de


ses coefficients et un rel a.
peval ou polyEval renvoie la valeur numrique ou exacte de p(a).
On tape :
peval([1,0,-1],sqrt(2))
On obtient :
sqrt(2)*sqrt(2)-1
Puis :
normal(sqrt(2)*sqrt(2)-1)
On obtient :
1
On tape :
peval([1,0,-1],1.4)
On obtient :
0.96

6.26.14

Mise en facteur de xn dans un polynme : factor_xn

factor_xn a comme argument un polynme P.


factor_xn renvoie le polynme P dans lequel on a mis en facteur xn o n est le
degr de P (n=degree(P)).
On tape :
factor_xn(-x^4+3)
On obtient :
x^4*(-1+3*x^-4)

6.26.15

PGCD des coefficients dun polynme : content

content a comme arguments un polynme P donn sous forme symbolique ou


par la liste de ses coefficients et le nom de la variable (par dfaut cest x).
content dsigne le PGCD (plus grand commun diviseur) des coefficients du polynme P.
On tape :
content(6*x^2-3*x+9)
ou on tape :
content(6*t^2-3*t+9,t)

336

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
3
ou on tape :
content([6,-3,9]))
On obtient :
poly1[3]
On tape :
content(6*x^2*(y^3-y)-3*x*(y^3-1)+9*(y-1))
On obtient :
3*y-3
ou on tape :
content([6*(y^3-y),-3*(y^3-1),9*(y-1)])
On obtient :
poly1[3*y-3]
On tape :
content(6*x^2*(y^3-y)-3*x*(y^3-1)+9*(y-1),y)
ou :
content([3x,0,6*x^2+9,-9-3x])
On obtient :
3

6.26.16

Partie primitive dun polynme : primpart

primpart a comme argument un polynme P donn sous forme symbolique ou


par la liste de ses coefficients.
primpart renvoie le polynme P divis par le PGCD (plus grand commun diviseur) de ses coefficients.
On tape :
primpart(6x^2-3x+9)
ou :
primpart([6,-3,9],x))
On obtient :
2*x^2-x+3

6.26. LES POLYNMES

6.26.17

337

Factorisation sur les entiers : collect

collect a comme paramtre un polynme ou une liste de polynmes et ventuellement sqrt(n).


collect factorise le polynme (ou les polynmes de la p
liste) sur les entiers
(n)), si les coeffilorsque les coefficients du polynme
sont
entiers
ou
sur
Q(
p
cients du polynme sont dans Q( (n)) ou si sqrt(n) est le second argument.
. Exemples :
Factoriser sur les entiers :
x2 4
On tape :
collect(x^2-4)
On trouve en mode rel :
(x-2)*(x+2)
Factoriser sur les entiers :
x2 + 4
On tape :
collect(x^2+4)
On obtient en mode rel :
x^2+4
On obtient en mode complexe :
(x+2*i)*(x-2*i)
Factoriser sur les entiers :
x2 2
On tape :
collect(x^2-2)
On obtient :
x^2-2
Mais si on tape :
collect(sqrt(2)*(x^2-2))
On obtient :
sqrt(2)*(x-sqrt(2))*(x+sqrt(2))
Factorier sur les entiers :
x3 2x2 + 1etx2 x
On tape :
collect([x^3-2*x^2+1,x^2-x])
On obtient :
[(x-1)*(x^2-x-1),x*(x-1)]
Mais si on tape :
collect((x^3-2*x^2+1)*sqrt(5))
On obtient :
sqrt(5)*(x+(-(sqrt(5))-1)/2)*(x-1)*(x+(sqrt(5)-1)/2)
Ou si on tape :
collect(x^3-2*x^2+1,sqrt(5))

338

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On obtient :
(x+(-(sqrt(5))-1)/2)*(x-1)*(x+(sqrt(5)-1)/2)

6.26.18

Factorisation : factor factoriser

factor a pour argument un polynme ou une liste de polynmes et ventuellement sqrt(n).


factor factorise le polynme ou la liste de polynmes sur les rels en mode rel
et sur
p les complexes en mode complexe Les coefficients des facteurs sont dans
Q( (n)) si Sqrt est coch dans la configuration du cas ou si sqrt(n) est le
second argument (voir aussi 6.13.11).
Note pour tre en mode rel (ou complexe) dcochez (ou cochez) Complexe
dans la configuration du cas que lon ouvre avec le bouton donnant la ligne dtat.
On tape :
factor(x^2+2*x+1)
On obtient :
(x+1)^2
On tape :
factor(x^4-2*x^2+1)
On obtient :
(-x+1)^2*(x+1)^2
On tape :
factor(x^ 3-2*x^2+1)
On obtient si Sqrt nest pas coch dans la configuration du cas :
(x-1)*(x^2-x-1)
On tape :
factor(x^ 3-2*x^2+1)
On obtient si Sqrt est coch dans la configuration du cas :
(x-1)*(x+(sqrt(5)+1)/2)*(x+(-sqrt(5)+1)/2)
On tape :
factor(x^ 3-2*x^2+1,sqrt(5))
On obtient si Sqrt est coch ou non dans la configuration du cas :

((2*sqrt(5)-19)*((sqrt(5)+15)*x+7*sqrt(5)-5)*(-x+1)*((sqrt(5)+25)*x-13
On tape :
factor(x^2+1)
On obtient en mode rel :
x^2+1
On obtient en mode complexe :
((-i)*x+1)*((i)*x+1)

6.26. LES POLYNMES

6.26.19

339

Factorisation sans facteur carr : sqrfree

sqrfree a comme paramtre un polynme.


sqrfree factorise ce polynme en regroupant les termes ayant mme exposant.
On tape :
sqrfree((x^2-1)*(x-1)*(x+2))
On obtient :
(x^2+3*x+2)*(x-1)^2
On tape :
sqrfree((x^2-1)^2*(x-1)*(x+2)^2)
On obtient :
(x^2+3*x+2)*(x-1)^3

6.26.20

Liste des facteurs dun polynme : factors

factors a pour argument un polynme ou une liste de polynmes.


factors donne la liste des facteurs du polynme avec leur multiplicit.
On tape :
factors(x^2+2*x+1)
On obtient :
[x+1,2]
On tape :
factors(x^4-2*x^2+1)
On obtient :
[x-1,2,x+1,2]
On tape :
factors([x^3-2*x^2+1,x^2-x])
On obtient :
[[x-1,1,x^2-x-1,1],[x,1,x-1,1]]
On tape :
factors([x^2,x^2-1])
On obtient :
[[x,2],[x+1,1,x-1,1]]

340

6.26.21

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

valuer un polynme : horner

horner a deux paramtres : un polynme P donn sous forme symbolique ou par


la liste de ses coefficients et un nombre a.
horner renvoie P(a) calcul par la mthode de Hrner.
On tape :
horner(x^2-2*x+1,2)
ou :
horner([1,-2,1],2)
On obtient :
1
On peut mettre un troisime argument optionnel pour indiquer la variable remplacer, par exemple
horner(y^2-2*x*y+1,2,y)

6.26.22

criture selon les puissances de (x-a) : ptayl

Il sagit dcrire un polynme P(x) selon les puissances de x-a)x a.


ptayl a deux paramtres : un polynme P donn sous forme symbolique ou par
la liste de ses coefficients et un nombre a.
ptayl renvoie le polynme Q tel que Q(x-a)=P(x).
On tape :
ptayl(x^2+2*x+1,2)
On obtient le polynme Q(x) :
x^2+6*x+9
On tape :
ptayl([1,2,1],2)
On obtient :
[1,6,9]
Attention
On a :
P(x)=Q(x-a)
cest dire pour lexemple que :
x2 + 2x + 1 = (x 2)2 + 6(x 2) + 9

6.26. LES POLYNMES

6.26.23

341

Calcul avec les racines exactes dun polynme : rootof

Soient P et Q deux polynmes donns par la liste de leurs coefficients alors,


rootof(P,Q) dsigne la valeur P () o est la "plus grande" racine de Q
(on compare dabord les parties relles et en cas dgalit on compare les parties
imaginaires).
On peut alors faire des calculs avec cette valeur.
On tape :
normal(rootof([1,0],[1,2,-3]))
On obtient :
1
en effet x2 + 2x 3 = (x 1)(x + 3) a comme plus grande racine 1.
Autre exemple
Soit la plus grande racine en norme de Q(x) = x4 + 10x2 + 1.
1
Calculer

On tape :
normal(1/rootof([1,0],[1,0,10,0,1]))
car P (x) = x est reprsent par [1,0].
On obtient :
rootof([[-1,0,-10,0],[1,0,10,0,1]])
ce qui veut dire que :
1
= ()3 10.

Calculer ()2 .
On tape :
normal(rootof([1,0],[1,0,10,0,1])^2)
On a =rootof([1,0],[1,0,10,0,1]) car P (x) = x est reprsent
par [1,0], et pour avoir 2 , on lve au carr.
On obtient :
-5-2*sqrt(6)
2
ou pour avoir directement, on tape :
normal(rootof([1,0,0],[1,0,10,0,1])^2)
car P (x) = x2 est reprsent par [1,0,0].
On obtient :
-5-2*sqrt(6)
Ce rsultat peut se vrifier puisque lon a une quation bicarre de discriminant
rduit 25 1 = 24 = 4 6. On tape :
csolve(x^4+10x^2+1)
On obtient :
[(i)*sqrt(-2*sqrt(6)+5),(-i)*sqrt(-2*sqrt(6)+5),
(i)*sqrt(2*sqrt(6)+5),(-i)*sqrt(2*sqrt(6)+5)]
p
Donc = i 2 6 + 5
On tape :

342

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


((i)*sqrt(2*sqrt(6)+5))^2

On obtient :
-5-2*sqrt(6)

6.26.24

Racines exactes dun polynme : roots

roots a comme arguments une fonction polynme et le nom de sa variable.


roots renvoie une matrice ayant 2 colonnes : chaque ligne est compose dune
racine du polynme et de son ordre de multiplicit.
Exemples
Chercher les racines de P (x) = x5 2x4 + x3 .
On tape :
roots(x^5-2*x^4+x^3)
On obtient :
[[8+3*sqrt(7),1],[8-3*sqrt(7),1],[0,3]]
Chercher les racines de x10 15x8 +90x6 270x4 +405x2 243 = (x2 3)5 .
On tape :
roots(x^10-15*x^8+90*x^6-270*x^4+405*x^2-243)
On obtient :
[[sqrt(3),5],[-(sqrt(3)),5]]
Chercher les racines de (t3 3).
On tape :
roots(t^3-1,t)
On obtient :
[[(-1+(i)*sqrt(3))/2,1],[(-1-(i)*sqrt(3))/2,1],[1,1]]

6.26.25

Coefficients dun polynme dfini par ses racines : pcoeff


pcoef

pcoeff (ou pcoef) a comme argument, une liste de composantes les racines
dun polynme P .
pcoeff (ou pcoef) renvoie une liste de composantes, les coefficients du polynme unitaire P (par ordre dcroissant).
On tape :
pcoef([1,2,0,0,3])
On obtient :
[1,-6,11,-6,0,0]
cest dire (x 1)(x 2)(x2 )(x 3) = x5 6x4 + 11x3 6x2 .

6.26.26

Troncature dordre n : truncate

truncate permet de tronquer un polynme un ordre donn truncate est


utile quand on fait des dveloppements limits la main, ou pour transformer un
dveloppement limit en polynme.

6.26. LES POLYNMES

343

truncate a deux arguments : un polynme et un entier n.


truncate renvoie le polynme tronqu lordre n (pas de termes dordre suprieur ou gal n+1).
On tape :
truncate((1+x+x^2/2)^3,4)
On obtient :
(9*x^4+16*x^3+18*x^2+12*x+4)/4
On tape :
truncate(series(sin(x)),4)
On obtient :
(-x^3-(-6)*x)/6
On remarquera que le polynme renvoy est rduit au mme dnominateur.

6.26.27

Convertir un dveloppement limit en polynme : convert


convertir

convert, avec loption polynom, permet de convertir un dveloppement de


Taylor en un polynme.
convert est utile pour transformer un dveloppement limit en polynme : par
exemple pour faire le trac dune fonction et de ses polynmes de Taylor.
convert a deux arguments : un dveloppement de Taylor dordre n et loption
polynom.
convert renvoie le polynme de Taylor dordre n tronqu lordre n (on supprime le reste).
On tape :
convert(taylor(sin(x)),polynom)
On obtient :
x+1/-6*x^3+1/120*x^5+x^6*0
On tape :
convert(series(sin(x),x=0,6),polynom)
On obtient :
x+1/-6*x^3+1/120*x^5+x^7*0

344

6.26.28

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Convertir un polynme de n variables en une liste : convert


convertir

convert, avec loption list, permet de convertir un polynme de n variables


en une liste.
On tape :
p:=symb2poly((x+y)^2,[x,y])
l:=convert(p,list)
ou
l:=convert(p)
On obtient :
[[1,[2,0]],[2,[1,1]],[1,[0,2]]]

6.26.29

Convertir une liste en polynme de n variables : convert


convertir

convert, avec loption polynom, permet de convertir une liste en un polynme


de n variables.
On tape :
l:=[[1,[2,0]],[2,[1,1]],[1,[0,2]]]
p:=convert(l,polynom)
On obtient :
%%%1,[2,0]%%%+%%%2,[1,1]%%%+%%%1,[0,2]%%%
On tape :
poly2symb(p,[x,y])
On obtient :
x^2+2*x*y+y^2

6.26.30

Polynmes alatoires : randpoly randPoly

randpoly (ou randPoly) a deux paramtres le nom dune variable (par dfaut
x) et un entier n (en fait lordre des paramtres nest pas important).
randpoly renvoie un polynme de variable le premier paramtre (ou x), de degr
le deuxime paramtre et dont les coefficients sont des entiers alatoires quirpartis sur -99..+99.
On tape :
randpoly(t,4)
On obtient par exemple :

6.26. LES POLYNMES

345

-8*t^4-87*t^3-52*t^2+94*t+80
On tape :
randpoly(4)
On obtient par exemple :
70*x^4-46*x^3-7*x^2-24*x+52
On tape :
randpoly(4,u)
On obtient par exemple :
2*u^4+33*u^3-6*u^2-92*u-12

6.26.31

Changer lordre des variables : reorder

reorder a deux paramtres : une expression et une liste contenant les noms des
variables dans un certain ordre.
reorder dveloppe lexpression selon lordre des variables donn dans le second
paramtre.
On tape :
reorder(x^2+2*x*a+a^2+z^2-x*z,[a,x,z])
On obtient :
a^2+2*a*x+x^2-x*z+z^2
Attention :
Il ne faut pas que les variables soient affectes !

6.26.32

Liste alatoire : ranm

ranm a comme argument un entier n.


ranm renvoie une liste de n entiers alatoires (entre -99 et +99) pouvant tre
considrs comme les coefficients dun polynme de degr n-1 (voir aussi 6.44.3,
6.40.39 et 7.3.9).
On tape :
ranm(3)
On obtient :
[68,-21,56]

346

6.26.33

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Interpolation de Lagrange : lagrange interp

lagrange a comme argument deux listes de longueur n ou une matrice de deux


lignes et n colonnes et eventuellement le nom de la variable var (par dfaut x) :
la premire liste (ou ligne) correspond des valeurs dabscisses xk , et la deuxime
liste (ou ligne) correspond des valeurs dordonnes yk pour k allant de 1 n.
lagrange renvoie une expression polynmiale P(var) de degr n-1 tel que
P (xk ) = yk .
On tape :
lagrange([[1,3],[0,1]])
Ou on tape :
lagrange([1,3],[0,1])
On obtient :
(x-1)/2
en effet pour x = 1 on a
On tape :

x1
2

= 0 et pour x = 3 on a

x1
2

= 1.

lagrange([1,3],[0,1],y)
On obtient :
(y-1)/2
Attention lagrange([1,2],[3,4],y) ne renvoie pas une fonction mais une
expression. mais on peut dfinir une fonction en mettant :
f(x):=lagrange([1,2],[3,4],x) ou
f(y):=lagrange([1,2],[3,4],y) et alors
f(4) renvoie 6 car f(x)=x+2)
Bien voir la diffrence entre :
g(x):=lagrange([1,2],[3,4]) et
f(x):=lagrange([1,2],[3,4],x).
g(x):=lagrange([1,2],[3,4]) ne definit pas une fonction, par exemple,
g(2)=x-1+3 alors que f(2)=4.
Ceci dit, la dfinition of f nest pas efficace car le polynme sera recalcul depuis
le dbut chaque appel de f (quand on dfinit une fonction le membre de droite
nest pas valu, lvaluation est faite seulement quand on appelle f).
Pour tre efficace il faut utiliser unapply :
f:=unapply(lagrange([1,2],[3,4]),x) ou
f:=unapply(lagrange([1,2],[3,4],y),y) Exercice Soient f (x) =
1
, x0 = 2 x1 = 2.5 et x2 = 4. On demande de calculer le polynme L dinterpox
lation de Lagrange et sa valeur en x = 3 et x = 4.5.
On tape :
f(x):=1/x
L:=unapply(normal(lagrange([2,2.5,4],[f(2),f(2.5),f(4)])),x)
On obtient :
x->0.05*x^2-0.425*x+1.15

6.26. LES POLYNMES

347

On tape :
L(3),L(4.5)
On obtient :
0.325,0.25

6.26.34

Les splines naturelles : spline

Dfinition
Soit une subdivision n de lintervalle [a, b] :
a = x0 ,

x1 ,

...,

xn = b

On dit que s est une fonction spline de degr l si s est une application de [a, b] dans
R vrifiant :
s admet des drives continues jusqu lordre l 1,
s restreint chaque intervalle de la subdivision est un polynme de degr
infrieur ou gal l.
Thorme
Lensemble des fonctions splines de degr l sur n est un R-espace vectoriel de
dimension n + l.
En effet :
Sur [a, x1 ], s est un polynme A de degr infrieur ou gal l, donc sur [a, x1 ],
s = A(x) = a0 + a1 x + ...al xl et A est une combinaison linaire de 1, x, ...xl .
Sur [x1 , x2 ], s est un polynme B de degr infrieur ou gal l, donc sur [x1 , x2 ],
s = B(x) = b0 + b1 x + ...bl xl .
Puisque s admet des drives continues jusqu lordre l 1 on doit avoir :
0 j l 1,

B (j) (x1 ) A(j) (x1 ) = 0

donc B(x) A(x) = 1 (x x1 )l ou encore B(x) = A(x) + 1 (x x1 )l .


Soit la fonction :

0 sur [a, x1 ]
q1 (x) =
(x x1 )l sur [x1 , b]
Donc :
s|[a,x2 ] = a0 + a1 x + ...al xl + 1 q1 (x).
Sur [x2 , x3 ], s est un polynme C de degr infrieur ou gal l, donc sur
[x2 , x3 ], s = C(x) = c0 + c1 x + ...cl xl .
Puisque s admet des drives continues jusqu lordre l 1 on doit avoir :
0 j l 1,

C (j) (x2 ) B (j) (x2 ) = 0

donc C(x) B(x) = 2 (x x2 )l ou encore C(x) = B(x) + 2 (x x2 )l .


Soit la fonction :

0 sur [a, x2 ]
q2 (x) =
(x x2 )l sur [x2 , b]
Donc : s|[a,x3 ] = a0 + a1 x + ...al xl + 1 q1 (x) + 2 q2 (x)
Et ainsi de suite, on dfinit les fonctions :

0 sur [a, xj ]
1 j n 1, qj (x) =
(x xj )l sur [xj , b]

348

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

ainsi,
s|[a,b] = a0 + a1 x + ...al xl + 1 q1 (x) + .... + n1 qn1 (x) et
s est une combinaison linaire des n+l fonctions indpendantes 1, x, ..xl , q1 , ..qn1 .
Interpolation avec des fonctions splines
On peut demander dinterpoler une fonction f sur n par une fonction spline s de
degr l, ce qui va imposer s de vrifier s(xk ) = yk = f (xk ) pour tout 0 k n.
On a donc n + 1 conditions, il reste donc l 1 degrs de libert. On peut donc
encore imposer l 1 conditions supplmentaires qui seront des conditions sur les
derives de s en a et b. Il existe alors trois types dinterpolation (interpolation
dHermite, interpolation naturelle, interpolation priodique) qui sont obtenues en
rajoutant trois types de contraintes. On peut montrer que pour chacun de ces types
dinterpolation la solution au problme dinterpolation est unique.
Supposons l impair, l = 2m 1, il y a donc 2m 2 degrs de libert. On
rajoute les contraintes suivantes :
Interpolation dHermite
1 j m 1,

s(j) (a) = f (j) (a), s(j) (b) = f (j) (b)

Interpolation naturelle
m j 2m 2,

s(j) (a) = s(j) (b) = 0

Interpolation priodique
1 j 2m 2,

s(j) (a) = s(j) (b)

Supposons l pair, l = 2m, il y a donc 2m 1 degrs de libert. On rajoute les


contraintes suivantes :
Interpolation dHermite
1 j m 1,

s(j) (a) = f (j) (a), s(j) (b) = f (j) (b)

et
s(m) (a) = f (m) (a)
Interpolation naturelle
m j 2m 2,

s(j) (a) = s(j) (b) = 0

et
s(2m1) (a) = 0
Interpolation priodique
1 j 2m 1,

s(j) (a) = s(j) (b)

Une spline naturelle de degr donn passant par des points donns est une fonction
spline vrifiant linterpolation naturelle.
Linstruction spline calcule une spline naturelle de degr donn passant par
des points dont les listes des abscisses par ordre croissant et des ordonnes sont
passes en argument. Elle renvoie la fonction spline sous forme dune liste de polynmes, chaque polynme tant valide dans un intervalle. On donne dans lordre
croissant la liste des abscisses, la liste des ordonnes, le nom de variables souhait
pour les polynmes et le degr.
Par exemple, on veut une spline naturelle de degr 3, passant par les points
x0 = 0, y0 = 1, x1 = 1, y1 = 3 et x2 = 2, y2 = 0, on tape :

6.27. ARITHMTIQUE DES POLYNMES

349

spline([0,1,2],[1,3,0],x,3)
On obtient une liste de deux polynmes fonction de x :
[5 x3 /4 + 13 x/4 + 1,

5 (x 1)3 /4 15 (x 1)2 /4 + (x 1)/ 2 + 3]

valables respectivement sur les intervalles [0, 1] et [1, 2].


Par exemple, on veut une spline naturelle de degr 4, passant par les points
x0 = 0, y0 = 1, x1 = 1, y1 = 3, x2 = 2, y2 = 0 et x3 = 3, y3 = 1, on tape :
spline([0,1,2,3],[1,3,0,-1],x,4)
On obtient une liste de trois polynmes fonction de x :
[(62 x4 + 304 x)/121 + 1,
(201 (x 1)4 248 (x 1)3 372 (x 1)2 + 56 (x 1))/121 + 3,
(139 (x 2)4 + 556 (x 2)3 + 90 (x 2)2 + 628 (x 2))/121]
valables respectivement sur les intervalles [0, 1], [1, 2] et [2, 3].
Par exemple, pour avoir linterpolation naturelle de cos sur [0, /2, 3/2], on
tape :
spline([0,pi/2,3*pi/2],cos([0,pi/2,3*pi/2]),x,3)
On obtient :
[((3 3 + (7 2 )x + 4x3 )1/3)/( 3 ),
((15 3 + (46 2 ) +36x2 8x3 )1/12)/( 3 )]

6.27

Arithmtique des polynmes

Les polynmes sont reprsents par des expressions ou par la liste de leurs
coefficients par ordre de puissances dcroissantes. Dans le premier cas la variable
utilise par dfaut est x. Pour les polynmes coefficients dans Z/nZ, appliquez
% n lexpression ou chaque coefficient de la liste.

6.27.1

Liste des diviseurs dun polynme : divis

divis a pour argument un polynme symbolique (ou une liste de polynmes) et


renvoie la liste des diviseurs.
On tape :
divis(x^2-1)
On obtient :
[1,x-1,x+1,(x-1)*(x+1)]
On tape :
divis(t^2-1)
On obtient :

350

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


[1,t-1,t+1,(t-1)*(t+1)]

On tape :
divis(x^4-1)
Ou on tape :
divis(poly2symb([1,0,0,0,-1],x))
On obtient :
[1,x^2+1,x+1,(x^2+1)*(x+1),x-1,(x^2+1)*(x-1),
(x+1)*(x-1),(x^2+1)*(x+1)*(x-1)]
On tape :
divis([t^2,x^2-1])
On obtient :
[[1,t,t^2],[1,x+1,x-1,(x+1)*(x-1)]]

6.27.2

Quotient euclidien de 2 polynmes : quo

quo donne le quotient de la division euclidienne de deux polynmes (division selon les puissances dcroissantes).
On peut donner les polynmes soit par la liste de leurs coefficients selon les puissances dcroissantes, soit sous leurs formes symboliques et dans ce cas la variable
doit tre rajoute comme troisime argument (par dfaut la variable est x).
On tape :
quo(x^2+2x+1,x+3)
On obtient :
x-1
On tape :
quo(t^2+2t+1,t+3,t)
On obtient :
t-1
ou on tape :
quo([1,2,1],[1,3])
On obtient :
[] 1,-1 []
cest dire le polynme poly1[1,-1].
Pour avoir le quotient de x3 + 2x + 4 par x2 + x + 2, on tape :

6.27. ARITHMTIQUE DES POLYNMES

351

quo(x^3+2x+4,x^2+x+2)
On obtient :
x-1
Ou on tape :
quo([1,0,2,4],[1,1,2])
On obtient :
[] 1,-1 []
cest dire le polynme poly1[1,-1] ou encore le polynme x-1.
On tape :
quo(t^3+2t+4,t^2+t+2,t)
On obtient :
t-1
On tape si on ne met pas la variable t comme dernier argument :
quo(t^3+2t+4,t^2+t+2)
On obtient :
(t^3+2*t+4)/(t^2+t+2)

6.27.3

Quotient euclidien : Quo

Quo est la forme inerte de quo.


Quo renvoie le quotient de la division euclidienne de deux polynmes (division
selon les puissances dcroissantes) sans lvaluer et cela permet de calculer le quotient euclidien de deux polynmes coefficients dans Z/pZ en utilisant la syntaxe
Maple.
Attention il faut tre en mode Maple pour que cela soit efficace.
On tape, en mode Xcas :
Quo(x^2+2*x+1,x)
On obtient :
quo(x^2+2*x+1,x)
On peut aussi taper pour avoir le quotient de x2 + 2x + 4 par x2 + x + 2 :
Quo([1,2,4],[1,1,2])
On obtient :
quo([1,2,4],[1,1,2])
En mode Maple on tape :

352

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Quo(x^3+3*x,2*x^2+6*x+5) mod 5

On obtient :
-(2)*x+1)
La division est faite dans Z/5Z[X] alors que pour :
quo(x^3+3*x,2*x^2+6*x+5) mod 5
la division est faite dans Z[X] puis est rduite aprs :
3*x-9
Si Xcas nest pas en mode Maple, la division des polynmes dans Z/pZ[X] se
fait en tapant :
quo((x^3+3*x)% 5,(2x^2+6x+5)%5)

6.27.4

Reste euclidien de 2 polynmes : rem

rem donne le reste de la division euclidienne de deux polynmes (division selon


les puissances dcroissantes).
On peut donner les polynmes soit par la liste de leurs coefficients selon les puissances dcroissantes, soit sous leurs formes symboliques et dans ce cas la variable
doit tre rajoute comme troisime argument (par dfaut la variable est x).
On tape :
rem(x^3-1,x^2-1)
On obtient :
x-1
On tape :
rem(t^3-1,t^2-1,t)
On obtient :
t-1
On tape :
rem(x^2+2x+1,x+3)
Ou on tape :
rem(t^2+2t+1,t+3,t)
On obtient :
4
ou on tape :
rem([1,2,1],[1,3])

6.27. ARITHMTIQUE DES POLYNMES

353

On obtient :
[] 4
cest dire le polynme poly1[4] ou encore le polynme 4.
On tape pour avoir le reste de x3 + 2x + 4 par x2 + x + 2 :
rem(x^3+2x+4,x^2+x+2)
On obtient :
x+6
Ou on tape :
rem([1,0,2,4],[1,1,2])
On obtient :
[] 1,6[]
cest dire le polynme poly1[1,6] ou encore le polynme x+6.
On tape :
rem(t^3+2t+4,t^2+t+2,t)
On obtient :
t+6
On tape si on ne met pas la variable t comme dernier argument :
rem(t^3+2t+4,t^2+t+2)
On obtient :
0

6.27.5

Reste euclidien : Rem

Rem est la forme inerte de rem.


Rem renvoie le reste de la division euclidienne de deux polynmes (division selon
les puissances dcroissantes) sans lvaluer et cela permet de calculer le reste euclidien de deux polynmes coefficients dans Z/pZ en utilisant la syntaxe Maple.
Attention il faut tre en mode Maple pour que cela soit efficace.
On tape, en mode Xcas :
Rem(x^3-1,x^2-1)
On obtient :
rem(x^3-1,x^2-1)
On peut aussi taper pour avoir le reste de x2 + 2x + 4 par x2 + x + 2 :
Rem([1,2,4],[1,1,2])

354

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
rem([1,2,4],[1,1,2])
En mode Maple on tape :
Rem(x^3+3*x,2*x^2+6*x+5) mod 5
On obtient :
2*x
La division est faite dans Z/5Z[X] alors que pour :
rem(x^3+3*x,2*x^2+6*x+5) mod 5
la division est faite dans Z[X] puis est rduite aprs :
12*x
Si Xcas nest pas en mode Maple, la division des polynmes dans Z/pZ[X] se
fait en tapant :
rem((x^3+3*x)% 5,(2x^2+6x+5)%5)

6.27.6

Quotient et reste euclidien : quorem divide

quorem (ou divide) donne la liste, du quotient et du reste de la division euclidienne (selon les puissances dcroissantes) de deux polynmes.
On peut donner les polynmes soit par la liste de leurs coefficients selon les puissances dcroissantes, soit sous leurs formes symboliques et dans ce cas la variable
doit tre rajoute comme troisime argument (par dfaut la variable est x).
On tape pour avoir le quotient et le reste de la division de x3 +2x+4 par x2 +x+2 :
quorem(x^3+2x+4,x^2+x+2)
On obtient :
[x-1,x+6]
Ou on tape :
quorem([1,0,2,4],[1,1,2])
On obtient :
[[1,-1],[1,6]]
cest dire la liste des polynmes [poly1[1,-1],poly1[1,6]] donc le quotient est le polynme x-1 et le reste est le polynme x+6.
On tape :
quorem(t^3+2t+4,t^2+t+2,t)
On obtient :
[t-1,t+6]

6.27. ARITHMTIQUE DES POLYNMES

355

On tape :
quorem(t^3+2t+4,t^2+t+2)
On obtient :
[(t^3+2*t+4)/(t^2+t+2),0]
On tape :
quorem(x^3-1,x^2-1)
On obtient :
[x,x-1]
On tape :
quorem(t^3-1,t^2-1,t)
On obtient :
[t,t-1]

6.27.7

PGCD de polynmes par lalgorithme dEuclide : gcd igcd

gcd dsigne le PGCD (plus grand commun diviseur) de deux polynmes pouvant
avoir plusieurs variables et aussi le PGCD dune liste de polynmes ou dune squence de polynmes pouvant avoir plusieurs variables (voir 6.7.2 pour le PGCD
dentiers). On peut aussi mettre comme paramtres deux listes de mme longueur
(ou une matrice ayant 2 lignes), dans ce cas gcd renvoie le PGCD des lments de
mme indice (ou dune mme colonne). On tape :
gcd([x^2-4,x*y-y],[x^3-8,y^2-x^2*y])
Ou on tape :
gcd([[x^2-4,x*y-y],[x^3-8,y^2-x^2*y]])
On obtient :
[x-2,y]
Exemples
On tape :
gcd(x^2+2*x+1,x^2-1)
On obtient :
x+1
On tape :
gcd(x^2-2*x+1,x^3-1,x^2-1,x^2+x-2)
ou

356

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


gcd([x^2-2*x+1,x^3-1,x^2-1,x^2+x-2])

On obtient :
x-1
On tape :
A:=z^2+x^2*y^2*z^2+(-(y^2))*z^2+(-(x^2))*z^2
B:=x^3*y^3*z+(-(y^3))*z+x^3*z-z
C:=gcd(A,B)
On obtient :
z*x*y+z*x-z*y-z
On tape :
factor(A)
On obtient :
(y-1)*(y+1)*(x-1)*(x+1)*z^2
On tape :
factor(B)
On obtient :
(x^2+x+1)*(x-1)*(y+1)*(y^2-y+1)*z
On tape :
factor(C)
On obtient :
(y+1)*(x-1)*z
Pour les polynmes coefficients modulaire, on tape par exemple : On tape :
gcd((x^2+2*x+2) mod 5,(x^2-1) mod 5)
On obtient :
(1 % 5)*x-1 % 5
Mais si on tape :
gcd(x^2+2*x+2,x^2-1) mod 5)
On obtient :
1%5
car lopration modulaire se fait aprs le calcul du PGCD qui a t calcul dans
Z[X].

6.27. ARITHMTIQUE DES POLYNMES

6.27.8

357

PGCD de deux polynmes par lalgorithme dEuclide : Gcd

Gcd est la forme inerte de gcd.


Gcd renvoie le PGCD (plus grand commun diviseur) de deux polynmes (ou dune
liste de polynmes ou dune squence de polynmes) (voir 6.7.2 pour le PGCD
dentiers), sans lvaluer et cela permet de calculer le PGCD de deux polynmes
coefficients dans Z/pZ en utilisant la syntaxe Maple.
Attention il faut tre en mode Maple pour que cela soit efficace.
On tape en mode Xcas :
Gcd((x^2+2*x)mod 5,(x^2+6*x+5x) mod 5)
On obtient :
gcd((1% 5)*x^2+(2% 5)*x,(1% 5)*x^2+(1% 5)*x)
puis on obtient :
(1% 5)*x
Mais si on tape en mode Xcas :
Gcd((x^2+2*x),(x^2+6*x+5x)) mod 5
On obtient :
(1% 5)*gcd(x^2+2*x,x^2++6*x+5x)
puis :
(1% 5)
On tape en mode Maple :
Gcd(x^2+2*x,x^2+6*x+5) mod 5
On obtient :
1
On tape :
gcd(x^2+2*x,x^2+x) mod 5
On obtient :
x

358

6.27.9

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Choisir lalgorithme du PGCD de deux polynmes : ezgcd


heugcd modgcd psrgcd

ezgcd heugcd modgcd psrgcd dsigne le PGCD (plus grand commun diviseur) de deux polynmes (ou dune liste de polynmes ou dune squence de
polynmes) de plusieurs variables.
ezgcd est calcul avec lalgorithme ezgcd,
heugcd est calcul avec lalgorithme dit du pgcd heuristique,
modgcd est calcul avec lalgorithme modulaire,
psrgcd est calcul avec lalgorithme du sous rsultant.
On tape :
gcd(x^2-2*x*y+y^2-1,x-y)
ou
ezgcd(x^2-2*x*y+y^2-1,x-y)
ou
heugcd(x^2-2*x*y+y^2-1,x-y)
ou
modgcd(x^2-2*x*y+y^2-1,x-y)
ou
psrgcd(x^2-2*x*y+y^2-1,x-y)
On obtient :
1
On tape :
gcd((x+y-1)*(x+y+1),(x+y+1)^2)
ou On tape :
ezgcd((x+y-1)*(x+y+1),(x+y+1)^2)
ou
heugcd((x+y-1)*(x+y+1),(x+y+1)^2)
ou
modgcd((x+y-1)*(x+y+1),(x+y+1)^2)
On obtient :
x+y+1
On tape :
psrgcd((x+y-1)*(x+y+1),(x+y+1)^2)

6.27. ARITHMTIQUE DES POLYNMES

359

On obtient :
-x-y-1
On tape :
ezgcd((x+1)^4-y^4,(x+1-y)^2)
On obtient :
"GCD not successfull Error: Bad Argument Value"
Mais si on tape :
gcd((x+1)^4-y^4,(x+1-y)^2)
ou
heugcd((x+1)^4-y^4,(x+1-y)^2)
ou
modgcd((x+1)^4-y^4,(x+1-y)^2)
ou
psrgcd((x+1)^4-y^4,(x+1-y)^2)
On obtient :
x-y+1

6.27.10

PPCM de deux polynmes : lcm

lcm dsigne le PPCM (plus petit commun multiple) de deux polynmes pouvant
avoir plusieurs variables et aussi le PPCM dune liste de polynmes ou dune squence de polynmes pouvant avoir plusieurs variables (voir 6.7.5 pour le PPCM
dentiers).
On tape :
lcm(x^2+2*x+1,x^2-1)
On obtient :
(x+1)*(x^2-1)
On tape :
lcm(x,x^2+2*x+1,x^2-1)
ou
lcm([x,x^2+2*x+1,x^2-1])
On obtient :
(x^2+x)*(x^2-1)

360

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
A:=z^2+x^2*y^2*z^2+(-(y^2))*z^2+(-(x^2))*z^2
B:=x^3*y^3*z+(-(y^3))*z+x^3*z-z
D:=lcm(A,B)
On obtient :
(x*y*z-x*z+y*z-z)*(x^3*y^3*z+(-(y^3))*z+x^3*z-z)
On tape :
factor(A)
On obtient :
(y-1)*(y+1)*(x-1)*(x+1)*z^2
On tape :
factor(B)
On obtient :
(x^2+x+1)*(x-1)*(y+1)*(y^2-y+1)*z
On tape :
factor(D)
On obtient :
(x-1)*(x+1)*(x^2+x+1)*(y-1)*(y+1)*(y^2-y+1)*z^2

6.27.11

Idendit de Bzout : egcd gcdex

Il sagit de lidentit de Bzout pour les polynmes (Extended Greatest Common Divisor).
egcd a 2 ou 3 arguments : les polynmes A and B qui sont, soit sous la forme
dexpressions dune variable, (si la variable nest pas spcifie cest x), soit donn
par la liste de leurs coefficients par ordre de puissances dcroissantes.
Etant donns 2 polynmes A(x), B(x), egcd ou gcdex renvoie 3 polynmes
[U(x),V(x),D(x)] vrifiant :
U(x)*A(x)+V(x)*B(x)=D(x)=PGCD(A(x),B(x))
On tape :
egcd(x^2+2*x+1,x^2-1)
On obtient :
[1,-1,2*x+2]
On tape :

6.27. ARITHMTIQUE DES POLYNMES

361

egcd([1,2,1],[1,0,-1])
On obtient :
[[1],[-1],[2,2]]
On tape :
egcd(t^2+2*t+1,t^2-1,t)
On obtient :
[1,-1,2*t+2]
On tape :
egcd(x^2-2*x+1,x^2-x+2)
On obtient :
[x-2,-x+3,4]
On tape :
egcd([1,-2,1],[1,-1,2])
On obtient :
[[1,-2],[-1,3],[4]]
On tape :
egcd(t^2-2*t+1,t^2-t+2,t)
On obtient :
[t-2,-t+3,4]

6.27.12

Rsolution polynmiale de au+bv=c : abcuv

Il sagit encore de lidentit de Bzout.


abcuv rsout lquation polynmiale
C(x) = U (x) A(x) + V (x) B(x)
dans laquelle les inconnues sont les polynmes U et V et les paramtres sont les
trois polynmes, A, B, C o C doit tre un multiple du PGCD de A et B.
abcuv a comme argument 3 expressions polynmiales A, B, C et le nom de leur
variable (par dfaut x) (resp 3 listes reprsentant les coefficients par puissances
dcroisantes de 3 polynmes A, B, C). abcuv renvoie la liste de 2 expressions
polynmiales U et V (resp de 2 listes quisont les coefficients par puissances dcroisantes de U et V ).
On tape :
abcuv(x^2+2*x+1 ,x^2-1,x+1)
On obtient :

362

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


[1/2,1/-2]

On tape :
abcuv(x^2+2*x+1 ,x^2-1,x^3+1)
On obtient :
[1/2*x^2+1/-2*x+1/2,-1/2*x^2-1/-2*x-1/2]
On tape :
abcuv([1,2,1],[1,0,-1],[1,0,0,1])
On obtient :
[poly1[1/2,1/-2,1/2],poly1[1/-2,1/2,1/-2]]

6.27.13

Les restes chinois : chinrem

chinrem a comme argument deux listes ayant chacun comme composantes deux
polynmes ventuellement donns par la liste de leurs coefficients par ordre dcroissant.
chinrem renvoie une liste de composantes deux polynmes.
chinrem([A,R],[B,Q]) renvoie la liste des polynmes P et S vrifiant :
S = R.Q,

P =A

(mod R), P = B

(mod Q)

Il existe toujours une solution P si R et Q sont premiers entre eux, et toutes les
solutions sont congrues modulo S=R*Q
Trouver les solutions P (x) de :

P (x) = x
mod (x2 + 1)
P (x) = x 1 mod (x2 1)
On tape :
chinrem([[1,0],[1,0,1]],[[1,-1],[1,0,-1]])
On obtient :
[[1/-2,1,1/-2],[1,0,0,0,-1]]
ou on tape :
chinrem([x,x^2+1],[x-1,x^2-1])
On obtient :
[1/-2*x^2+x+1/-2,x^4-1]
donc P (x) =
Autre exemple :
On tape :

x2 2.x + 1
(mod x4 1)
2

chinrem([[1,2],[1,0,1]],[[1,1],[1,1,1]])

6.27. ARITHMTIQUE DES POLYNMES

363

On obtient :
[[-1,-1,0,1],[1,1,2,1,1]]
ou on tape :
chinrem([x+2,x^2+1],[x+1,x^2+x+1])
On obtient :
[-x^3-x^2+1,x^4+x^3+2*x^2+x+1]

6.27.14

Polynme cyclotomique : cyclotomic

cyclotomic a comme paramtre un entier n.


cyclotomic renvoie la liste des coefficients du polynme cyclotomique dordre
n. Cest le polynme dont les zros sont toutes les racines n-ime et primitives
de lunit (une racine n-ime de lunit est primitive si ses puissances engendrent
toutes les autres racines n-ime de lunit).
Par exemple pour n = 4, les racines quatrime de lunit sont : {1, i, 1, i},
et les racines primitives sont : {i, i}.
Donc le polynme cyclotomique dordre 4 est (x i).(x + i) = x2 + 1.
On tape :
cyclotomic(4)
On obtient :
[1,0,1]
On tape :
cyclotomic(5)
On obtient :
[1,1,1,1,1]
Donc le polynme cyclotomique dordre 5 est x4 + x3 + x2 + x + 1 et on a
(x 1) (x4 + x3 + x2 + x + 1) = x5 1.
On tape :
cyclotomic(10)
On obtient :
[1,-1,1,-1,1]
Donc le polynme cyclotomique dordre 10 est x4 x3 + x2 x + 1 et on a
(x5 1) (x + 1) (x4 x3 + x2 x + 1) = x10 1
On tape :
cyclotomic(20)
On obtient :
[1,0,-1,0,1,0,-1,0,1]
Donc le polynme cyclotomique dordre 20 est x8 x6 + x4 x2 + 1 et on a
(x10 1) (x2 + 1) (x8 x6 + x4 x2 + 1) = x20 1

364

6.27.15

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Suites de Sturm et nombre de de changements de signe de P


sur ]a; b] : sturm

sturm a deux ou quatre paramtres : une expression polynmiale P ou une fraction rationnelle P/Q et le nom de la variable ou une expression polynmiale P , le
nom de la variable et deux nombres a et b.
Lorsquil y a 2 paramtres sturm renvoie la liste des suites de Sturm et de leur
multiplicit pour P ou pour P et pour Q (sturm est alors identique sturmseq).
Lorsquil y a 4 paramtres sturm, se comporte comme sturmab :
si a et b sont rels, sturm renvoie le nombre de changements de signe de P
sur ]a; b]
si a ou b est complexe, sturm renvoie le nombre de racines complexes
lintrieur du rectangle de sommets opposs a et b.
On tape :
sturm(2*x^3+2,x)
On obtient :
[2,[[1,0,0,1],[3,0,0],-9],1]
On tape :
sturm((2*x^3+2)/(x+2),x)
On obtient :
[2,[[1,0,0,1],[3,0,0],-9],1,[[1,2],1]]
On tape :
sturm(x^2*(x^3+2),x,-2,0)
On obtient :
1

6.27.16

Nombre de changements de signe sur ]a; b] : sturmab

sturmab a quatre paramtres : une expression polynmiale P , le nom de la variable et deux nombres a et b.
si a et b sont rels, sturmab renvoie soit un nombre strictement positif
qui est le nombre de changements de signe de P sur ]a; b], soit 0 si P
reste de signe constant positif ou nul sur ]a; b], soit -1 si P reste de signe
constant ngatif ou nul sur ]a; b]. Ainsi, sturmab permet davoir le nombre
de racines sur [a, b[ du polynme P/G avec G = gcd(P, diff(P )).
si a ou b est complexe, le nombre de racines complexes lintrieur du rectangle de sommets opposs a et b.
On tape :
sturmab(x^2*(x^3+2),x,-2,0)
On obtient :

6.27. ARITHMTIQUE DES POLYNMES

365

1
On tape :
sturmab(x^3-1,x,-2-i,5+3i)
On obtient :
3
On tape :
sturmab(x^3-1,x,-i,5+3i)
On obtient :
1
Attention ! ! ! !
P doit tre donn par son expression symbolique et, si on tape :
sturmab([1,0,0,2,0,0],x,-2,0),
on obtient :
Bad argument type.

6.27.17

Suites de Sturm : sturmseq

sturmseq a comme paramtre une expression polynmiale P ou une fraction


rationnelle P/Q.
sturmseq renvoie la liste des suites de Sturm et de leur multiplicit pour P ou
pour P et pour Q.
La suite de sturm R1 , R2 , ... est obtenue partir du facteur F sans carr de P . Pour
obtenir F partir de la dcomposition de P en facteurs premiers, on limine les
termes carrs et on transforme les puissances impaires en puissances 1.
R1 est loppos du reste de la division euclidienne de F par F 0 puis, R2 est loppos
du reste de la division euclidienne de F 0 par R1
....
et ainsi de suite jusqu ce que Rk = 0.
On tape :
sturmseq(2*x^3+2)
ou
sturmseq(2*y^3+2,y)
On obtient :
[2,[[1,0,0,1],[3,0,0],-9],1]
Le premier terme donne le PGCD des coefficients du numrateur (ici 2), le dernier
terme donne le dnominateur (ici 1). Entre les deux on a la suite des polynmes
[x3 + 1, 3x2 , 9].
On tape :

366

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


sturmseq((12*x^3+4)/(6*x^2+3),x)

On obtient :
[4,[[3,0,0,1],[9,0,0],-81],3,[[2,0,1],[4,0],-16]]
Le premier terme donne le PGCD des coefficients du numrateur (ici 4), puis la
suite de Sturm du numrateur ([[3,0,0,1],[9,0,0],-81]), puis le le PGCD des coefficient du dnominateur (ici 3), et la suite de Sturm du dnominateur ([[2,0,1],[4,0],16]). On a la suite des polynmes [3x3 + 1, 9x2 , 81] pour le numrateur et,
[2x2 + 1, 4x, 16] pour le dnominateur.
On tape :
sturmseq((x^3+1)^2,x)
On obtient :
[1,1]
En effet les termes carrs sont limins et F = 1.
On tape :
sturmseq(3*(3*x^3+1)/(2*x+2),x)
On obtient :
[3,[[3,0,0,1],[9,0,0],-81],2,[[1,1],1]]
Le premier terme donne le PGCD des coefficients du numrateur (ici 3),
le deuxime terme donne la suite de polynmes (ici 3x^3+1, 9x^2, -81),
le troisime terme donne le PGCD des coefficients du dnominateur (ici 2),
le quatrime terme indique la suite de polynmes du dnominateur (x+1,1).
Attention ! ! ! !
P doit tre donn par son expression symbolique et,si on tape :
sturmseq([1,0,0,1],x),
on obtient :
Bad argument type.

6.27.18

Matrice de Sylvester de deux polynmes : sylvester

sylvester a comme arguments deux polynmes.


sylvester renvoie la matriceP
S de Sylvester des deux
P polynmes.
i=n
i
Pour deux polynmes A(x) = i=0
ai xi et B(x) = i=m
i=0 bi x , la matrice S de
Sylvester est une matrice carre de dimensiom m+n dont les m=degree(B(x))
premires lignes sont composes partir des coefficients de A(x) :

s11 = an s12 = an1


s21 = 0
s22 = an
..
..
..
.
.
.
sm1 = 0
sm2 = 0

..
.

0
0
..
.

sm(n+1) = am1 sm(n+2) = am2

a0

s1(n+1) = a0
s2(n+1) = a1
..
.

0
s2(n+2) = a0
..
.

6.27. ARITHMTIQUE DES POLYNMES

367

et les n=degree(A(x)) lignes suivantes sont composes de la mme faon


partir des coefficients de B(x) :

s(m+1)1 = bm s(m+1)2 = bm1


s(m+1)(m+1) = b0
0
0

..
..
..
..
.
..
..

.
. ..
.
.
.
.
s(m+n)1 = 0
s(m+n)2 = 0
s(m+n)(m+1) = bn1 bn2 b0
On tape :
sylvester(x^3-p*x+q,3*x^2-p,x)
On obtient :
[[1,0,-p,q,0],[0,1,0,-p,q],[3,0,-p,0,0],
[0,3,0,-p,0],[0,0,3,0,-p]]
On tape :
det([[1,0,-p,q,0],[0,1,0,-p,q],[3,0,-p,0,0],
[0,3,0,-p,0],[0,0,3,0,-p]])
On obtient :
-4*p^3-27*q^2

6.27.19

Rsultant de deux polynmes : resultant

resultant a comme arguments deux polynmes.


resultant renvoie le rsultant des deux polynmes.
Le rsultant est le dterminant de la P
matrice S de Sylvester.P
i=n
i
ai xi et B(x) = i=m
Pour les deux polynmes A(x) = i=0
i=0 bi x , la matrice
S de Sylvester est une matrice carre de dimensiom m + n dont les m premires
lignes sont composes partir des coefficients de A(x) :

s00 = an
s01 = an1
s0n) = a0
0

s10 = 0
s11 = an

s1n = a1
s1(n+1) = a0

..
..
..
..
.
..
.

.
.
.
.
.
.
s(m1)0 = 0 s(m1)1 = 0

s(m1)n = am1 s(m1)(n+1) = am2

et les n lignes suivantes sont composes de la mme faon partir des coefficients
de B(x) :

sm0 = bm
sm1 = bm1
smm = b0
0
0

..
..
..
..
.
..
..

.
. ..
.
.
.
.
s(m+n1)0 = 0 s(m+n1)1 = 0

s(m+n1)m = bn1 bn2

On tape :
resultant(x^3-p*x+q,3*x^2-p,x)
On obtient :
-4*p^3-27*q^2

b0

0
0
..
.
a0

368

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On cherche si il existe 2 polynmes U (x) = x + (de degr 1) et V (x) =


x2 +x+ (de degr 2) pour que U (x)(x3 px+q)+V (x)(3x2 p) = 1
On doit donc rsoudre un systme linaire de 5 quations 5 inconnues qui sont
, ..., (Attention !  = 1e 10).
On tape :
symb2poly((alpha*x+beta)*(x^3-p*x+q)+(gamma*x^2+delta*x+
eta)*(3*x^2-p),x)
On obtient :
poly1[alpha+3*gamma,beta+3*delta,-alpha*p-p*gamma+3*eta,
alpha*q-beta*p-p*delta,beta*q-p*eta]
La matrice A de ce systme est donc :

A=

1
0
3
0
0
0
1
0
3
0
p 0 p 0
3
q p 0 p 0
0
q
0
0 p

la matrice S de Sylvester est la transpose de A :

S=

1
0
3
0
0

0 p q
0
1 0 p q
0 p 0
0
3 0 p 0
0 3
0 p

On a det(A)=det(S)=-4*p^3+27*q^2
En fait on rsout U P +V Q = C avec C quelconque tel que deg(C)<deg(P )+deg(Q)
i.e. on cherche U et V tel que deg(U )<deg(Q) et deg(V )<deg(P ) (inegalites strictes)
vrifiant U P + V Q = 1. Lorsque le systme est de Cramer, il y a une solution
unique et ca correspond en arithmtique P et Q premiers entre eux (et rciproquement). Donc si det(A)=det(S) est non nul, U et V existent et sont uniques donc
les 2 polynmes x3 p x + q et 3 x2 p sont premiers entre eux et rciproquement si les 2 polynmes x3 p x + q et 3 x2 p sont premiers entre eux
U et V tel que deg(U )<deg(Q) et deg(V )<deg(P ) existent et sont uniques donc
det(A)=det(S) est non nul.
Donc si ce dterminant est nul les 2 polynmes x3 p x + q et 3 x2 p ne sont
pas premiers entre eux.
Remarque
On a : discriminant(P)=resultant(P,P)/lcoeff(P).
Un exemple dutilisation du rsultant
Soient 2 points fixes F 1 et F 2 et un point variable A sur le cercle de centre F 1 et
de rayon 2a. On veut trouver lquation cartsienne du lieu des points M intersection de F 1A et de la mdiatrice de F 2A : on a M F 1 + M F 2 = M F 1 + M A =
F 1A = 2a donc M dcrit une ellipse de foyers F 1 et F 2 et de grand axe 2a.
Choisisons comme repre orthonorm celui de centre F 1 et daxe Ox port par le

vecteur F 1F 2. On a :
A = (2a cos(); 2a sin()) o est langle (Ox, OA). On choisit comme paramtre t = tan(/2) pour que les coordonnes de A soient une fonction rationnelle

6.27. ARITHMTIQUE DES POLYNMES

369

du paramtre t. On a donc :
1 t2
2t
A = (ax; ay) = (2a
; 2a
)
1 + t2
1 + t2
On pose F 1F 2 = 2c et on note I le milieu de AF 2. On a :
F 2 = (2c, 0) et
1 t2 2t1 t2
I = (c + ax/2; ay/2) = (c + a
;a
)
1 + t2
1 + t2
IM est perpendiculaire AF 2 donc M = (x; y) vrifie lquation eq1 = 0 avec :
eq1 := (x ix) (ax 2 c) + (y iy) ay
M = (x; y) est sur F 1A donc M vrifie lquation eq2 = 0 avec :
eq2 := y/x ay/ax
On a :
resultant(eq1,eq2,t) est un polynme eq3 en x et y, eq3 est indpendant
de t et il existe des polynmes en t, U et V tels que : U (t)eq1+V (t)eq2 = eq3.
On tape :
ax:=2*a*(1-t^2)/(1+t^2);ay:=2*a*2*t/(1+t^2);
ix:=(ax+2*c)/2; iy:=(ay/2)
eq1:=(x-ix)*(ax-2*c)+(y-iy)*ay
eq2:=y/x-ay/ax
factor(resultant(eq1,eq2,t))
On obtient comme rsultant :
-(64(x^2+y^2)(x^2a^2-x^2c^2+-2xa^2c+2xc^3-a^4+
2a^2c^2+a^2 y^2-c^4))
Le facteur -64(x^2+y^2) ne sannule jamais donc lquation du lieu est :
x2 a2 x2 c2 + 2xa2 c + 2xc3 a4 + 2a2 c2 + a2 y 2 c4 = 0
En prenant lorigine du repre en O milieu de F 1F 2, on retrouve lquation cart
sienne de lellipse. Pour faire ce changement dorigine, on a F 1M = F 1O + OM ,
donc on tape :
normal(subst(x^2a^2-x^2c^2+-2 xa^2c+2xc^3-a^4+
2a^2c^2+a^2y^2-c^4,[x,y]=[c+X,Y]))
On obtient :
-c^2*X^2+c^2*a^2+X^2*a^2-a^4+a^2*Y^2
ou encore si on pose b2 = a2 c2
normal(subst(-c^2*X^2+c^2*a^2+X^2*a^2-a^4+a^2*Y^2,
c^2=a^2-b^2))
On obtient :
-a^2*b^2+a^2*Y^2+b^2*X^2
cest dire aprs division par a2 b2 , M vrifie lquation :
X2 Y 2
+ 2 =1
a2
b
Un autre exemple dutilisation du rsultant
Soient 2 points fixes F 1 et F 2 et un point variable A sur le cercle de centre F 1 et
de rayon 2a. On veut trouver lquation cartsienne de lenveloppe de la mdiatrice
D de F 2A (on sait que la mdiatrice de F 2A est tangente lellipse de foyers F 1
et F 2 et de grand axe 2a).
Choisisons comme repre orthonorm celui de centre F 1 et daxe Ox port par le

370

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

vecteur F 1F 2. On a :
A = (2a cos(); 2a sin()) o est langle (Ox, OA). On choisit comme paramtre t = tan(/2) pour que les coordonnes de A soient une fonction rationnelle
du paramtre t. On a donc :
1 t2
2t
A = (ax; ay) = (2a
; 2a
)
2
1+t
1 + t2
On pose F 1F 2 = 2c et on note I le milieu de AF 2. On a :
F 2 = (2c, 0) et
1 t2 2t1 t2
I = (c + ax/2; ay/2) = (c + a
;a
)
1 + t2
1 + t2
D est perpendiculaire AF 2 donc D a pour quation : eq1 = 0 avec :
eq1 := (x ix) (ax 2 c) + (y iy) ay
Lenveloppe de D est donc le lieu de M intersection de D et de D0 dquation
eq2 = 0 avec eq2 := dif f (eq1, t).
On tape :
ax:=2*a*(1-t^2)/(1+t^2);ay:=2*a*2*t/(1+t^2);
ix:=(ax+2*c)/2; iy:=(ay/2)
eq1:=normal((x-ix)*(ax-2*c)+(y-iy)*ay)
eq2:=normal(diff(eq1,t))
factor(resultant(eq1,eq2,t))
On obtient comme rsultant :
(-(64 a^2))(x^2+y^2)(x^2a^2-x^2c^2+-2xa^2c+2xc^3a^4+2a^2c^2+a^2y^2-c^4)
Le facteur -64(x^2+y^2) ne sannule jamais donc lquation du lieu est :
x2 a2 x2 c2 + 2xa2 c + 2xc3 a4 + 2a2 c2 + a2 y 2 c4 = 0
En prenant lorigine du repre en O milieu de F 1F 2, on retrouve comme prcdemment lquation cartsienne de lellipse :
X2 Y 2
+ 2 =1
a2
b

6.28

Polynmes orthogonaux

6.28.1

Polynme de Legendre : legendre

legendre a comme argument un entier n et eventuellement le nom de la variable


(x par dfaut).
legendre renvoie le polynme de Legendre de degr n : cest le polynme non
nul, solution de lquation diffrentielle :
(x2 1).y 00 2.x.y 0 n(n + 1).y = 0
Le polynme de Legendre de degr n not P (n, x) vrifie les relations :
P (0, x) = 1
P (1, x) = x
n1
P (n, x) = 2n1
n xP (n 1, x) n P (n 2, x)
Ces polynmes
R +1 sont orthogonaux pour le produit scalaire :
< f, g >= 1 f (x)g(x)dx
On tape :
legendre(4)

6.28. POLYNMES ORTHOGONAUX

371

On obtient :
(35*x^4+-30*x^2+3)/8
On tape :
legendre(4,y)
On obtient :
(35*y^4+-30*y^2+3)/8

6.28.2

Polynme de Hermite : hermite

hermite a comme argument un entier n et ventuellement le nom de la variable


(x par dfaut).
hermite renvoie le polynme de Hermite de degr n.
Le polynme de Hermite de degr n not P (n, x) vrifie les relations :
P (0, x) = 1
P (1, x) = 2x
P (n, x) = 2xP (n 1, x) 2(n 1)P (n 2, x)
Ces polynmes
pour le produit scalaire :
R +sont orthogonaux
2
x
< f, g >= f (x)g(x)e dx
On tape :
hermite(6)
On obtient :
64*x^6+-480*x^4+720*x^2-120
On tape :
hermite(6,y)
On obtient :
64*y^6+-480*y^4+720*y^2-120

6.28.3

Polynme de Laguerre : laguerre

laguerre a comme argument un entier n et eventuellement le nom de la variable


(x par dfaut) et du paramtre (a par dfaut).
laguerre renvoie le polynme de Laguerre de degr n et de paramtre a.
Le polynme de Laguerre de degr n de paramtre a not L(n, a, x) vrifie les
relations :
L(0, a, x) = 1
L(1, a, x) = 1 + a x
L(n, a, x) = 2n+a1x
L(n 1, a, x) n+a1
L(n 2, a, x)
n
n
Ces polynmes
R +sont orthogonaux pour le produit scalaire :
< f, g >= 0 f (x)g(x)xa ex dx
On tape :
laguerre(2)

372

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
(a^2+-2*a*x+3*a+x^2+-4*x+2)/2
On tape :
laguerre(2,y)
On obtient :
(a^2+-2*a*y+3*a+y^2+-4*y+2)/2
On tape :
laguerre(2,y,b)
On obtient :
1/2*b^2+-b*y+3/2*b+1/2*y^2-2*y+1

6.28.4

Polynme de Tchebychev de 1-ire espce : tchebyshev1

tchebyshev1 a comme argument un entier n et eventuellement le nom de la


variable (x par dfaut).
tchebyshev1 renvoie le polynme de Tchebychev de premire espce, de degr
n, not T (n, x).
On a :
T (n, x) = cos(n. arccos(x))
T (n, x) vrifie les relations :
T (0, x) = 1
T (1, x) = x
T (n, x) = 2xT (n 1, x) T (n 2, x)
Les polynmes T (n, x) sont orthogonaux pour le produit scalaire :
R +1
< f, g >= 1 f(x)g(x)
dx
1x2
On tape :
tchebyshev1(4)
On obtient :
8*x^4+-8*x^2+1
On tape :
tchebyshev1(4,y)
On obtient :
8*y^4+-8*y^2+1
et on a bien :
cos(4.x) = Re((cos(x) + i. sin(x))4 )
cos(4.x) = cos(x)4 6. cos(x)2 .(1 cos(x)2 ) + ((1 cos(x)2 )2 .
cos(4.x) = T (4, cos(x)).

6.29. BASE ET RDUCTION DE GRBNER

6.28.5

373

Polynme de Tchebychev de 2-ime espce : tchebyshev2

tchebyshev2 a comme argument un entier n et eventuellement le nom de la


variable (x par dfaut).
tchebyshev2 renvoie le polynme de Tchebychev de seconde espce, de degr
n, not U (n, x).
On a :
sin((n + 1). arccos(x))
U (n, x) =
sin(arccos(x))
ou encore
sin((n + 1)x) = sin(x) U (n, cos(x))
U (n, x) vrifie les relations :
U (0, x) = 1
U (1, x) = 2x
U (n, x) = 2xU (n 1, x) U (n 2, x)
Les polynmes
orthogonaux pour le produit scalaire :
R +1U (n, x) sont
< f, g >= 1 f (x)g(x) 1 x2 dx
On tape :
tchebyshev2(3)
On obtient :
8*x^3+-4*x
On tape :
tchebyshev2(3,y)
On obtient :
8*y^3+-4*y
en effet :
sin(4.x) = sin(x) (8 cos(x)3 4. cos(x)) = sin(x) U (3, cos(x)).

6.29

Base et rduction de Grbner

6.29.1

Base de Grbner : gbasis

gbasis a au moins deux arguments : une liste de polynmes de plusieurs variables et la liste du nom de ces variables.
gbasis renvoie une base de Grbner de lidal polynomial engendr par les polynmes donns dans le premier argument.
On choisit dordonner les monmes selon lordre lexicographique en accord avec
la liste donne par le dernier argument et selon les puissances dcroissantes : par
exemple on crira x2 y 4 z 3 puis x2 y 3 z 4 si le deuxime argument est [x, y, z]
car (2, 4, 3) > (2, 3, 4) mais on crira x2 y 3 z 4 puis x2 y 4 z 3 si le deuxime
argument est [x, z, y].
Si I est un idal et si (Gk )kK est une base de Grbner de lidal I alors, si F

374

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

est un polynme non nul de I, le terme dominant de F est divisible par le terme
dominant dun Gk .
Proprit : Si on fait la division euclidienne de F par un des Gk puis, si on recommence avec le reste obtenu et le Gk suivant, on finit par obtenir un reste nul.
On tape :
gbasis([2*x*y-y^2,x^2-2*x*y],[x,y])
On obtient :
[y^3,x*y+(-1/2)*y^2,x^2-y^2]
On peut donner des arguments supplmentaires :
plex (lexicographique pur utilis par dfaut)), tdeg (degr total puis ordre
lexicographique), revlex (degr total puis ordre lexicographique inverse),
pour spcifier un ordre sur les monmes diffrent de lordre par dfaut (qui
est plex),
with_cocoa=true ou with_cocoa=false, si on veut utiliser la librairie CoCoA pour faire le calcul de la base de Grbner.
with_f5=true ou with_f5=false pour utiliser limplmentation de
lalgorithme F5 de la librairie CoCoA. Lordre spcifi nest alors pas utilis,
les polynmes tant homogniss.
On tape :
gbasis([x1+x2+x3,x1*x2+x1*x3+x2*x3,x1*x2*x3-1],
[x1,x2,x3],tdeg,with_cocoa=false)
On obtient
[x3^3-1,-x2^2-x2*x3-x3^2,x1+x2+x3]

6.29.2

Rduction par rapport une base de Grbner : greduce

greduce a trois arguments : un polynme de plusieurs variables, une liste de


polynmes formant une base de Grbner dpendant des mmes variables et la liste
du nom de ces variables.
greduce renvoie la rduction ( une constante multiplicative prs) du polynme
donn dans le premier argument par rapport la base de Grbner donne dans le
deuxime argument.
On tape :
greduce(x*y-1,[x^2-y^2,2*x*y-y^2,y^3],[x,y])
On obtient :
1/2*y^2-1
ce qui veut dire que xy 1 = 12 (y 2 2) mod I o I est lidal engendr par la
base de Grbner [x2 y 2 , 2xy y 2 , y 3 ], puisque y 2 2 est le reste de la division
euclidienne de 2(xy 1) par G2 = 2xy y 2 .
Remarque

6.29. BASE ET RDUCTION DE GRBNER

375

La constante multiplicative peut tre dterminne en regardant comment le coefficient constant est transform. Dans lexemple, le terme constant -1 est transform
en le terme constant -2, donc le coefficient multiplicatif est 1/2.
On peut donner des arguments supplmentaires greduce comme pour gbasis
(plex(par dfaut),tdeg,plex...cf. 6.29.1), cest dailleurs ncessaire si on a calcul une base de Grbner avec un ordre diffrent de celui par dfaut, dans ce cas
greduce doit utiliser le mme ordre.
On tape :
greduce(x1^2*x3^2,[x3^3-1,-x2^2-x2*x3-x3^2,x1+x2+x3],
[x1,x2,x3],tdeg)
On obtient
x2

6.29.3

Test dappartenance dun polynme ou dune liste de polynmes un idal donn par une base de Groebner : in_ideal

in_ideal a trois (ou quatre) arguments : un polynme ou dune liste de polynmes, une liste donnant une base de Groebner, la liste des variables des polynmes.
On peut donner des arguments supplmentaires in_ideal comme pour gbasis
(plex(par dfaut),tdeg,plex...cf. 6.29.1), cest dailleurs ncessaire si on a calcul une base de Grbner avec un ordre diffrent de celui par dfaut (qui est lordre
lexicographique pur plex), dans ce cas in_ideal doit utiliser le mme ordre.
in_ideal teste si le polynme ou les polynmes du 1ier argument sont dans
lidal engendr par la base de Groebner,par rapport une liste de variables et renvoie vrai ou faux ou une liste compose de vrai ou de faux.
On tape :
in_ideal((x+y)^2,[y^2,x^2+2*x*y],[x,y])
On obtient
[vrai]
On tape :
in_ideal([(x+y)^2,x+y],[y^2,x^2+2*x*y],[x,y])
On obtient
[vrai,faux]
On tape :
in_ideal(x+y,[y^2,x^2+2*x*y],[x,y])
On obtient
[faux]
On tape :

376

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

|gbasis([x1+x2+x3,x1*x2+x1*x3+x2*x3,x1*x2*x3-1],|
[x1,x2,x3],tdeg)
in_ideal([(x1+x2+x3)^3,x1+x2+x3],[x1+x2+x3,-x2^2-x2*x3-x3^2,x3^3-1],
[x1,x2,x3],tdeg)
On obtient
[vrai,vrai]

6.29.4

Construire un polynme de n variables : genpoly

genpoly a trois arguments : un polynme P de n 1 variables, un entier b et le


nom dune variable var.
genpoly renvoie le polynme Q de n variables (celles de P et celle donne dans
largument), construit partir de P pour avoir :
subst(Q,var=b)=P et de plus les coefficients de Q sont dans lintervalle ]
b/2 ; b/2]
On tape :
genpoly(61,6,x)
On obtient :
2*x^2-2*x+1
En effet, on a : 61 = 62 + 4 6 + 1 mais les coefficients des puissances de 6 doivent
tre dans lintervalle ] 3 ; 3] donc on crit 61 = 2 62 2 6 + 1
On tape :
genpoly(5,6,x)
On obtient :
x-1
En effet : 5 = 6 1
On tape :
genpoly(7,6,x)
On obtient :
x+1
En effet : 7 = 6 + 1
On tape :
genpoly(7*y+5,6,x)
On obtient :
x*y+x+y-1
En effet : x y + x + y 1 = y(x + 1) + (x 1)
On tape :
genpoly(7*y+5*z^2,6,x)
On obtient :
x*y+x*z+y-z
En effet : x y + x z + y z = y (x + 1) + z (x 1)

6.30. LES FRACTIONS RATIONNELLES

6.30

Les fractions rationnelles

6.30.1

Numrateur : getNum

377

getNum a comme argument une fraction rationnelle et renvoie le numrateur de


cette fraction non simplifie.
On tape :
getNum((x^2-1)/(x-1))
On obtient :
x^2-1
On tape :
getNum((x^2+2*x+1)/(x^2-1))
On obtient :)
x^2+2*x+1

6.30.2

Numrateur aprs simplification : numer

numer a comme argument une fraction rationnelle et renvoie le numrateur de


cette fraction simplifie (voir aussi 6.9.3).
On tape :
numer((x^2-1)/(x-1))
On obtient :
x+1
On tape :
numer((x^2+2*x+1)/(x^2-1))
On obtient :
x+1

6.30.3

Dnominateur : getDenom

getDenom a comme argument une fraction rationnelle et renvoie le dnominateur


de cette fraction non simplifie.
On tape :
getDenom((x^2-1)/(x-1))
On obtient :
x-1
On tape :
getDenom((x^2+2*x+1)/(x^2-1))
On obtient :
x^2-1

378

6.30.4

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Dnominateur aprs simplification : denom

denom (ou getDenom) a comme argument une fraction rationnelle et renvoie le


dnominateur de cette fraction simplifie (voir aussi 6.9.4).
On tape :
denom((x^2-1)/(x-1))
On obtient :
1
On tape :
denom((x^2+2*x+1)/(x^2-1))
On obtient :
x-1

6.30.5

Numrateur et dnominateur : f2nd fxnd

f2nd (ou fxnd) a comme argument une fraction rationnelle et renvoie la liste
forme par le numrateur et le dnominateur de cette fraction simplifie (voir aussi
6.9.5).
On tape :
f2nd((x^2-1)/(x-1))
On obtient :
[x+1,1]
On tape :
f2nd((x^2+2*x+1)/(x^2-1))
On obtient :
[x+1,x-1]

6.30.6

Simplifier : simp2

simp2 a comme paramtre deux polynmes (ou deux entiers voir 6.9.6). Ces deux
polynmes sont considrs comme reprsentant une fraction rationnelle.
simp2 renvoie la fraction rationnelle simplifie sous la forme dune liste de deux
polynmes.
On tape :
simp2(x^3-1,x^2-1)
On obtient :
[x^2+x+1,x+1]

6.30. LES FRACTIONS RATIONNELLES

6.30.7

379

Rduire au mme dnominateur : comDenom

comDenom a comme paramtre une somme de fractions rationnelles.


comDenom renvoie cette somme sous la forme dune fraction rationnelle cest
dire renvoie cette somme aprs rduction au mme dnominateur des fractions
rationnelles la composant.
On tape :
comDenom(x-1/(x-1)-1/(x^2-1))
On obtient :
(x^3+-2*x-2)/(x^2-1)

6.30.8

Partie entire et fractionnaire : propfrac

propfrac a comme argument une fraction rationnelle.


propfrac renvoie cette fraction rationnelle crite de manire mettre en vidence sa partie entire.
A(x)
propfrac(A(x)/B(x)) crit la fraction rationnelle B(x)
aprs simplification
sous la forme :
R(x)
Q(x) +
B(x)
avec R(x) = 0 ou 0 degree(R(x)) < degree(B(x)).
On tape :
propfrac((5*x+3)*(x-1)/(x+2))
On obtient :
5*x-12+21/(x+2)

6.30.9

Dcomposition en lments simples : partfrac =>+

=>+ est la version postfixe de partfrac partfrac a comme argument


une fraction rationnelle.
partfrac renvoie sa dcomposition en lments simples.
Exemple :
Dcomposer en lments simples la fraction rationnelle :
x5 2x3 + 1
x4 2x3 + 2x2 2x + 1
On utilise la commande partfrac ou =>+.
On peut aussi utiliser convert avec loption parfrac ou partfrac ou fullparfrac
(voir aussi 6.23.26).
On tape :
(x^5-2*x^3+1)/(x^4-2*x^3+2*x^2-2*x+1)=>+
Ou on tape :
partfrac((x^5-2*x^3+1)/(x^4-2*x^3+2*x^2-2*x+1))

380

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient en mode rel :


x+2-1/(2*(x-1))+(x-3)/(2*(x^2+1))
On obtient en mode complexe :
x+2+1/((x-1)*-2)+(1-3*i)/((x+i)*4)+(1+3*i)/((x-i)*4)

6.30.10

Dcomposition en lments simples sur C : cpartfrac

cpartfrac a comme argument une fraction rationnelle.


cpartfrac renvoie sa dcomposition en lments simples sur C que lon soit en
mode rel ou complexe.
Exemple :
Dcomposer en lments simples la fraction rationnelle :
x5 2x3 + 1
x4 2x3 + 2x2 2x + 1
On utilise la commande cpartfrac.
On tape :
cpartfrac((x^5-2*x^3+1)/(x^4-2*x^3+2*x^2-2*x+1))
On obtient en mode rel ou en mode complexe :
x+2+(-1+2*i)/((2-2*i)*((i)*x+1))+1/(2*(-x+1))+
(-1-2*i)/((2-2*i)*(x+i))

6.31

Racines exactes dun polynme

6.31.1

Encadrement exact des racines complexes dun polynme :


complexroot

complexroot a 2 ou 4 arguments : un polynme et un nombre rel  et ventuellement deux complexes , .


Si complexroot a 2 arguments, complexroot renvoie la liste des intervalles complexes contenant la valeur des racines complexes et exactes du polynme et leur multiplicit (par exemple i[1,1.1]+i[3.1,3.2]*i pour dire que
le rectangle [1,1.1]x[3.1,3.2] contient une racine complexe du polynme) et
la multiplicit de cette racine.
Si lintervalle est [a1 + ib1 , a2 + ib2 ] on a |a1 a2 | <  et |b1 b2 | <  et
la racine a + ib vrifie a1 a a2 et b1 b b2 .
Si complexroot a 4 arguments, complexroot ne renvoie que les racines situes dans le rectangle de cts parallles aux axes et de sommets
opposs , .
On tape pour avoir les racines de x3 + 1 :
complexroot(x^3+1,0.1)
On obtient :

6.31. RACINES EXACTES DUN POLYNME

381

[[i[-1.0000000000036,-0.99999999999633],1],
[i[0.49999999999909,0.50000000000091] i[0.86602540378354,0.86602540378536]*i,1],[i[0.49999999999909,0.50000000000091]
+i[0.86602540378354,0.86602540378536]*i,1]]
Donc pour x3 + 1 :
-1 est une racine de multiplicit 1,
1/2i*b est une racine de multiplicit 1 avec 7/8 b 13/16,
1/2i*c est racine de multiplicit1 avec 13/1 c 7/8.
On tape pour avoir les racines de x3 + 1 dans le rectangle de sommets opposs
1, 1 + 2 i :
complexroot(x^3+1,0.1,-1,1+2*i)
On obtient :
[[i[-1.0000000000036,-0.99999999999633],1],
[i[0.49999999999909,0.50000000000091]
+i[0.86602540378354,0.86602540378536]*i,1]]
On tape pour avoir les racines de x3 + 1 dans le rectangle de sommets opposs
0, 1 + 2 i :
complexroot(x^3+1,0.1,0,1+2*i)
On obtient :
[[i[0.49999999999909,0.50000000000091]
+i[0.86602540378354,0.86602540378536]*i,1]]

6.31.2

Encadrement exact des racines relles dun polynme avec leur


multiplicit : realroot

realroot a 1 ou 4 arguments : un polynme et un nombre rel l et ventuellement deux rels a, b et cherche les racines relles du polynme en utilisant lalgorithme de Vincent-Akritas-Strzebonski (VAS).
On peut aussi utiliser un argument supplmentaire pour dire que lalgorithme utilise les suites de Sturm : on met alors sturm comme premier argument. Mais les
rsultats seront moins prcis.
realroot(P,l,a,b) et realroot(sturm,P,l,a,b) renvoient la liste
des intervalles de longueur <=l o se trouvent les racines relles de P situes
dans a..b avec leur multiplicit. realroot(P,l,a,b) utilise lalgorithme de
Vincent-Akritas-Strzebonski (VAS) alors que realroot(sturm,P,l,a,b)
utilise les suites de Sturm qui sont moins efficaces.
Si realroot a 1 argument (resp 2 arguments), realroot(P) (resp realroot(sturm,P))
renvoie la liste des intervalles o se trouvent les racines relles de P avec leur
multiplicit en utilisant lalgorithme de Vincent-Akritas-Strzebonski (VAS)
(resp en utilisant les suites de Sturm). Lalgorithme sarrte ds quil a trouv
un intervalle qui contient une racine.
On tape :

382

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

realroot(x^3-7*x+7)
On obtient :
[[[-4,0],1],[[1,3/2],1],[[3/2,2],1]]
Ce qui veut dire quil y a une racine dans lintervalle [-4,0] qui est de multiplicit 1, une racine dans lintervalle [1,3/2] qui est de multiplicit 1 et une
racine dans lintervalle [3/2,2] qui est de multiplicit 1.
On tape :
realroot(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
[[[-5,-1],1],[-1,2],[[1,3/2],1],[[3/2,2],1]]
Ce qui veut dire que -1 est une racine de multiplicit 2, les 3 autres racines
sont de multiplicit 1 et se trouve dans les intervalles [-5,-1],[1,3/2],[3/2,2].
On tape :
realroot(125*x^3-700*x^2+1225*x-686)
On obtient :
[[[1,2],2],[[2,4],1]]
Ce qui veut dire quil y a une racine de multiplicit 2 dans lintervalle [1,2]
et une racine de multiplicit 1 dans lintervalle [2,4].
Si realroot a 2 arguments (resp 3 arguments), realroot(P,l) (resp
realroot(sturm,P,l)) renvoie la liste des vecteurs de coordonnes la
valeur des racines relles et exactes du polynme et leur multiplicit ou des
vecteurs de coordonnes un intervalle contenant une racine relle du polynme et la multiplicit de cette racine.
Si lintervalle renvoy est [a1 , a2 ] on a |a1 a2 | < l et la racine x1 vrifie
a1 x1 a2 . On tape :
realroot(x^5+2*x^4-6*x^3-7*x^2+7*x+7,1e-5)
On obtient :
[[[-1598513/524288,-1598509/524288],1],[-1,2],
[[2845609/2097152,2845625/2097152],1],
[[3548417/2097152,3548433/2097152],1]]
ce qui donne en valeurs approches :
[[[-3.04892158508,-3.04891395569],1.0],[-1.0,2.0],
[[1.35689210892,1.35689973831],1.0],
[[1.6920170784,1.69202470779],1.0]] On tape :
realroot(sturm,x^5+2*x^4-6*x^3-7*x^2+7*x+7,1e-5)
On obtient :
[[[-99907/32768,-399627/131072],1],
[[177851/131072,44463/32768],1],
[[13861/8192,221777/131072],1],[-1,2]]
ce qui donne en valeurs approches :
[[[-3.04891967773,-3.04891204834],1.0],
[[1.35689544678,1.35690307617],1.0],
[[1.69201660156,1.69202423096],1.0],[-1.0,2.0]]
On tape :
realroot(x^3-7*x+7,1e-5)
On obtient :
[[[-1598513/524288,-1598509/524288],1], [[2845609/2097152,2845625/
[[3548417/2097152,3548433/2097152],1]]

6.31. RACINES EXACTES DUN POLYNME

383

ce qui donne en valeurs approches :


[[[-3.04892158508,-3.04891395569],1.0],
[[1.35689210892,1.35689973831],1.0],
[[1.6920170784,1.69202470779],1.0]]
Si realroot a 4 arguments (resp 5 arguments), realroot(P,l,a,b)
(resp realroot(sturm,P,l,a,b)) ne renvoie que les racines situes
dans lintervalle [a, b].
On tape pour avoir les racines relles de x3 + 1 :
realroot(x^3+1, 0.1)
On obtient :
[[-1,1]]
On tape pour avoir les racines relles de x3 x2 2x + 2 :
realroot(x^3-x^2-2*x+2, 0.1)
On obtient :
[[[-3/2,-45/32],1],[1,1],[[11/8,23/16],1]]
ou bien
realroot(sturm,x^3-x^2-2*x+2, 0.1)
On obtient :
[[1,1],[[(-3)/2,(-45)/32],1],[[45/32,3/2],1]]
On tape pour avoir les racines relles de x3 x2 2x + 2 dans lintervalle [0; 2] :
realroot(x^3-x^2-2*x+2, 0.1,0,2)
ou
realroot(sturm,x^3-x^2-2*x+2, 0.1,0,2)
On obtient :
[[1,1],[[11/8,23/16],1]]

6.31.3

Encadrement exact des racines relles dun polynme : VAS

VAS(P) renvoie une liste dintervalles disolation des racines relles deP par
lalgorithme de Vincent-Akritas-Strzebonski. Cela ne fait que calculer des intervalles disolation des racines.
On tape :
VAS(x^3-7*x+7)
On obtient :
[[-4,0],[1,3/2],[3/2,2]]
On tape :

384

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

VAS(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
[[-5,-1],-1,[1,3/2],[3/2,2]]
On tape :
VAS(x^3-x^2-2*x+2)
On obtient :
[[-3,0],1,[1,3]]

6.31.4

Encadrement exact des racines relles positives dun polynme :


VAS_positive

VAS_positive(P) renvoie une liste dintervalles disolation des racines


relles positives de P par lalgorithme de Vincent-Akritas-Strzebonski. Cela ne fait
que calculer des intervalles disolation des racines.
On tape :
VAS_positive(x^3-7*x+7)
On obtient :
[[1,3/2],[3/2,2]]
On tape :
VAS_positive(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
[[1,3/2],[3/2,2]]
On tape :
VAS_positive(x^3-x^2-2*x+2)
On obtient :
[1,[1,3]]

6.31.5

Borne suprieure des racines relles positives dun polynme :


posubLMQ

posubLMQ(P) renvoie une borne suprieure pour les racines positives de P


par lalgorithme Akritas-Strzebonski-Vigklas Local Max Quadratic (LMQ). Cette
borne nest pas optimale.
On tape :
posubLMQ(x^3-7*x+7)
On obtient :
4
On tape :
posubLMQ(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
4
On tape :
posubLMQ(x^3-x^2-2*x+2)
On obtient :
3

6.31. RACINES EXACTES DUN POLYNME

6.31.6

385

Borne infrieure des racines relles positives dun polynme :


poslbdLMQ

poslbdLMQ(P) renvoie une borne infrieure pour les racines positives de P


par lalgorithme Akritas-Strzebonski-Vigklas Local Max Quadratic (LMQ). Cette
borne nest pas optimale.
On tape :
poslbdLMQ(x^3-7*x+7)
On obtient :
1/2
On tape :
poslbdLMQ(x^5+2*x^4-6*x^3-7*x^2+7*x+7)
On obtient :
1/2
On tape :
poslbdLMQ((x^3-x^2-2*x+2)
On obtient :
1/2

6.31.7

Valeurs exactes des racines rationnelles dun polynme : rationalroot

rationalroot a 1 ou 3 arguments : un polynme et ventuellement deux rels


, .
Si rationalroot a 1 argument, rationalroot renvoie la liste forme
par la valeur des racines rationnelles du polynme sans indiquer la multiplicit de ces racines.
Si rationalroot a 3 arguments, rationalroot ne renvoie que les
racines rationnelles situes dans lintervalle [, ].
On tape pour avoir les racines rationnelles de 2 x3 3 x2 8 x + 12 :
rationalroot(2*x^3-3*x^2-8*x+12)
On obtient :
[2,3/2,-2]
On tape pour avoir les racines rationnelles de 2 x3 3 x2 8 x + 12 dans
[1; 2] :
rationalroot(2*x^3-3*x^2-8*x+12,1,2)
On obtient :
[2,3/2]
On tape pour avoir les racines rationnelles de 2 x3 3 x2 + 8 x 12 :
rationalroot(2*x^3-3*x^2+8*x-12)
On obtient :
[3/2]

386

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape pour avoir les racines rationnelles de 2 x3 3 x2 + 8 x 12 :


rationalroot(2*x^3-3*x^2+8*x-12)
On obtient :
[3/2]
On tape pour avoir les racines rationnelles de (3 x 2)2 (2x + 1)) = 18 x3
15 x2 4 x + 4 :
rationalroot(18*x^3-15*x^2-4*x+4)
On obtient :
[(-1)/2,2/3]

6.31.8

Valeurs exactes des racines complexes rationnelles dun polynme : crationalroot

crationalroot a 1 ou 3 arguments : un polynme et ventuellement deux complexes , .


Si crationalroot a 1 argument, crationalroot renvoie la liste des
valeurs des racines complexes rationnelles du polynme sans indiquer la
multiplicit de ces racines.
Si crationalroot a 3 arguments, crationalroot ne renvoie que les
racines complexes rationnelles situes dans le rectangle de sommets opposs
[, ].
On tape pour avoir les racines rationnelles et complexes de (x2 + 4) (2x 3) =
2 x3 3 x2 + 8 x 12 :
crationalroot(2*x^3-3*x^2+8*x-12)
On obtient :
[2*i,3/2,-2*i]

6.32

Fraction rationnelle, ses racines et ses ples exacts

6.32.1

Racines et ples exacts dune fraction rationnelle : froot

froot a comme argument une fraction rationnelle F (x).


froot renvoie un vecteur de composantes les racines et les ples de F (x) suivis
de leur multiplicit.
Xcas renvoie les valeurs exactes de ces racines ou ples quand cela est possible et
sinon renvoie leur valeurs numriques.
On tape :
froot((x^5-2*x^4+x^3)/(x-2))
On obtient :
[1,2,0,3,2,-1]

6.33. LE CALCUL MODULAIRE DANS Z/P Z OU DANS Z/P Z[X]


donc pour F (x) =

387

x5 2.x4 + x3
:
x2

1 est racine double,


0 est racine triple et
2 est un ple dordre 1.
On tape :

froot((x^3-2*x^2+1)/(x-2))
On obtient :
[1,1,(1+sqrt(5))/2,1,(1-sqrt(5))/2,1,2,-1]
Remarque : pour avoir les racines et les ples complexes il faut avoir coch Complexe
dans la configuration du cas (bouton donnant la ligne dtat).
On tape :
froot((x^2+1)/(x-2))
On obtient :
[-i,1,i,1,2,-1]

6.32.2

Coefficients dune fraction rationnelle dfinie par ses racines


et ses ples : fcoeff

fcoeff a comme argument un vecteur de composantes les racines et les ples


dune fraction rationnelle F (x) suivis de leur multiplicit.
fcoeff renvoie la fraction rationnelle F (x).
On tape :
fcoeff([1,2,0,3,2,-1])
On obtient :
(x-1)^2*x^3/(x-2)

6.33

Le calcul modulaire dans Z/pZ ou dans Z/pZ[x]

On peut faire des calculs modulo p cest dire dans Z/pZ ou dans Z/pZ[x] et
la faon de sy prendre dpends de la syntaxe choisie :
En mode Xcas, les nombres n de Z/pZ sont nots n% p.
Exemples de notation
un entier n de Z/13Z
n:=12% 13.
un vecteur V de coordonnes dans Z/13Z
V:=[1,2,3]% 13 ou V:=[1% 13,2% 13,3% 13].
une matrice A de coefficients dans Z/13Z
A:=[[1,2,3],[2,3,4]]% 13 ou
A:=[[1% 13,2% 13,3% 13],[2% 13,3% 13,4% 13]].
un polynme A de Z/13Z[x] en reprsentation symbolique
A:=(2*x^2+3*x-1)%13 ou
A:=2%13*x^2+3%13*x-1%13.

388

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

un polynme A de Z/13Z[x] en reprsent avec une liste


A:=poly1[1,2,3]%13 ou A:=poly1[1%13,2%13,3%13].
Pour transformer un objet o coefficients modulaires en un objet coefficients entiers tapez o % 0. Par exemple, si on tape o:=4% 7 puis o% 0,
on obtient -3.
En mode Maple, on nutilise pas % pour reprsenter les entiers modulo
p : ces entiers sont reprsents comme les entiers usuels et pour eviter les
confusions on utilise les commandes commenant par une majuscule que
lon fait suivre par la commande mod (on se repotera la section suivante).
Remarques
Pour certaines commandes dans Z/pZ ou dans Z/pZ[x], il faut choisir un
nombre p premier.
La reprsentation choisie est la reprsentation symtrique :
11%13 = -2%13.

6.33.1

Dvelopper et rduire : normal

normal a comme argument une expression polynomiale.


normal dveloppe et rduit cette expression dans Z/pZ[x].
On tape :
normal(((2*x^2+12)*( 5*x-4))% 13)
On obtient :
(-3% 13)*x^3+(5% 13)*x^2+(-5%13)*x+4% 13

6.33.2

Addition dans Z/pZ ou dans Z/pZ[x] : +

Pour raliser une addition dans Z/pZ, on utilise le + habituel et, pour les polynmes de Z/pZ[x], on utilise le + habituel et la commande normal pour simplifier.
Pour les entiers dans Z/pZ, on tape :
3% 13+10% 13
On obtient :
0%13
Pour les polynmes coefficients dans Z/pZ, on tape :
normal(11% 13*x+5% 13+8% 13*x+6% 13)
ou encore
normal((11*x+5 )% 13+(8*x+6)% 13)
On obtient :
(6%13)*x+-2% 13

6.33. LE CALCUL MODULAIRE DANS Z/P Z OU DANS Z/P Z[X]

6.33.3

389

Soustraction dans Z/pZ ou Z/pZ[x] : -

Pour raliser une soustraction dans Z/pZ, on utilise le - habituel et, pour les
polynmes de Z/pZ[x], on utilise le - habituel et la commande normal pour
simplifier.
Pour les entiers dans Z/pZ, on tape :
31% 13-10% 13
On obtient :
-5% 13
Pour les polynmes coefficients dans Z/pZ, on tape :
normal(11% 13*x+5% 13-8% 13*x+6% 13)
ou encore
normal((11*x+5)% 13-(8*x+6)% 13)
On obtient :
(3% 13)*x+-1% 13

6.33.4

Multiplication dans Z/pZ ou Z/pZ[x] : *

Pour raliser une multiplication dans Z/pZ, on utilise le * habituel et, pour les
polynmes de Z/pZ[x], on utilise le * habituel puis la commande normal pour
simplifier.
Pour les entiers dans Z/pZ, on tape :
31% 13*10% 13
On obtient :
-2% 13
Pour les polynmes coefficients dans Z/pZ, on tape :
normal((11% 13*x+5% 13)*(8% 13*x+6% 13))
ou encore on tape :
normal((11*x+5)% 13*(8*x+6 )% 13)
On obtient :
(-3% 13)*x^2+(2% 13)*x+4% 13

390

6.33.5

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Quotient : quo

quo a comme arguments deux polynmes A et B coefficients dans Z/pZ. A et B


peuvent tre donns par une expression polynmiale symbolique (de x ou du nom
de variable donn comme troisime argument) ou par la liste de leur coefficients.
quo renvoie le quotient de la division euclidienne de A par B dans Z/pZ[x].
On tape :
quo((x^3+x^2+1)% 13,(2*x^2+4)% 13)
Ou on tape :
quo((x^3+x^2+1,2*x^2+4)% 13)
On obtient :
(-6% 13)*x+-6% 13
x+1
5x 4
en effet x3 + x2 + 1 = (2x2 + 4)(
)+
2
4
et que 3 4 = 6 2 = 1 mod 13

6.33.6

Remainder : rem

rem a comme arguments deux polynmes A et B coefficients dans Z/pZ. A et B


peuvent tre donns par une expression polynmiale symbolique (de x ou du nom
de variable donn comme troisime argument) ou par la liste de leur coefficients.
rem renvoie le reste de la division euclidienne de A par B dans Z/pZ[x].
On tape :
rem((x^3+x^2+1)% 13,(2*x^2+4)% 13)
Ou on tape :
rem((x^3+x^2+1,2*x^2+4)% 13)
On obtient :
(-2% 13)*x+-1% 13
x+1
5x 4
en effet x3 + x2 + 1 = (2x2 + 4)(
)+
2
4
et que 3 4 = 6 2 = 1 mod 13

6.33.7

Quotient and remainder : quorem

quorem a comme arguments deux polynmes A et B coefficients dans Z/pZ.


A et B peuvent tre donns par une expression polynmiale symbolique (de x
ou du nom de variable donn comme troisime argument) ou par la liste de leur
coefficients.
quorem renvoie la liste du quotient et du reste de la division euclidienne de A par
B dans Z/pZ[x] (voir aussi 6.7.13 et 6.27.6).
On tape :

6.33. LE CALCUL MODULAIRE DANS Z/P Z OU DANS Z/P Z[X]

391

quorem(5% 13,2% 13)


Ou on tape :
quorem((5,2)% 13)
et puisque 2 4 = 5 13
On obtient :
[-4% 13,0]
On tape :
quorem((x^3+x^2+1)% 13,(2*x^2+4)% 13)
Ou on tape :
quorem((x^3+x^2+1,2*x^2+4)% 13)
x+1
5x 4
puisque x3 + x2 + 1 = (2x2 + 4)(
)+
2
4
et que 3 4 = 6 2 = 1 mod 13
On obtient :
[(-6% 13)*x+-6% 13,(-2% 13)*x+-1% 13]

6.33.8

Division dans Z/pZ ou Z/pZ[x] : /

/ divise deux entiers dans Z/pZ, ou divise deux polynmes A et B dans Z/pZ[x].
A
simplifie dans Z/pZ[x].
Pour les polynmes, le rsultat est la fraction rationnelle B
Pour les entiers dans Z/pZ, on tape :
5% 13/2% 13
On obtient :
-4% 13
puisque 2 est inversible dans Z/13Z.
Pour les polynmes coefficients dans Z/pZ.
On tape :
(2*x^2+5)% 13/(5*x^2+2*x-3)% 13
On obtient :
((6% 13)*x+1% 13)/((2% 13)*x+2% 13)

392

6.33.9

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Puissance dans Z/pZ et dans Z/pZ[x] :

Pour calculer a la puissance n dans Z/pZ on utilise loprateur ^.


On tape :
(5% 13)^2)
On obtient :
-1% 13
Pour calculer A la puissance n dans Z/pZ[x] on utilise loprateur ^ et la commande normal.
On tape :
normal(((2*x+1)% 13)^5)
On obtient :
(6% 13)*x^5+(2% 13)*x^4+(2% 13)*x^3+(1% 13)*x^2+(-3%
13)*x+1% 13
car :
10 = 3 (mod 13) 40 = 1 (mod 13) 80 = 2 (mod 13) 32 = 6 (mod 13).

6.33.10

Calcul de an mod p ou de A(x)n mod (x), p : powmod powermod

Pour calculer dans [0; p 1] an mod p on utilise la commande powmod ou


powermod avec comme argument a, n, p. On tape :
powmod(5,21,13)
On obtient :
5
On tape :
powmod(5,21,8)
On obtient :
5
Pour calculer A(x)n mod (x), p avec en rponse un polynme coefficients dans Z (qui seront des restes symtriques de division par p), on utilise
la commande powmod ou powermod avec comme argument A(x), n, p, P (x).
On tape :
powmod(x+1,17,5,x^4+x+1)
On obtient :
-x^3-x^2
On a en effet :

rem((x+1)^17,x^4+x+1)

6.33. LE CALCUL MODULAIRE DANS Z/P Z OU DANS Z/P Z[X]

393

qui renvoie :
29144*x^3+36519*x^2+12270*x-4185 et
(29144*x^3+36519*x^2+12270*x-4185)% 5 qui renvoie :
(-1 % 5)*x^3+(-1 % 5)*x^2
et
((-1 % 5)*x^3+(-1 % 5)*x^2)% 0
qui renvoie :
-x^3-x^2
Remarque (cf section 6.33.9)
Si on peut calculer une puissance dans Z/pZ on tape par exemple :
:
(5% 13)^21)
On obtient :
5% 13
On tape :
(5% 8)^21)
On obtient :
-3% 8

6.33.11

Inverse dans Z/pZ : inv ou /

On calcule linverse dun entier n dans Z/pZ en tapant 1/n% p ou inv(n%


p) ou inverse(n% p).
On tape :
inv(3% 13)
On obtient :
-4% 13
En effet : 3 4 = 12 = 1 (mod 13)

6.33.12

Transformer un entier en sa fraction modulo p : fracmod


iratrecon

fracmod (ou iratrecon pour compatibilit Maple) a deux arguments, un entier n (ou une expression entire) et un nombre entier p.
fracmod renvoie une fraction a/b vrifiant :

p
p
p

<a
, 0b<
, n b = a (mod p)
2
2
2
En dautres termes n = a/b (mod p).
On tape :
fracmod(3,13)

394

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
-1/4
En effet on a : -1/4 mod 13 renvoie 3 % 13 i.e.
3 4 = 12 = 1 (mod 13) donc 3% 13 = 1/4% 13. On tape :
fracmod(13,121)
On obtient :
-4/9
En effet on a : -4/9 mod 121 renvoie 13 % 121 i.e.
: 13 9 = 117 = 4 (mod 121) donc 13% 121 = 4/9% 121.

6.33.13

PGCD dans Z/pZ[x] : gcd

Lorsque gcd a deux polynmes coefficients dans Z/pZ comme arguments (p


doit tre premier).
gcd calcule le PGCD des deux polynmes dans Z/pZ[x] (voir aussi 6.27.7 pour
les polynmes coefficients non modulaires).
On tape :
gcd((2*x^2+5)% 13,(5*x^2+2*x-3)% 13)
On obtient :
(-4% 13)*x+5% 13
On tape :
gcd(x^2+2*x+1,x^2-1) mod 5
On obtient :
1
Mais si on tape :
gcd((x^2+2*x+1,x^2-1)) mod 5)
gcd est calcul dans Z[X] puis le calcul modulaire est effectu, on obtient :
x% 5

6.33.14

Factorisation dans Z/pZ[x] : factor factoriser

factor a comme argument un polynme coefficients dans Z/pZ.


factor factorise ce polynme dans Z/pZ[x] (p doit tre premier).
On tape :
factor((-3*x^3+5*x^2-5*x+4)% 13)
On obtient :
((1% 13)*x+-6% 13)*((-3% 13)*x^2+-5% 13)

6.33. LE CALCUL MODULAIRE DANS Z/P Z OU DANS Z/P Z[X]

6.33.15

395

Dterminant dune matrice de Z/pZ : det

det a comme argument une matrice A coefficients dans Z/pZ.


det renvoie le dterminant de cette matrice A.
On tape :
det([[1,2,9]% 13,[3,10,0]% 13,[3,11,1]% 13])
Ou on tape :
det([[1,2,9],[3,10,0],[3,11,1]]% 13)
On obtient :
5% 13
donc, dans Z/13Z, le dterminant de la matrice A = [[1, 2, 9], [3, 10, 0], [3, 11, 1]]
est 5% 13 (on a det(A)=31).

6.33.16

Inverse dune matrice de Z/pZ : inv inverse

inverse (ou inv) a comme argument une matrice A coefficients dans Z/pZ.
inverse (ou inv) renvoie, linverse de la matrice A dans Z/pZ.
On tape :
inverse([[1,2,9]% 13,[3,10,0]% 13,[3,11,1]% 13])
Ou on tape :
inv([[1,2,9]% 13,[3,10,0]% 13,[3,11,1]% 13])
Ou on tape :
inverse([[1,2,9],[3,10,0],[3,11,1]]% 13)
Ou on tape :
inv([[1,2,9],[3,10,0],[3,11,1]]% 13)
On obtient :
[[2% 13,-4% 13,-5% 13],[2% 13,0% 13,-5% 13], [-2%
13,-1% 13,6% 13]]
cest linverse de la matrice A = [[1, 2, 9], [3, 10, 0], [3, 11, 1]] dans Z/13Z.

6.33.17

Rsolution dun systme linaire de Z/pZ : rref

rref permet de rsoudre, dans Z/pZ, un systme dquations linaires de la


forme : Ax = B (voir aussi 6.55.3).
Largument est une matrice forme par A borde avec B comme dernier vecteur
colonne. Le rsultat est une matrice forme de A1 et de B1 o, A1 a des zros
de part et dautre de la diagonale et o, le systme A1 x = B1 est quivalent
Ax = B.
Rsoudre dans Z/13Z

x + 2y = 9
3 x + 10 y = 0
On tape :

396

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


rref([[1, 2, 9]% 13,[3,10,0]% 13])

Ou on tape :
rref([[1, 2, 9],[3,10,0]])%13
On obtient :
[[1% 13,0% 13,3% 13],[0% 13,1% 13,3% 13]]
ce qui veut dire que x=3% 13 et y=3% 13.

6.33.18

Construction dun corps de Galois : GF

Dans sa forme la plus simple, GF a comme arguments un nombre premier p et


un entier n > 1 ou la puissance dun nombre premier pn et un argument optionnel
qui est le nom de variable choisi pour le gnrateur du corps (la variable doit tre
purge au pralable).
GF cre un corps de Galois de caractristique p et ayant pn lments, les lments
du corps sont alors 0 et les puissances de 0 pn 2 du gnrateur. Le corps
lui-mme est stock dans une variable libre (par dfaut K, cette variable est affiche par le systme, en mme temps que le nom du gnrateur et de la variable
libre, par dfaut k, servant reprsenter les lements du corps comme le quotient
Z/pZ[k]/P (k) o P est un polynme irrductible et primitif).
Par exemple :
GF(3,5) ou GF(3^5) cre un corps ayant 35 lments dont le gnrateur
est g (ou h, ... si g est affecte). On peut crer un lment du corps en prenant
un polynme en fonction de g, par exemple g 10 + 5g + 1.
GF(2,8,a) cre un corps ayant 28 lments, et utilise la variable a pour en
dsigner le gnrateur (attention, faire purge(a) auparavant si ncessaire).
La commande pmin permet de connaitre le polynme minimal dun lment
du corps.
On peut ensuite crer des polynmes ou des matrices ayant des coefficients dans
le corps, et les manipuler avec les instructions habituelles + - * / inv sqrt,
quo, rem, quorem, diff, factor, gcd. egcd, ... par exemple :
GF(3,5,b); A:=[[1,b],[b,1]]; inv(A) calcule linverse dune
matrice coefficients dans le corps 35 lments
GF(5,3,c); p:=x^2-c-1; factor(p) factorise le polynme p comme
polynme coefficients dans le corps 53 lments, on en dduit une valeur
de racine carre de c + 1.
p:=randpoly(x,5,g); q:=diff(p); gcd(p,q) gnere un polynme coefficients alatoires puis calcule sa drive et le PGCD ce qui permet de savoir si p a des racines multiples.
Il y a encore quelques limitations dues une implmentation incomplte de certains
algorithmes (par exemple factorisation plusieurs variables lorsque le polynme
nest pas unitaire).
Dans sa forme la plus complte (mais plus difficile manipuler et moins lisible), les lments de ce corps et le corps lui-mme sont reprsents par GF(...)
o ... est une squence compose de :
la caractristique p (px = 0),

6.33. LE CALCUL MODULAIRE DANS Z/P Z OU DANS Z/P Z[X]

397

le polynme minimal irrductible (primitif sil est cr par giac) engendrant


un idal I dans Z/pZ[X], le corps de Galois est alors le quotient de Z/pZ[X]
par I,
le nom de la variable du polynme, par dfaut x,
un polynme (un reste modulo le polynme minimal) pour dsigner un lment du corps (ces lments ont une reprsentation additive) ou undef pour
dsigner tout le corps qui est le quotient des polynmes coefficients dans
Z/pZ par I.
Habituellement on donne un nom au corps cre (par exemple G:=GF(p,n)), afin
de construire un lment particulier du groupe partir dun polynme de Z/pZ[X],
on crira par exemple G(x^3+x). Notez que G(x) est un gnrateur du groupe
multiplicatif G lorsque le polynme minimal est gnr par giac.
On tape :
G:=GF(2,8)
On obtient (par exemple) :
GF(2,k^8-k^7-k^6-k-1,k,undef)
Le corps G a 28 = 256 lments et g = G(k) engendre le groupe multiplicatif de
ce corps ({1, g, g 2 , ...g 254 }).
On tape :
K(k^9)
On obtient :
g^6+g^2+1)
On tape :
K(k)^255
On obtient 1. Comme vous pouvez le constater sur les exemples prcdents, lorsque
lon travaille avec le mme corps, les rponses contiennent des informations redondantes. Cest pourquoi la dfinition dun corps peut avoir un troisime argument :
le nom du gnrateur ou une liste contenant deux noms ou trois noms de variable
formelle, (le nom de lindtermine du polynme irrductible et le nom du corps
de Galois que lon doit mettre entre quote pour que ces variables ne soient pas
values ainsi que le nom du gnrateur). Cela permet dobtenir un affichage plus
compact des lments du corps.
On tape :
G:=GF(2,2,[w,G]):; G(w^2)
On obtient :
Done, G(w+1)
On tape :
G(w^3)

398

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
G(1)
Les lments de GF(2,2) sont donc : 0,1,w,w^2=w+1.
On peut enfin indiquer quel polynme irrductible on souhaite utiliser, en lindiquant en 2-ime paramtre (au lieu de n), par exemple :
G:=GF(2,w^8+w^6+w^3+w^2+1,[w,G])
Si on donne un polynme irrductible non primitif, Xcas lindique et propose un
remplacement par un polynme primitif, par exemple :
G:=GF(2,w^8+w^7+w^5+w+1,[w,G])
On obtient :
G:=GF(2,w^8-w^6-w^3-w^2-1,[w,G],undef)

6.33.19

Factorisation dun polynme coefficients dans un corps de


Galois : factor

On peut factoriser un polynme coefficients dans un corps de Galois avec


factor.
On tape par exemple pour avoir G=F4 :
GF(2,2,a)
On obtient :
GF(2,k^2+k+1,[k,K,a],undef)
On tape par exemple :
factor(a^2*x^2+1))
On obtient :
(a+1)*(x+a+1)^2

6.34

Le calcul modulaire comme Maple dans Z/pZ[x]

6.34.1

Quotient euclidien : Quo

Quo est la forme inerte de quo.


Quo renvoie quo, le quotient de la division euclidienne de deux polynmes sans
lvaluer.
On utilise Quo et mod pour calculer en mode Maple le quotient de la division
euclidienne de deux polynmes coefficients dans Z/pZ.
On tape, en mode Xcas :
Quo((x^3+x^2+1) mod 13,(2*x^2+4) mod 13)

6.34. LE CALCUL MODULAIRE COMME MAPLE DANS Z/P Z[X]

399

On obtient :
quo((x^3+x^2+1)% 13,(2*x^2+4)% 13)
puis en utilisant eval(ans()), on obtient :
(-6% 13)*x+-6% 13
Attention Quo est surtout utile en mode Maple.
On tape, en mode Maple :
Quo(x^3+x^2+1,2*x^2+4) mod 13
On obtient :
(-6)*x-6
On tape, en mode Maple :
Quo(x^2+2*x,x^2+6*x+5) mod 5
On obtient :
1

6.34.2

Reste euclidien : Rem

Rem est la forme inerte de rem.


Rem renvoie rem, le reste de la division euclidienne de deux polynmes sans lvaluer.
On utilise Rem et mod pour calculer en mode Maple le reste de la division euclidienne de deux polynmes coefficients dans Z/pZ.
On tape, en mode Xcas :
Rem((x^3+x^2+1) mod 13,(2*x^2+4) mod 13)
On obtient :
rem((x^3+x^2+1)% 13,(2*x^2+4)% 13)
puis en utilisant eval(ans()), on obtient :
(-2% 13)*x+-1% 13
Attention Rem est surtout utile en mode Maple.
On tape alors, en mode Maple :
Rem(x^3+x^2+1,2*x^2+4) mod 13
On obtient :
(-2)*x-1
On tape, en mode Maple :
Rem(x^2+2*x,x^2+6*x+5) mod 5
On obtient :
1*x

400

6.34.3

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

PGCD dans Z/pZ[x] : Gcd

Gcd est la forme inerte de gcd.


Gcd renvoie le gcd (greatest common divisor) de deux polynmes (ou dune liste
de polynmes ou dune suite de polynmes) sans lvaluer.
On utilise Gcd et mod pour calculer en mode Maple le PGCD des deux polynmes
coefficients dans Z/pZ lorsque p est premier (voir aussi 6.27.7).
On tape en mode Xcas :
Gcd((2*x^2+5,5*x^2+2*x-3)% 13)
On obtient :
gcd((2*x^2+5)% 13,(5*x^2+2*x-3)% 13)
puis avec eval(ans()) on obtient :
(1% 13)*x+2% 13
Attention Gcd est surtout utile en mode Maple.
On tape alors en mode Maple :
Gcd(2*x^2+5,5*x^2+2*x-3) mod 13
On obtient :
1*x+2
Gcd(x^2+2*x,x^2+6*x+5) mod 5
On obtient :
1*x

6.34.4

Factorisation dans Z/pZ[x] : Factor

Factor a comme argument un polynme.


Factor renvoie factor sans lvaluer. Ensuite, factor factorise ce polynme
dans Z/pZ[x] condition que lon ait p premier.
On tape en mode Xcas :
Factor((-3*x^3+5*x^2-5*x+4)% 13)
On obtient :
factor((-3*x^3+5*x^2-5*x+4)% 13)
((1% 13)*x+-6% 13)*((-3% 13)*x^2+-5% 13)
Attention Factor est surtout utile en mode Maple.
On tape alors en mode Maple :
Factor(-3*x^3+5*x^2-5*x+4) mod 13
On obtient :
-3*(1*x-6)*(1*x^2+6)

6.34. LE CALCUL MODULAIRE COMME MAPLE DANS Z/P Z[X]

6.34.5

401

Dterminant dune matrice de Z/pZ : Det

Det est la forme inerte de det.


Det a pour argument une matrice A de Z/pZ.
Det renvoie det sans lvaluer. Ensuite, det calcule, dans Z/pZ, le dterminant
de la matrice A.
On tape en mode Xcas :
Det([[1,2,9] mod 13,[3,10,0] mod 13,[3,11,1] mod 13])
Ou on tape en mode Xcas :
Det([[1,2,9],[3,10,0],[3,11,1]] mod 13)
On obtient :
det([[1% 13,2% 13,-4% 13],[3% 13,-3% 13,0% 13], [3%
13,-2% 13,1% 13]])
puis :
5% 13
donc, dans Z/13Z, le dterminant de la matrice A = [[1, 2, 9], [3, 10, 0], [3, 11, 1]]
est 5% 13 (on a det(A)=31).
Attention Det est surtout utile en mode Maple.
On tape alors en mode Maple :
Det([[1,2,9],[3,10,0],[3,11,1]]) mod 13
On obtient :
5

6.34.6

Inverse dune matrice de Z/pZ : Inverse

Inverse a pour argument une matrice A de Z/pZ.


Inverse renvoie inverse sans lvaluer. Ensuite, inverse calcule, dans Z/pZ,
linverse de la matrice A.
On tape :
Inverse([[1,2,9] mod 13,[3,10,0] mod 13,[3,11,1]
mod13])
Ou on tape :
Inverse([[1,2,9],[3,10,0],[3,11,1]] mod 13)
Ou on tape :
Inverse([[1,2,9]% 13,[3,10,0]% 13,[3,11,1]% 13])
Ou on tape :
Inverse([[1,2,9],[3,10,0],[3,11,1]]% 13)

402

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
inverse([[1% 13,2% 13,9% 13],[3% 13,10% 13,0% 13], [3%
13,11% 13,1% 13]])
puis :
[[2% 13,-4% 13,-5% 13],[2% 13,0% 13,-5% 13], [-2%
13,-1% 13,6% 13]]
cest linverse de la matrice A = [[1, 2, 9], [3, 10, 0], [3, 11, 1]] dans Z/13Z.
Attention en mode Maple on tape :
Inverse([[1,2,9],[3,10,0],[3,11,1]]) mod 13
On obtient :
[[2,-4,-5],[2,0,-5],[-2,-1,6]]

6.34.7

Rsolution dun systme linaire de Z/pZ : Rref

Rref renvoie rref sans lvaluer. Ensuite, rref rsout, dans Z/pZ, un systme
dquations linaires de la forme : Ax = B (voir aussi 6.55.3).
Rsoudre dans Z/13Z

x + 2y = 9
3 x + 10 y = 0
On tape :
Rref([[1,2,9] mod 13,[3,10,0] mod 13])
Ou on tape :
Rref([[1,2,9],[3,10,0]] mod 13)
Ou on tape :
Rref([[1,2,9]% 13,[3,10,0]% 13])
Ou on tape :
Rref([[1,2,9],[3,10,0]]% 13)
On obtient :
rref([[1% 13, 2% 13, 9% 13],[3% 13,10% 13,0% 13]])
puis :
[[1% 13,0% 13,3% 13],[0% 13,1% 13,3% 13]]
ce qui veut dire que x=3% 13 et y=3% 13.
Attention en mode Maple on tape :
Rref([[1,2,9],[3,10,0],[3,11,1]]) mod 13
On obtient :
[[1,0,0],[0,1,0],[0,0,1]]

6.35. DVELOPPEMENTS LIMITS ET ASYMPTOTIQUES

6.35

Dveloppements limits et asymptotiques

6.35.1

Division selon les puissances croissantes : divpc

403

divpc a trois arguments : deux polynmes A(x), B(x) (avec B(0) 6= 0) et un


entier n.
divpc renvoie le quotient Q(x) de la division de A(x) par B(x) selon les puissances croissantes avec degree(Q) n ou Q = 0.
A(x)
Q(x) est donc le dveloppement limit, dordre n, de
au voisinage de x = 0.
B(x)
On tape :
divpc(1+x^2+x^3,1+x^2,5)
On obtient :
-x^5+x^3+1
Attention ! ! ! cette commande ne marche pas si les polynmes sont crits avec la
liste de leurs coefficients.

6.35.2

Dveloppement limit : taylor

taylor peut avoir de un quatre paramtres :


lexpression dvelopper, x=a (par dfaut x=0), lordre du dveloppement (par
dfaut 5), ou encore :
lexpression dvelopper, x, lordre du dveloppement (par dfaut 5) et le point
au voisinage duquel on veut le dveloppement (par dfaut 0).
Remarque on peut aussi mettre x,a,n au lieu de x=a,n
taylor renvoie un polynme en x-a, plus un reste que Xcas crit :
(x-a)^n*order_size(x-a)
cela signifie que lon a un dveloppement limit lordre n1 (ou lordre p < n).
En effet order_size dsigne une fonction telle que, quelque soit r positif :
x^r*order_size(x) tend vers zro quand x tend vers zro.
Par exemple, les fonctions constantes, la fonction log (ou ln), sont des fonctions
order_size.
On tape :
taylor(sin(x),x=1,2)
Ou on tape (attention lordre des arguments !) :
taylor(sin(x),x,2,1)
On obtient :
sin(1)+cos(1)*(x-1)+(-(1/2*sin(1)))*(x-1)^2+
(x-1)^3*order_size(x-1)
Attention ! ! !
Lordre que lalgorithme utilise pour les dveloppements limits peut tre plus petit
que celui demand : lordre peut diminuer si il y des compensations par exemple :
x3 + sin(x)3
dveloppement de
au voisinage de x=0
x sin(x)
On tape :

404

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


taylor(x^3+sin(x)^3/(x-sin(x)))

On obtient seulement un dveloppement lordre 2 :


6+-27/10*x^2+x^3*order_size(x)
On tape :
taylor(x^3+sin(x)^3/(x-sin(x)),x=0,7)
On obtient seulement un dveloppement lordre 4 :
6+-27/10*x^2+x^3+711/1400*x^4+x^5*order_size(x)

6.35.3

Dveloppement limit : series

series permet de faire le dveloppement limit dune expression au voisinage


dun point un ordre donn.
series peut avoir de un quatre paramtres :
lexpression dvelopper, x=a (par dfaut x=0), lordre du dveloppement (par
dfaut 5), la direction -1, 1 (pour un dveloppement unidirectionel) ou 0 (pour
un dveloppement bidirectionel) (par dfaut 0).
Remarque on peut aussi mettre x,a,n au lieu de x=a,n
series renvoie un polynme en x-a, plus un reste que Xcas crit :
(x-a)^n*order_size(x-a)
cela signifie que lon a un dveloppement limit lordre n1 (ou lordre p < n).
En effet order_size dsigne une fonction telle que, quelque soit r positif :
x^r*order_size(x) tend vers zro quand x tend vers zro.
Par exemple, les fonctions constantes, la fonction log (ou ln), sont des fonctions
order_size.
Attention ! ! !
Lordre que lalgorithme utilise pour les dveloppements limits peut tre plus petit
que celui demand : lordre peut diminuer si il y a des compensations (voir les
exemples qui suivent)
dveloppement au voisinage de x=0
x3 + sin(x)3
Donner le dveloppement de
au voisinage de x=0
x sin(x)
On tape :
series(x^3+sin(x)^3/(x-sin(x)))
On obtient seulement un dveloppement lordre 2 :
6+-27/10*x^2+x^3*order_size(x)
On tape :
series(x^3+sin(x)^3/(x-sin(x)),x=0,7)
On obtient seulement un dveloppement lordre 4 :
6+-27/10*x^2+x^3+711/1400*x^4+x^5*order_size(x)
dveloppement au voisinage de x=a
Exemple :
Donner un dveloppement limit lordre 4 au voisinage de x = 6 de
cos(2x)2 .
On tape :
series(cos(2*x)^2,x=pi/6, 4)

6.35. DVELOPPEMENTS LIMITS ET ASYMPTOTIQUES

405

On obtient :
1/4+(-(4*sqrt(3)))/4*(x-pi/6)+(4*3-4)/4*(x-pi/6)^2+
32*sqrt(3)/3/4*(x-pi/6)^3+(-16*3+16)/3/4*(x-pi/6)^4+
(x-pi/6)^5*order_size(x-pi/6)
dveloppement au voisinage de x=+ ou x=-
Exemple 1 :
Donner un dveloppement de arctan(x) lordre 5 au voisinage de x=+
1
en prenant comme infiniment petit h = .
x
On tape :
series(atan(x),x=+infinity,5)
On obtient :
pi/2-1/x+1/3*(1/x)^3-1/5*(1/x)^5+
(1/x)^6*order_size(1/x)
Donner un dveloppement de arctan(x) lordre 5 au voisinage de x=-
1
en prenant comme infiniment petit h = .
x
On tape :
series(atan(x),x=-infinity,5)
On obtient :
-pi/2-1/x-1/3*(-1/x)^3+1/5*(-1/x)^5+
(-1/x)^6*order_size(-1/x)
Exemple 2 :
1
Donner un dveloppement de (2x 1)e x1 lordre 2 au voisinage de
x=+ en prenant comme infiniment petit h = x1 .
On tape :
series((2*x-1)*exp(1/(x-1)),x=+infinity,3)
On obtient seulement lordre 1 :
2*x+1+2/x+(1/x)^2*order_size(1/x)
On tape pour avoir le dveloppement lordre 2 en 1/x :
series((2*x-1)*exp(1/(x-1)),x=+infinity,4)
On obtient :
2*x+1+2/x+17/6*(1/x)^2+(1/x)^3*order_size(1/x)
Exemple 3 :
1
Donner un dveloppement de (2x 1)e x1 ) lordre 2 au voisinage de
x=- en prenant comme infiniment petit h = x1 .
On tape :
series((2*x-1)*exp(1/(x-1)),x=-infinity,4)
On obtient :
-2*(-x)+1-2*(-1/x)+17/6*(-1/x)^2+
(-1/x)^3*order_size(-1/x)
dveloppement unidirectionnel
Il faut utiliser un paramtre supplmentaire pour indiquer la direction :
1 pour faire un dveloppement au voisinage de x = a avec x > a,
-1 pour faire un dveloppement au voisinage de x = a avec x < a,
0 pour faire un dveloppement au voisinage de x = a avec x 6= a.
Exemple

406

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


1
x

lordre 2, au voisinage de x = 0+ .
Donner un dveloppement de (1+x)
x3
On tape :
series((1+x)^(1/x)/x^3,x=0,2,1)
On obtient :
exp(1)/x^3+(-(exp(1)))/2/x^2+1/x*order_size(x)

6.35.4

Dveloppement rciproque dun dveloppement en sries en 0 :


revert

revert a comme argument une expression qui est le dbut du dveloppement


en sries en 0 dune fonction f .
revert renvoie le dveloppement en sries en 0 de g(f (0) + x) o g vrifie
g(f (x)) = x.
On tape :
revert(x+x^2+x^4)
On obtient :
x-x^2+2*x^3-6*x^4
En effet la fonction f vrifie : f (0) = 0, f 0 (0) = 1, f (0) = 2, f 0 (0) = 0, f (4) (0) =
24 et si g(f (x)) = x on en dduit en drivant cette identit que : g(0) = 0, g 0 (0) =
1/f 0 (0) = 1, g 00 (0) = 2, g 000 (0) = 12, g (4) (0) = 15824 = 144 = 246
On tape le dbut du dveloppement en 0 de exp(x) :
revert(1+x+x^2/2+x^3/6+x^4/14)
On obtient le dbut du dveloppement en x = 0 de ln(1 + x) :
x-x^2/2+2*x^3/3-x^4/4

6.35.5

Rsidu dune expression en un point : residue

residue a comme argument une expression dpendant dune variable, le nom


de cette variable et un complexe a ou bien une expression dpendant dune variable
et lgalit : nom_de_variable=a. residue renvoie le rsidu de cette exppression
au point a.
On tape :
residue(cos(x)/x^3,x,0)
Ou on tape :
residue(cos(x)/x^3,x=0)
On obtient :
(-1)/2
On tape :
int(exp(i*t)/(2*exp(i*t)-1),t=0..2*pi)

6.35. DVELOPPEMENTS LIMITS ET ASYMPTOTIQUES

407

On obtient :
Searching int of 1/(2 t 1) where t is on the unit circle, using residues
(2*pi)/2
On tape :
int(exp(2*i*t)/(2*exp(i*t)-1))^2,t=0..2*pi)
On obtient :
Searching int of t/(4 t2 4 t + 1) where t is on the unit circle, using residues
(2*pi)/4

6.35.6

Dveloppement de Pad : pade

pade a 4 arguments
une expression,
le nom de la variable utilise,
un entier n ou un polynme N ,
un entier p.
pade renvoie une fraction rationnelle P/Q (avec le degr de P < p) qui a, au
voisinage de 0, le mme dveloppement de Taylor lordre n que lexpression, ou
qui est gal lexpression modulo xn+1 (resp modulo N ).
On tape :
pade(exp(x),x,5,3)
Ou on tape :
pade(exp(x),x,x^6,3)
On obtient :
(3*x^2+24*x+60)/(-x^3+9*x^2-36*x+60)
On vrifie en tapant :
taylor((3*x^2+24*x+60)/(-x^3+9*x^2-36*x+60))
On obtient :
1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5+x^6*order_size(x)
On reconnait le dveloppement de Taylor lordre 5 de exp(x) au voisinage de
0.
On tape :
pade((x^15+x+1)/(x^12+1),x,12,3)
Ou on tape :
pade((x^15+x+1)/(x^12+1),x,x^13,3)
On obtient :

408

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


x+1

On tape :
pade((x^15+x+1)/(x^12+1),x,14,4)
Ou on tape :
pade((x^15+x+1)/(x^12+1),x,x^15,4)
On obtient :
(-2*x^3-1)/(-x^11+x^10-x^9+x^8-x^7+x^6-x^5+x^4x^3-x^2+x-1)
On vrifie en tapant :
series(ans(),x=0,15)
On obtient :
1+x-x^12-x^13+2x^15+x^16*order_size(x)
puis en tapant :
series((x^15+x+1)/(x^12+1),x=0,15)
On obtient :
1+x-x^12-x^13+x^15+x^16*order_size(x)
Les deux expressions ont mme dveloppement de Taylor lordre 14 au voisinage
de 0.

6.36

Les plages de valeurs

6.36.1

Dfinition dune plage de valeurs : a1..a2

Un intervalle est dfini par deux nombres spars par .. on crit :


1..3 ou
1.2..sqrt(2)
On tape :
A:=1..4
B:=1.2..sqrt(2)
Attention !
lordre est important : si B:=2..3 et C:=3..2 la rponse de B==C est 0.

6.36. LES PLAGES DE VALEURS

6.36.2

409

Pour accder aux bornes dune plage de valeurs : left gauche


right droit

left (resp right) a comme argument un intervalle.


left (resp right) permet daccder la partie gauche (resp droite) de lintervalle.
On tape :
(3..5)[0]
Ou on tape :
sommet(3..5)
On obtient :
..
On tape :
left(3..5)
Ou on tape :
(3..5)[1]
Ou on tape :
feuille(3..5)[0]
Ou on tape :
op(3..5)[0]
On obtient :
3
On tape :
right(3..5)
Ou on tape :
(2..5)[2]
Ou on tape :
feuille(3..5)[1]
Ou on tape :
op(3..5)[1]
On obtient :
5
Remarque
left et right permettent aussi daccder aux membres dune quation (par
exemple left(2*x+1=x+2) renvoie 2*x+1).

410

6.36.3

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Centre dune plage de valeurs : interval2center

interval2center a comme argument un intervalle ou une liste dintervalles.


interval2center renvoie le centre de lintervalle ou la liste des centres de ces
intervalles.
On tape :
interval2center(3..5)
On obtient :
4
On tape :
interval2center([2..4,4..6,6..10])
On obtient :
[3,5,8]

6.36.4

Plages de valeurs dfinies par leur centre : center2interval

center2interval a comme argument un vecteur V de rels et ventuellement


un rel comme deuxime argument (par dfaut (3*V[0]-V[1])/2).
center2interval renvoie un vecteur dintervalles ayant pour centres les rels
de largument : ces intervalles sont dfinis en commenant par la valeur donne par
le deuxime argument.
On tape :
center2interval([3,5,8],2)
Ou on tape car la valeur par dfaut vaut (3*3-5)/2=2 :
center2interval([3,5,8])
On obtient :
[2..4,4..6,6..10]
On tape :
center2interval([3,5,8],2.5)
On obtient :
[2.5..3.5,3.5..6.5,6.5..9.5]

6.37. LES INTERVALLES

6.37

Les intervalles

6.37.1

Dfinition : i[]

411

Un intervalle est un ensemble de 2 nombres flottants de n 15 chiffres significatifs spars par une virgule et parenthss par i[].
On utilise le mot reserv i[]), on crit pour dsigner lintervalle [1, 13/11] :
i[1,13/11].
Lintervalle vide scrira i[]
Par exemple, on tape :
i[1,13/11]
On obtient :
i[1.0000000000000,1.1818181818182]
Remarque Si a>b alors i[a,b] renvoie
i[evalf(b,15)-epsilon,evalf(a,15)+epsilon] avec epsilon Par
exemple, on tape :
i[pi,sqrt(3)]
On obtient :
i[1.7320508075689,3.1415926535898]
Autre notation On peut aussi dsigner un intervalle par un nombre dcimal a
suivi dun point dinterrogation. Si la partie dcimale de a contient n chiffres ,
lintervalle a pour milieu a et pour longueur 2 10n Par exemple, on tape :
0.123?
On obtient :
i[0.122,0.123]
On tape : 789.123456?
On obtient :
i[0.789123455e3,0.789123457e3]
Attention
On tape :
a:=i[1,13/11]
On obtient :
i[1.0000000000000,1.1818181818182]
b:=i[1,13/11]
On obtient :
i[1.0000000000000,1.1818181818182]
a==b

412

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
faux
En fait, a ou b reprsente un nombre dcimal entre 1 et 1.1818181818182 car
lintervalle sert donner une approximation du nombre a ou b i.e a et b sont dans
le mme intervalle.
On tape :
b:=i[pi,pi+10^-5]
On obtient :
i[3.1415926535898,3.1416026535898]
En fait b reprsentent un nombre dcimal entre 3.1415926535898 et 3.1416026535898.

6.37.2

Somme de 2 intervalles

La somme de 2 intervalles est un intervalle qui a pour borne infrieure (resp


suprieure) la somme des bornes infrieures (resp suprieures).
On tape :
i[1,4]+i[2,3]
On obtient :
i[3.0000000000000,7.0000000000000]

6.37.3

Oppos dun intervalle

Loppos dun intervalle est un intervalle qui a pour borne infrieure (resp suprieure) loppos de la borne suprieure du (resp infrieure).
On tape :
-i[2,3]
On obtient :
i[-3.0000000000000,-2.0000000000000]

6.37.4

Produit de 2 intervalles

Le produit de 2 intervalles est un intervalle qui a pour borne infrieure (resp


suprieure) le produit des bornes infrieures (resp suprieures).
On tape :
i[1,4]*i[2,3]
On obtient :
i[2.0000000000000,0.12000000000000e2]

6.37. LES INTERVALLES

6.37.5

413

Inverse dun intervalle

Linverse dun intervalle est un intervalle qui a pour borne infrieure (resp suprieure) linverse de la borne suprieure du (resp infrieure).
On tape :
1/i[2,3]
On obtient :
i[0.33333333333333,0.50000000000000]

6.37.6

Pour accder aux bornes dun intervalle : left gauche right


droit

On tape :
left(i[2,5])
On obtient :
2.0000000000000
On tape :
right(i[2,5])
On obtient :
5.0000000000000

6.37.7

Milieu dun intervalle : midpoint milieu

union est un oprateur infix.


On tape :
milieu(i[2,3])
Ou on tape :
midpoint(i[2,3])
On obtient :
2.5000000000000

6.37.8

Union de 2 intervalles : union

union est un oprateur infix.


union renvoie lenveloppe convexe des 2 intervalles donns en argument.
On tape :
i[1,3] union i[2,4]
On obtient :
i[1.0000000000000,4.0000000000000]

414

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.37.9

Intersection de 2 intervalles : intersect

intersect est un oprateur infix.


intersect renvoie lintersection des 2 intervalles donns en argument.
On tape :
i[1,3] intersect i[2,4]
On obtient :
i[2.0000000000000,3.0000000000000]

6.37.10

Tester si un lment est dans un intervalle : contains

contains a deux paramtres : un intervalle I et un lment c.


contains est une fonction qui teste si llment c appartient lintervalle L.
contains renvoie 0 si c nest pas dans L, et sinon renvoie 1.
Attention, lordre des paramtres, cest pour des raisons de compatibilit !
On tape :
contains(i[0,2],1)
On obtient :
1
On tape :
contains(i[0,2],3)
On obtient :
0

6.37.11

Convertir un nombre en un intervalle : convert

convert a deux ou trois paramtres : une expression symbolique, le mot reserv


interval et eventuellement un entier n > 15 pour donner le nombre de chiffres
significatifs dsirs.
convert renvoie le plus petit intervalle dans lequel se trouve la valeur de lexpression ou la valeur de lexpression ? ? ? ? ? ? ? ?.
On tape :
convert(sin(3)+1,interval)
On obtient :
i[1.1411200080599,1.1411200080599]
On tape :
convert(sin(3)+1,interval,20)
On obtient :
i[1.1411200080598672221,1.1411200080598672221]

6.38. LES SQUENCES

415

6.38

Les squences

6.38.1

Dfinition : seq[] ()

Une squence est une suite dlments spars par une virgule et parenthss
par ( ) ou on utilise le mot reserv seq[...] donc on crit :
(1,2,3,4) ou
seq[1,2,3,4]
On tape :
A:=(1,2,3,4) ou A:=seq[1,2,3,4]
B:=(5,6,3,4) ou B:=seq[5,6,3,4]
Attention !
lordre est important : si B:=(5,6,3,4) et C:=(3,4,5,6) la rponse de
B==C est 0.
Attention ! (voir 6.38.5)
seq([0,2])=(0,0) et seq([0,1,1,5])=[0,0,0,0,0] alors que
seq[0,2]=(0,2) et seq[0,1,1,5]=(0,1,1,5)

6.38.2

Concatner deux squences : ,

La concatnation de deux squences est simple puisquil suffit dcrire les squences en les sparant par une virgule (,).
On tape :
A:=(1,2,3,4)
B:=(5,6,3,4)
A,B
On obtient :
(1,2,3,4,5,6,3,4)

6.38.3

Pour accder un lment dune squence : []

Pour accder un lment dune squence, on tape lindice de cet lment entre
des crochets pour des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets pour des indices qui commencent
1.
On tape :
(0,1,2)[1]
On obtient car lindice du premier lment est 0 :
1

416

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Ou bien
On tape :
(0,1,2)[[1]]
On obtient car lindice du premier lment est 1 :
0

6.38.4

Pour extraire une sous-squence dune squence : []

Pour extraire une sous-squence dune squence, on tape entre des crochets
lindice de dbut, puis .. et lindice de fin de la sous-squence.
On tape :
(0,1,2,3,4)[1..3]
On obtient :
(1,2,3)

6.38.5

Pour fabriquer une squence ou une liste : seq $

seq peut renvoyer une squence (avec la mme syntaxe que Maple) ou une liste
(avec la mme syntaxe que TI) selon la forme de ses arguments qui sont : une
expression dpendant dun paramtre (par exemple j) et des paramtres dcrivant
la variation de j.
$ renvoie une squence et cest la version infixe de seq lorsque seq a deux
arguments : une expression dpendant dun paramtre (par exemple j) et (j =
a..b) o a et b sont des nombres rels (par exemple j^2$ (j=-1..3)), ou une
expression constante et un nombre n (par exemple 4$3).
seq a deux, trois, quatre ou cinq arguments car on peut exprimer la variation de j
de a b laide dun argument (j = a..b) ou de deux arguments (j, a..b) (syntaxe
Maple o il ny a pas la possibilit de mettre un paramtre de saut) ou encore
laide de trois arguments (j, a, b) ou de quatre arguments (j, a, b, p) (syntaxe TI
avec la possibilit de mettre p comme paramtre de saut).
Syntaxe Maple
seq a deux arguments une expression dpendant dun paramtre (par exemple
j) et j = a..b o a et b sont des nombres rels (ou une expression constante
et un nombre n). On peut ajouter pour seq un troisime argument, le pas (1
par dfaut).
$ a les mme arguments mais est une fonction infixe et il faut parenthser
les arguments.
seq (ou $) dfinit la squence obtenue en remplacant dans lexpression j
par a, a + 1..b si b > a et par a, a 1..b si b < a (ou seq renvoie la squence forme par n fois la constante).
-seq a trois arguments une expression dpendant dun paramtre (par exemple
j), le nom du paramtre (par exemple j) et a..b o a et b sont des nombres
rels, ou
seq dfinit la squence obtenue en remplacant dans lexpression j par a,
a + 1..b si b > a et par a, a 1..b si b < a le pas est donc soit gal 1, soit

6.38. LES SQUENCES

417

gal -1.
Syntaxe TI
-seq a quatre arguments une expression dpendant dun paramtre (par
exemple j), le nom du paramtre (par exemple j), puis a et b o a et b sont
des nombres rels. seq dfinit la liste obtenue en remplaant dans lexpression j par a, a + 1..b si b > a ou par a, a 1..b si b < a).
-seq a cinq arguments une expression dpendant dun paramtre (par exemple
j), le nom du paramtre (par exemple j), puis a et b (o a et b sont des
nombres rels) et p le pas (o p est un nombre rel positif ou ngatif).
seq dfinit la liste obtenue en remplaant dans lexpression j par a, a +
p..a+k p (a+k p b < a+(k +1)p ou a+k p b > a+(k +1)p).
Par dfaut, on a p=1 si b > a et p=-1 si b < a. Si p na pas le bon signe, ce
signe est rectifi par le logiciel !
Remarque :
Dans la syntaxe Maple, seq renvoie une squence et il ny a pas la possibilit de
mettre un paramtre de saut, contrairement la syntaxe TI o seq renvoie une
liste avec la possibilit de mettre un paramtre de saut.
On tape pour avoir une squence dlments identiques :
seq(t,4)
Ou on tape
seq(t,k=1..4)
Ou on tape
t$4
On obtient :
(t,t,t,t)
On tape pour avoir une squence :
seq(j^3,j=1..4)
Ou on tape
(j^3)$(j=1..4)
Ou on tape :
seq(j^3,j,1..4)
On obtient :
(1,4,9,16)
Ou on tape pour avoir une liste :
seq(j^3,j,1,4)

418

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[1,4,9,16]
On tape :
seq(j^3,j,0,5,2)
On obtient :
[0,8,64]
On tape :
seq(j^3,j,5,0,-2)
ou
seq(j^3,j,5,0,2)
On obtient :
[125,27,1]
On tape :
seq(j^3,j,1,3,0.5)
On obtient :
[1,3.375,8,15.625,27]
On tape :
seq(j^3,j,1,3,1/2)
On obtient :
[1,27/8,8,125/8,27]
Exemples dutilisation
On tape pour avoir la drive troisime de ln(t) :
diff(log(t),t$3)
On obtient :
-((-(2*t))/t^4)
On tape :
l:=[[2,3],[5,1],[7,2]]
seq((l[k][0])$(l[k][1]),k=0 .. size(l)-1)
On obtient :
2,2,2,seq[5],7,7
2,2,2,5,7,7
On tape pour transformer une chane en la liste de ces caractres :
f(chn):={ local l; l:=size(chn); return
seq(chn[j],j,0,l-1); }
puis,
f("abracadabra")

6.38. LES SQUENCES

419

On obtient :
["a","b","r","a","c","a","d","a","b","r","a"]
On tape pour transformer une chane en la squence de ces caractres :
f(chn):={ local l; l:=size(chn); return
seq(chn[j],j,0..l-1); }
puis,
f("abracadabra")
On obtient :
("a","b","r","a","c","a","d","a","b","r","a"]))

6.38.6

Pour transformer une squence en liste : [] nop

Pour transformer une squence en liste il suffit dentourer la squence par des
crochets ([]) ou on utilise la fonction nop.
On tape :
[seq(j^3,j=1..4)]
ce qui quivaut :
seq(j^3,j,1,4)
ou :
[(j^3)$(j=1..4)]
On obtient :
[1,4,9,16]
On tape :
nop(1,4,9,16)
On obtient :
[1,4,9,16]

6.38.7

Leffet de loprateur + sur deux squences

Loprateur infix + ayant comme argument deux squences, renvoie la somme


des lments des deux squences.
Bien voir la diffrence avec les listes car si les arguments de loprateur infix +
sont deux listes, il renvoie la somme termes terme des lments des deux listes.
On tape :
(1,2,3,4,5,6)+(4,3,5)
Ou on tape :
+((1,2,3,4),(5,6,4,3,5))
On obtient :
33

420

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Mais si on tape :
[1,2,3,4,5,6]+[4,3,5]
On obtient :
[5,5,8,4,5,6]
bf Attention
Quand loprateur + est prfix il doit tre quot cest dire crit +.

6.39

Les ensembles

6.39.1

Dfinition : set[]

Un ensemble est un ensemble dlments spars par une virgule et parenthss


par % { % }, ou on utilise le mot reserv set[], on crit :
% {1,2,3,4% } ou
set[1,2,3,4]
Lensemble vide scrira %{%} ou set[]
En rponse on utilise [ et ] comme dlimiteurs pour distinguer les ensembles des
listes.
On tape :
A:=% {1,2,3,4% } ou A:=set[1,2,3,4]
On obtient :
[1,2,3,4]
On tape :
B:=% {5,5,6,3,4% } ou B:=set[5,5,6,3,4]
On obtient :
[5,6,3,4]
Attention !
Lordre nest pas important et il ny a que des lments diffrents : si B:=% {5,5,6,3,4%
} et C:=% {3,4,5,3,6% } la rponse de B==C est 1.

6.39.2

Tester si 2 ensembles (ou listes) sont inclus(e) lun(e) dans lautre :is_included,
est_inclus

est_inclus ou is_included teste si lensemble (ou la liste considre comme


un ensemble) mis comme premier argument est contenu dans lensemble (ou la
liste) mis comme deuxime argument en renvoyant 0 ou 1.
On tape :
est_inclus(set[1,2,3,4],set[1,2,5,6,3,4])
Ou on tape :

6.39. LES ENSEMBLES

421

est_inclus(% {1,2,3,4% },% {1,2,5,6,3,4% })


On obtient :
1
On tape :
est_inclus([1,2,3,4],[1,2,5,6,3,4])
On obtient :
1
Attention, set[1,2,3,4,2] renvoie set[1,2,3,4,], do les rsultats suivants.
On tape :
est_inclus(set[1,2,3,4,2],set[1,2,5,6,3,4])
Ou on tape :
est_inclus(% {1,2,3,4,2% },% {1,2,5,6,3,4% }
On obtient :
1
On tape :
est_inclus([1,2,3,4,2],[1,2,5,6,3,4])
On obtient :
1

6.39.3

Union de deux ensembles ou de deux listes : union

union renvoie lensemble qui est lunion de deux ensembles ou de deux listes.
union est un oprateur infix.
On tape :
set[1,2,3,4] union set[5,6,3,4]
Ou on tape :
% {1,2,3,4% } union % {5,6,3,4% }
On obtient :
[1,2,3,4,5,6]
On tape :
[1,2,3] union [2,5,6]
On obtient :
[1,2,3,5,6]

422

6.39.4

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Intersection de deux ensembles, de deux listes : intersect

intersect renvoie lensemble qui est lintersection de deux ensembles ou de


deux listes.
intersect est un oprateur infix.
On tape :
set[1,2,3,4] intersect set[5,6,3,4]
Ou on tape :
% {1,2,3,4% } intersect % {5,6,3,4% }
On obtient :
[3,4]
On tape :
[1,2,3,4] intersect [5,6,3,4]
On obtient :
[3,4]

6.39.5

Diffrence de deux ensembles ou de deux listes : minus

minus renvoie lensemble qui est la diffrence de deux ensembles ou de deux


listes.
minus est un oprateur infix.
On tape :
set[1,2,3,4] minus set[5,6,3,4]
Ou on tape :
% {1,2,3,4% } minus % {5,6,3,4% }
On obtient :
[1,2]
On tape :
[1,2,3,4] minus [5,6,3,4]
On obtient :
[1,2]

6.40. LES LISTES OU LES VECTEURS

6.40

Les listes ou les vecteurs

6.40.1

Les diffrentes listes

423

Une liste peut contenir des listes (cest le cas des matrices) et peut dsigner
un vecteur (liste des coordonnes) ou un polynme (liste des coefficients des puissances dcroissantes), alors que une squence est plate car on ne peut pas avoir un
lment dune squence qui soit une squence.
Lordre est important dans une liste alors que lordre na pas dimportance pour
un ensemble, il peut y avoir plusieurs fois le mme objet dans une liste alors que
chaque objet est unique dans un ensemble.
Dans les rponses de Xcas,
les coordonnes dun vecteur sont parenthses avec [ et ],
une matrice avec [ et ],
un polynme avec [] et [],
un ensemble avec [ et ].
Un vecteur peut donc tre reprsents par une liste contenant les composantes du
vecteur (on met les composantes du vecteur entre crochets).
Attention !
Pour accder un lment dune liste, on tape son indice entre des crochets pour
des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets pour des indices qui commencent
1.
Pour toutes les autres fonctions de Xcas (autres que laccs un lment), lindice
du premier lment est 0.
Exemple
On tape : L:=[2,5,1,3]
L[1]
On obtient :
5
On tape : L[[1]]
On obtient :
2
On tape : L:=[2,5,1,3]
L[1]:=4
L
On obtient :
[2,4,1,3]
On tape : L:=[2,5,1,3]
L[[1]]:=4
L
On obtient :
[4,5,1,3]
Pour dessiner ou dfinir un vecteur gomtrique voir 9.10.5 et 10.5.5.

6.40.2

Aplatir une liste : flatten

flatten a comme argument une liste de listes.

424

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

flatten transforme cette liste de listes en une liste.


On tape : flatten([[1,[2,3],4],[5,6]])
On obtient :
[1,2,3,4,5,6]
Remarque si la liste de listes est une matrice on peut aussi utiliser la commande
mat2list.

6.40.3

Accs un lment ou une sous-liste dune liste : at []

Accs un lment
On utilise la fonction at pour accder un lment dune liste, ou on tape son
indice entre des crochets pour des indices qui commencent 0
ou bien
on tape son indice entre des doubles crochets ou entre des parenthses pour des
indices qui commencent 1.
Pour toutes les autres fonctions de Xcas (autres que laccs un lment), lindice
du premier lment est 0.
Exemples
Soit la liste : [0,1,2] et on veut dsigner llment 1.
On tape son indice 1 entre des crochets :
[0,1,2][1]
ou
at([0,1,2],1)
On obtient puisque les indices commencent 0 :
1
ou bien 0n tape son indice 2 entre des doubles crochets ou entre des parenthses :
[0,1,2][[2]]
ou
[0,1,2](2)
On obtient puisque avec cette notation, les indices commencent 1 :
1
Soit la matrice : A:=[[4,5],[2,6]] et on veut dsigner la ligne [4,5].
On tape son indice 0 entre des crochets, si on veut que les indices commencent
0:
A[0]
ou
at(A,0)

6.40. LES LISTES OU LES VECTEURS

425

On obtient puisque les indices commencent 0 :


[4,5]
Ou bien si on veut que les indices commencent 1, on tape son indice 1 entre des
doubles crochets ou entre des parenthses :
A[[1]]
ou
A(1)
On obtient puisque avec cette notation, les indices commencent 1 :
[4,5]
Extraire une sous-liste
Voir aussi : 6.40.4 la fonction mid.
On utilise aussi la fonction at pour extraire une sous-liste dune liste. On tape
alors, entre des crochets, lindice de dbut, puis .. et lindice de fin de la sousliste ou on utilise la fonction at.
Attention ! lindice du premier lment est 0.
On tape :
[0,1,2,3,4][1..3]
ou
at([0,1,2,3,4],1..3)
On obtient :
[1,2,3]
Attention, la commande at ne peut pas tre utilise pour les squences : il faut
utiliser la syntaxe (0,1,2,3,4,5)[2..3].

6.40.4

Extraire une sous-liste dune liste : mid

Voir aussi : 6.40.3 la fonction at.


mid pour extraire une sous-liste dune liste.
mid a trois paramtres : la liste, lindice du dbut de la sous-liste et la longueur de
la sous-liste.
Attention ! lindice du premier lment est 0.
On tape :
mid([0,1,2,3,4,5],2,3)
On obtient :
[1,2,3]
Attention, la commande mid ne peut pas tre utilise pour les squences : il faut
utiliser (0,1,2,3,4,5)[2..3], syntaxe valable aussi pour les listes (voir cidessus).

426

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.40.5

Avoir le premier lment dune liste : head

head renvoie le premier lment dune liste.


On tape :
head([0,1,2,3])
On obtient :
0
a:=head([0,1,2,3]) est quivalent a:=[0,1,2,3][0]

6.40.6

Supprimer un lment dans une liste : suppress

suppress supprime dans une liste llment dindice donn.


Attention ! lindice du premier lment est 0.
On tape :
suppress([3,4,2],1)
On obtient :
[3,2]

6.40.7

Avoir la liste prive de son premier lment : tail

tail renvoie la liste prive de son premier lment.


On tape :
tail([0,1,2,3])
On obtient :
[1,2,3]
l:=tail([0,1,2,3]) est quivalent l:=suppress([0,1,2,3],0)

6.40.8

Partie droite et gauche dune liste : droit ou right, gauche


ou left

droit(l,n) ou right(l,n) renvoie les n derniers lments dune liste


l.
On tape :
droit([0,1,2,3,4,5,6,7,8],4)
Ou on tape :
right([0,1,2,3,4,5,6,7,8],4)
On obtient :
[5,6,7,8]
gauche(l,n) ou left(l,n) renvoie les n premiers lments dune
liste l.
On tape :

6.40. LES LISTES OU LES VECTEURS

427

gauche([0,1,2,3,4,5,6,7,8],3)
Ou on tape :
left([0,1,2,3,4,5,6,7,8],3)
On obtient :
[0,1,2]

6.40.9

Avoir la liste permute : revlist

revlist a comme argument une liste (resp squence).


revlist renvoie la liste (resp squence) dans lordre inverse.
On tape :
revlist([0,1,2,3,4])
On obtient :
[4,3,2,1,0]
On tape :
revlist([0,1,2,3,4],3)
On obtient :
3,[0,1,2,3,4]

6.40.10

Avoir la liste permute partir de son n-ime lment : rotate

rotate a comme argument une liste et un nombre entier relatif (par dfaut n=-1).
rotate renvoie :
si n>0, la liste obtenue en permuttant les n premiers lments avec la fin de
la liste,
si n<0 en permuttant les -n derniers lments avec le dbut de la liste. Par
dfaut n=-1 et on met le dernier lment en premier.
On tape :
rotate([0,1,2,3,4])
On obtient :
[4,0,1,2,3]
On tape :
rotate([0,1,2,3,4],2)
On obtient :
[2,3,4,0,1]
On tape :
rotate([0,1,2,3,4],-2)
On obtient :
[3,4,0,1,2]

428

6.40.11

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Avoir la liste permute partir de son n-ime lment : shift

shift a comme argument une liste et un nombre entier relatif (par dfaut n=-1).
shift renvoie :
si n>0 la liste obtenue en remplaant les n premiers lments de la liste par
undef, puis en en permuttant ces n premiers lments avec la fin de la liste,
si n<0 en remplaant les -n derniers lments de la liste par undef, puis
en permuttant les -n derniers lments avec le dbut de la liste. Par dfaut
(n=-1) le premier lment vaut undef et il est suivi par la liste prive de
son dernier lment.
On tape :
shift([0,1,2,3,4])
On obtient :
[undef,0,1,2,3]
On tape :
shift([0,1,2,3,4],2)
On obtient :
[2,3,4,undef,undef]
On tape :
shift([0,1,2,3,4],-2)
On obtient :
[undef,undef,0,1,2]

6.40.12

Modifier un lment dune liste : subsop

subsop permet de modifier un lment dans une liste sans avoir la mettre dans
une variable.
Remarque Si le second argument est k=NULL, llment dindice k est enlev
de la liste.
On tape en mode Xcas (les indices commencent 0) :
subsop([0,1,2],1=5)
Ou on tape :
L:=[0,1,2];L[1]:=5
On obtient :
[0,5,2]
On tape en mode Xcas (les indices commencent 0)
subsop([0,1,2],1=NULL)

6.40. LES LISTES OU LES VECTEURS

429

On obtient :
[0,2]
On tape en mode Mupad TI (les indices commencent 1) :
subsop([0,1,2],2=5)
Ou on tape :
L:=[0,1,2];L[2]:=5
On obtient :
[0,5,2]
Attention, en mode Maple les arguments sont permuts et les indices commencent
1.
On tape :
subsop(2=5,[0,1,2])
Ou on tape :
L:=[0,1,2];L[2]:=5
On obtient :
[0,5,2]

6.40.13

Transformer une liste en squence : op makesuite

op ou makesuite permet de transformer une liste en squence.


Remarque :
op est une fonction plus gnrale (cf 6.16.3).
On tape :
op([0,1,2])
Ou on tape :
makesuite([0,1,2])
On obtient :
(0,1,2)
Remarque op transforme une liste L en squence, donc op(op(L)) est quivalent op(L). Pour diffrencier une squence de longueur 1 de llment de cette
squence, Xcas affiche une squence de longueur 1 avec les dlimiteurs seq[ ].
Toutefois, lvaluation dune squence de longueur 1 renvoie son lment.

430

6.40.14

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Transformer une squence en liste : makevector []

makevector permet de transformer une squence en une liste.


On peut aussi mettre simplement des crochets autour dune squence pour transformer cette squence en une liste.
On tape :
makevector(0,1,2)
On obtient :
[0,1,2]
On tape :
a:=(0,1,2)
On tape :
[a]
Ou on tape :
makevector(a)
On obtient :
[0,1,2]

6.40.15

Longueur dune liste : size nops length

size ou nops ou length renvoie la longueur dune liste (ou dune chane).
On tape :
nops([3,4,2])
ou
size([3,4,2])
ou
length([3,4,2])
On obtient :
3

6.40.16

Longueur dune liste de listes : sizes

sizes permet davoir la liste des longueurs dune liste de listes.


On tape :
sizes([[3,4],[2]])
On obtient :
[2,1]

6.40. LES LISTES OU LES VECTEURS

6.40.17

431

Concatner deux listes ou une liste et un lment : concat


augment

concat (ou augment) concatne deux listes, ou concatne une liste et un lment.
On tape :
concat([3,4,2],[1,2,4])
Ou on tape :
augment([3,4,2],[1,2,4])
On obtient :
[3,4,2,1,2,4]
On tape :
concat([3,4,2],5)
Ou on tape :
augment([3,4,2],5)
On obtient :
[3,4,2,5]
Attention
concat([[3,4,2]],[[1,2,4]])
On obtient :
[[3,4,2,1,2,4]]

6.40.18

Rajouter un lment la fin dune liste : append

append rajoute un lment la fin dune liste.


On tape :
append([3,4,2],1)
On obtient :
[3,4,2,1]
On tape :
append([1,2],[3,4])
On obtient :
[1,2,[3,4]]

432

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.40.19

Rajouter un lment au dbut dune liste : prepend

prepend rajoute un lment au dbut dune liste.


On tape :
prepend([3,4,2],1)
On obtient :
[1,3,4,2]
On tape :
prepend([1,2],[3,4])
On obtient :
[[3,4],1,2]

6.40.20

Trier : sort

sort a comme argument une liste ou une expression ou une chaine de caractres.
Pour une liste, sort renvoie la liste trie selon lordre croissant.
On tape :
sort([3,4,2])
On obtient :
[2,3,4]
Remarque Si la liste est une matrice (resp une liste de chaines de caractres),
sort renvoie la matrice dont les lignes sont tries selon lordre croissant en
triant les lignes selon lordre [a0 , a1 , ..an ] < [b0 , b1 , ..bn ] si a0 < b0 ou si
il existe k n tel que a0 = b0 ,...ak1 < bk1 et ak < bk (resp la liste de
chaines de caractres tries par lordre lexicographique).
On tape :
sort([[3,4,2],[4,2,3],[2,3,4],[2,4,3]])
On obtient :
[[2,3,4],[2,4,3],[3,4,2],[4,2,3]]
Pour trier par ordre dcroissant il faut mettre en second argument une fonction de tri, par exemple on tape la fonction boolenne superoueg qui renvoie 1 si L1>=L2 et 0 sinon :
superoueg(L1,L2):={
local s,j;
s:=min(size(L1),size(L2))-1;
j:=0;
tantque L1[j]==L2[j] and j<s faire
j:=j+1;
ftantque;
//si L2[j]>L1[j] alors return 0 sinon return 1; fsi;
si [sort(L1[j],L2[j])]==[L1[j],L2[j]] alors
return 0

6.40. LES LISTES OU LES VECTEURS

433

sinon
return 1;
fsi;
}:;
On a remplac L2[j]>L1[j] par [sort(L1[j],L2[j])]==[L1[j],L2[j]]
pour que superoueg soit aussi valable pour les chaines de caractres. On
tape :
sort([[3,4,2],[4,2,3],[2,3,4],[2,4,3]],superoueg)
ou on tape
sort([[3,4,2],[4,2,3],[2,3,4],[2,4,3]],(x,y)->superoueg(x,y))
On obtient :
[[2,3,4],[2,4,3],[3,4,2],[4,2,3]][[2,3,4],[2,4,3],[3,4,2],[4,2,3]]
On tape :
sort(["dac","bac","sac","asc","cab"])
On obtient :
["asc","bac","cab","dac","sac"]
On tape :
sort(["dac","bac","sac","asc","cab"],superoueg)
On obtient :
["sac","dac","cab","bac","asc"]
Pour une expression, sort trie et collecte les termes gaux dans les sommes
et produits.
On tape :
sort(exp(2*ln(x))+x*y-x+y*x+2*x)
On obtient :
2*x*y+exp(2*ln(x))+x
On tape :
simplifier(exp(2*ln(x))+x*y-x+y*x+2*x)
On obtient :
x^2+2*x*y+x
Remarque
sort accepte un 2-ime argument aprs une liste qui est la fonction de tri, par
exemple (x,y)->x>y pour avoir la liste trie selon lordre dcroissant.
Attention La fonction de tri f doit dfinir un ordre strict faible cest dire que
f (x, y) est un fonction renvoyant 0 (faux) ou 1 (vrai) qui est toujours dfinie
(f doit renvoyer 0 si 2 lments ne sont pas comparables) et doit vrifier :
f doit dfinir une relation transitive (si f (x, y) et f (y, z) sont vrais alors
f (x, z) est vrai)
on ne peut pas avoir f (x, y) et f (y, x) vrai en mme temps (antisymtrie
non rflexive)
f ne dfinit pas forcment une relation dordre total, on peut avoir f (x, y)
et f (y, x) simultanment faux. Si on dfinit la relation E par x E y est vrai
lorsque f (x, y) et f (y, x) sont simultanment faux alors E doit tre une
relation dquivalence.
Sinon lalgorithme employ risque de boucler.... Par exemple, on ne peut pas mettre
comme fonction de tri : (x,y)->x[1]>=y[1]. On tape :

434

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


sort([3,4,2],(x,y)->x>y)

On obtient :
[4,3,2]
Pour trier des listes de listes
sort trie les listes de listes par ordre croissant.
sort([[1,3],[2,4],[2,3],[1,4]])
On obtient :
[[1,3],[1,4],[2,3],[2,4]]
Pour un ordre diffrent, il faut mettre une fonction de tri comme 2ime argument.
Par exemple :
Si on veut trier par ordre dcroissant la premire colonne ou en cas dgalit par
ordre dcroissant la 2ime colonne (ordre lexicographique).
On tape :

sort([[1,3],[2,4],[2,3],[1,4]],(x,y)->when(x[0]==y[0],x[1]>y[1],x[0]>y
On obtient :
[[2,4],[2,3],[1,4],[1,3]]
Et si on veut trier par ordre dcroissant la 2ime colonne ou en cas dgalit par
ordre dcroissant la premire colonne.
On tape :
sort([[1,3],[2,4],[2,3],[1,4]],
(x,y)->when(x[1]==y[1],x[0]>y[0],x[1]>y[1]))
On obtient :
[[2,4],[1,4],[2,3],[1,3]]
Attention Dans lexemple prcdent,
on ne peut pas mettre comme fonction de tri (x,y)->x[1]>=y[1] car
lordre nest pas strict
on peut mettre comme fonction de tri f:=(x,y)->x[1]>y[1] bien que
lordre ne soit pas total.
Soient :
L1:=[[1,2],[2,3],[4,3]]
L2:=[[1,2],[4,3],[2,3]]
Dans ce cas sort(L1,(x,y)->x[1]>y[1]) et sort(L2,(x,y)->x[1]>y[1])
renvoient des rponses diffrentes parce que lordre nest pas total et que [2,3]
et [4,3] sont considrs comme quivalents.

6.40. LES LISTES OU LES VECTEURS

6.40.21

435

Trier une liste selon lordre croissant : SortA et sorta

Attention SortA et sorta ne sont pas des synonymes : SortA sutilise avec
la syntaxe TI i.e. sans avoir besoin de mettre des parenthses et modifie la valeur
de largument alors que sorta sutilise comme des fonctions normales de Xcas
(parenthses obligatoires et sans changer largument !).
SortA ou sorta a comme argument une liste, une squence ou une matrice.
SortA ou sorta renvoie la liste ou la squence trie selon lordre croissant.
Si largument est une matrice, SortA ou sorta trie la 1-ire ligne de la matrice
selon lordre croissant, et reporte les manuvres de tri de la 1-ire ligne sur les
autres lignes cest dire le tri conserve les colonnes de la matrice.
On tape :
sorta([3,4,2])
ou
SortA([3,4,2])
ou
SortA [3,4,2]
ou
SortA 3,4,2
On obtient :
[2,3,4]
On tape :
sorta([[3,4,2],[6,4,5]])
ou
SortA([[3,4,2],[6,4,5]])
ou
SortA [[3,4,2],[6,4,5]]
ou
SortA [3,4,2],[6,4,5]
On obtient :
[[2,3,4],[5,6,4]]
On tape :
A:=[[3,4,2],[6,4,5]]
SortA(A)

436

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[[2,3,4],[5,6,4]]
et maintenant A vaut [[2,3,4],[5,6,4]] Mais, on tape :
A:=[[3,4,2],[6,4,5]]
sorta(A)
On obtient :
[[2,3,4],[5,6,4]]
et maintenant A vaut toujours [[3,4,2],[6,4,5]]
Attention La syntaxe sans parenthse peut vous jouer des tours !
Par exemple, on tape :
L1:=[1,3,2];L2:=[2,3,1];
SortA L1,SortA L2
On obtient la matrice ! : [[1,2,3],[3,2,1]]
qui est le rsultat de :
SortA(L1,SortA(L2))

6.40.22

Trier une liste selon lordre dcroissant : SortD sortd

Attention et sortd ne sont pas des synonymes : SortD sutilise avec la syntaxe
TI i.e. sans avoir besoin de mettre des parenthses et modifie la valeur de largument alors que sortd sutilise comme des fonctions normales de Xcas (parenthses obligatoires et sans changer largument !).
SortD ou sortd a comme argument une liste, une squence ou une matrice.
SortA ou sorta renvoie la liste ou la squence trie selon lordre dcroissant.
Si largument est une matrice, SortD ou sortd trie la 1-ire ligne de la matrice
selon lordre dcroissant, et reporte les manuvres de tri de la 1-ire ligne sur les
autres lignes cest dire le tri conserve les colonnes de la matrice.
On tape :
sortd([3,4,2])
ou
SortD([3,4,2])
ou
SortD [3,4,2]
ou
SortD 3,4,2
On obtient :
[4,3,2]

6.40. LES LISTES OU LES VECTEURS


On tape :
sortd([[3,4,2],[6,4,5]])
ou
SortD([[3,4,2],[6,4,5]])
ou
SortD [[3,4,2],[6,4,5]]
ou
SortD [3,4,2],[6,4,5]
On obtient :
[[4,3,2],[4,6,5]]
On tape :
A:=[[3,4,2],[6,4,5]]
SortD(A)
On obtient :
[[4,3,2],[4,6,5]]
et maintenant A vaut [[4,3,2],[4,6,5]] Mais, on tape :
A:=[[3,4,2],[6,4,5]]
sortd(A)
On obtient :
[[4,3,2],[4,6,5]]
et maintenant A vaut toujours [[3,4,2],[6,4,5]]
Attention La syntaxe sans parenthse peut vous jouer des tours !
Par exemple, on tape :
L1:=[1,3,2];L2:=[2,3,1];
SortD L1,SortD L2
On obtient la matrice ! : [[3,2,1],[2,1,3]]
qui est le rsultat de :
SortD(L1,SortD(L2))

6.40.23

Slectionner des lments dune liste : select

select a deux paramtres : une fonction boolenne f et une liste L.


select slectionne les lments c de la liste L, qui vrifie f(c)=true.
On tape :
select(x->(x>=2),[0,1,2,3,4,5])
On obtient :
[2,3,4,5]

437

438

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.40.24

Supprimer des lments dune liste : remove

remove a deux paramtres : une fonction boolenne f et une liste L.


remove enlve les lments c de la liste L, qui vrifie f(c)=true.
On tape :
remove(x->(x>=2),[0,1,2,3,4,5])
On obtient :
[0,1]
Remarque Pour faire la mme chose avec une chaine de catactre, par exemple,
enlever tous les "a" dune chaine :
On tape :
ord("a")
On obtient :
97
On tape :
f(chn):={local l:=length(chn)-1; return
remove(x->(ord(x)==97),seq(chn[k],k,0,l));}
Puis on tape :
f("abracadabra")
On obtient :
["b","r","c","d","b","r"]
Puis on tape :
char(ord(["b","r","c","d","b","r"]))
On obtient :
"brcdbr"

6.40.25

Tester si un lment est dans une liste : member

member a deux paramtres : un lment c et une liste (ou un ensemble) L.


member est une fonction qui teste si llment c est dans la liste L.
member renvoie 0 si c nest pas dans L, et sinon renvoie :
1+"lindice de sa premire apparition".
Attention lordre des paramtres, cest pour des raisons de compatibilit !
On tape :
member(2,[0,1,2,3,4,2])
On obtient :
3
On tape :
member(2,% {0,1,2,3,4,2% })
On obtient :
3

6.40. LES LISTES OU LES VECTEURS

6.40.26

439

Tester si un lment est dans une liste : contains

contains a deux paramtres : une liste (ou un ensemble) L et un lment c.


contains est une fonction qui teste si llment c est dans la liste L.
contains renvoie 0 si c nest pas dans L, et sinon renvoie :
1+"lindice de sa premire apparition".
Attention, lordre des paramtres, cest pour des raisons de compatibilit !
On tape :
contains([0,1,2,3,4,2],2)
On obtient :
3
On tape :
contains(% {0,1,2,3,4,2% },2)
On obtient :
3

6.40.27

Compter les lments dune liste ou dune matrice vrifiant


une proprit : count

count a un, deux ou trois paramtres :


1. une liste dentiers L
2. une fonction relle f,
liste L de longueur n ou une matrice A de dimension p*q,
un argument optionnel row ou col, dans le cas o le deuxime paramtre
est une matrice A.
Lorsque count a :
un paramtre qui est une liste dentiers L, count(L) compte le nombre
doccurrences en renvoyant une matrice de 1ire colonne les lments de la
liste L trie et de 2ime colonne leffectif de cet lment dans la liste.
deux paramtres, count applique la fonction aux lments de la liste (ou de
la matrice) et en renvoie la somme, cest dire,
count(f,L) renvoie le nombre f(L[0])+f(L[1])+..f(L[n-1])
ou
count(f,A) renvoie le nombre f(A[0,0])+....+f(A[p-1,q-1]).
Si f est une fonction boolnne count renvoie le nombre dlments de la
liste (ou de la matrice) pour lesquels la fonction boolnne est vraie.
ou trois paramtres, count applique la fonction aux lments de chaque
ligne (resp colonne) de la matrice A si largument optionnel est row (resp
col) et renvoie une liste de longueur p ayant comme kime lment :
f(A[k,0])+...f(A[k,q-1]) (resp une liste de longueur q ayant comme
kime lment : f(A[0,k])+..f(A[p-1,k])).
On tape :
count([1,3,1,1,2,10,3])

440

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[[1,3],[2,1],[3,2],[10,1]]
On tape :
count((x)->x,[2,12,45,3,7,78])
Ou on tape :
count((x)->x,[[2,12,45],[3,7,78]])
On obtient :
147
car on a : 2+12+45+3+7+78=147.
On tape :
count((x)->x,[[2,12,45],[3,7,78]],row)
On obtient :
[59,88]
car on a : 2+12+45=59 et 3+7+78=88.
On tape :
count((x)->x,[[2,12,45],[3,7,78]],col)
On obtient :
[5,19,123]
car on a : 2+3=5,12+7=10,45+78=123.
On tape :
count((x)->x<12,[2,12,45,3,7,78])
On obtient :
3
On tape :
count((x)->x==12,[2,12,45,3,7,78])
Ou on tape :
count((x)->x==12,[[2,12,45],[3,7,78]])
On obtient :
1
On tape :
count((x)->x>12,[2,12,45,3,7,78])

6.40. LES LISTES OU LES VECTEURS

441

On obtient :
2
On tape :
count(x->x^2,[3,5,1])
On obtient :
35
En effet on a : 32 + 52 + 11 = 35.
On tape :
count(id,[3,5,1])
On obtient :
9
En effet, id est la fonction identit et on a : 3+5+1=9.
On tape :
count(1,[3,5,1])
On obtient :
3
En effet, 1 est la fonction constante gale 1 et on a : 1+1+1=3.

6.40.28

Nombre dlments ayant une valeur donne : count_eq

count_eq a deux ou trois et paramtres : une nombre et une liste (ou une matrice)
et dans le cas o le deuxime paramtre est une matrice, un argument optionnel
row ou col.
count_eq renvoie le nombre dlments de la liste (ou de la matrice) qui sont
gaux au premier argument. Dans le cas o il y a un argument optionnel row
(resp col) count_eq agit sur chacune des lignes (resp colonnes) de la matrice
et renvoie alors une liste.
On tape :
count_eq(12,[2,12,45,3,7,78])
Ou on tape :
count_eq(12,[[2,12,45],[3,7,78]])
On obtient :
1
On tape :
count_eq(12,[[2,12,45],[3,7,78]],row)

442

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[1,0]
On tape :
count_eq(12,[[2,12,45],[3,7,78]],col)
On obtient :
[0,1,0]

Remarque
Les deux paramtres de count_eq ne sont pas forcment numriques : count_eq(ab,[[-ab,1,ab
renvoie 4 si la variable ab nest pas affecte, mais renverra 6 si il y a 0 dans ab
count_eq("ab",["ab",1,"ab",1,"ab",-3]) renvoie 3. Attention ! ! !
si la variable ab nest pas affecte,
count_eq(ab+1-1,[[-ab,1,ab,1,ab,-3],[-ab,1,ab,1,ab,-3]])
renvoie 4,
mais count_eq(ab+1,[-ab,1,ab+1,1,1+ab,-3]) renvoie 1.

6.40.29

Nombre dlments infrieurs une valeur : count_inf

count_inf a deux ou trois paramtres : une nombre et une liste (ou une matrice)
et dans le cas o le deuxime paramtre est une matrice, un argument optionnel
row ou col.
count_inf renvoie le nombre dlments de la liste (ou de la matrice) qui sont
strictement infrieurs au premier argument. Dans le cas o il y a un argument optionnel row (resp col) count_inf agit sur chacune des lignes (resp colonnes)
de la matrice et renvoie alors une liste.
On tape :
count_inf(12,[2,12,45,3,7,78])
Ou on tape :
count_inf(12,[[2,12,45],[3,7,78]])
On obtient :
3
On tape :
count_inf(12,[[2,12,45],[3,7,78]],row)
On obtient :
[1,2]
On tape :
count_inf(12,[[2,12,45],[3,7,78]],col)
On obtient :
[2,1,0]

6.40. LES LISTES OU LES VECTEURS

6.40.30

443

Nombre dlments suprieurs une valeur : count_sup

count_sup a deux paramtres : une nombre et une liste relle (ou une matrice
relle) et dans le cas o le deuxime paramtre est une matrice, un argument optionnel row ou col.
count_sup renvoie le nombre dlments de la liste (ou de la matrice) qui sont
strictement suprieurs au premier argument. Dans le cas o il y a un argument optionnel row (resp col) count_sup agit sur chacune des lignes (resp colonnes)
de la matrice et renvoie alors une liste.
On tape :
count_sup(12,[2,12,45,3,7,78])
Ou on tape :
count_sup(12,[[2,12,45],[3,7,78]])
On obtient :
2
On tape :
count_sup(12,[[2,12,45],[3,7,78]],row)
On obtient :
[1,1]
On tape :
count_sup(12,[[2,12,45],[3,7,78]],col)
On obtient :
[0,0,2]

6.40.31

Somme des lments dune liste : sum add

sum ou add a comme paramtre l une liste (ou une squence) de nombres rels
ou de dcimaux.
sum ou add renvoie la somme des lments de l.
On tape :
sum(2,3,4,5,6)
On obtient :
20

444

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.40.32

Somme cumule des lments dune liste : cumSum

cumSum a comme paramtre l une liste (ou une squence) de nombres rels ou de
dcimaux ou de chane de caractres.
cumSum renvoie la liste (ou la squence) de mme longueur que l avec comme
k-ime lment la somme (ou la concatnation) des lments l[0], .., l[k].
On tape :
cumSum(sqrt(2),3,4,5,6)
On obtient :
sqrt(2),3+sqrt(2),3+sqrt(2)+4,3+sqrt(2)+4+5,
3+sqrt(2)+4+5+6
On tape :
normal(cumSum(sqrt(2),3,4,5,6))
On obtient :
sqrt(2),sqrt(2)+3,sqrt(2)+7,sqrt(2)+12,sqrt(2)+18
On tape :
cumSum(1.2,3,4.5,6)
On obtient :
1.2,4.2,8.7,14.7
On tape :
cumSum([0,1,2,3,4])
On obtient :
[0,1,3,6,10]
On tape :
cumSum("a","b","c","d")
On obtient :
"a","ab","abc","abcd"
On tape :
cumSum("a","ab","abc","abcd")
On obtient :
"a","aab","aababc","aababcabcd"

6.40. LES LISTES OU LES VECTEURS

6.40.33

445

Produit indic : product mul

Voir aussi 6.40.33, 6.45.6 et 6.45.8).


Produit des valeurs dune expression : product
product ou mul a 4 ou 5 arguments.
Avec 5 arguments product(Xpr,Var,a,b,p) ou mul(Xpr,Var,a,b,p)
renvoie le produit demand cest dire renvoie le produit des valeurs de lexpression Xpr quand la variable Var va de a b avec un pas gal p.
On tape :
product(x^2+1,x,1,5,2)
Ou on tape :
mul(x^2+1,x,1,5,2)
On obtient :
520
En effet :
2 10 26 = 520
Avec 4 arguments, product(Xpr,Var,a,b) ou mul(Xpr,Var,a,b)
na pas la mme valeur selon que a est plus petit ou gal b ou non car on
veut avoir lgalit :
product(Xpr,Var,a,b)= product(Xpr,Var,a,c)*product(Xpr,Var,c+1,b).
Aussi, lorsque le pas p nest pas prcis on a :
si a est infrieur b,
product(Xpr,Var,a,b) renvoie le produit des valeurs de lexpression Xpr quand la variable Var va de a b avec un pas de 1 : cette
syntaxe est compatible avec Maple.
Ainsi si a<= b on a :
product(Xpr,Var,a,b)=product(Xpr,Var,a,b,1).
On tape :
product(x^2+1,x,1,4)
Ou on tape :
mul(x^2+1,x,1,4)
On obtient :
1700
En effet :
2 5 10 17 = 1700
si a est suprieur b+1,
product(Xpr,Var,a,b) renvoie linverse du produit des valeurs de
lexpression Xpr quand la variable Var va de b+1 a-1 avec un pas 1 :
cette syntaxe est compatible avec Maple.
On tape :
product(x^2+1,x,4,1)
Ou on tape :
mul(x^2+1,x,4,1)
On obtient :
1/50
En effet :

446

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


1/(5 10) = 1/50
si a est gal b+1,
product(Xpr,Var,b+1,b) renvoie 1.
On tape :
product(x^2+1,x,5,4)
Ou on tape :
mul(x^2+1,x,5,4)
On obtient :
1

Produit des lments dune liste : product


Voir aussi .* (cf 6.41.5) et hadamard pour les matrices (cf 6.45.8).
product ou mul peut aussi avoir 1 ou 2 arguments :
une liste de nombres rels (ou de dcimaux) ou
deux listes de mme longueur.
(voir aussi 6.40.33, 6.45.6 et 6.45.8).
si product ou mul a un argument l, product ou mul renvoie le produit
des lments de l.
On tape :
product([2,3,4])
On tape :
mul([2,3,4])
On obtient :
24
On tape :
product([[2,3,4],[5,6,7]])
On obtient :
[10,18,28]
si product ou mul a deux arguments l1 et l2 (qui sont deux listes ou
deux matrices), product ou mul renvoie le produit terme terme des lments de l1 et des lments de l2.
On tape :
product([2,3,4],[5,6,7])
Ou on tape :
mul([2,3,4],[5,6,7])
On obtient :
[10,18,28]
On tape :
product([[2,3,4],[5,6,7]],[[2,3,4],[5,6,7]])
Ou on tape :
mul([[2,3,4],[5,6,7]],[[2,3,4],[5,6,7]])
On obtient :
[[4,9,16],[25,36,49]]

6.40. LES LISTES OU LES VECTEURS

6.40.34

447

Appliquer une fonction dune variable aux lments dune


liste : map apply of

map ou apply ou of sert appliquer une fonction aux lments dune liste. Mais
ces trois instructions ne sont pas des synonymes. On a :
of a 2 paramtres une fonction f et une expression E ou une liste L. of(f,E)
renvoie f(E) et of(f,L) renvoie f(L). En effet, of est la traduction interne des parenthses : f(x) est traduit en interne par of(f,x). On peut
donc utiliser directement f(x),
apply a 2 paramtres une fonction f et une liste L. apply(f,L) renvoie
[f(L[0]),f(L[1]),...f(L[size(L)-1])]. Attention
apply rpond [] si le deuxime lment nest pas une liste.
map a 2 paramtres une expression E ou une liste L et une fonction f.
map(E,f) renvoie f(E) et map(L,f) renvoie [f(L[0]),f(L[1]),...f(L[size(L)-1])].
Attention lordre des paramtres qui nest pas le mme pour map et pour
apply , cest pour des raisons de compatibilit ! ! !.
Lorsque la liste est une matrice et que la fonction doit sappliquer chaque
lment dune matrice il faut mettre matrix comme argument optionnel
map
On tape :
apply(x->x+1,[3,5,1])
ou
map([3,5,1],x->x+1)
cela ajoute 1 chaque lment de la liste et on obtient :
[4,6,2]
On tape
of(x->x+1,[3,5,1])
et puisque [3,5,1]+1=[3,5,2], on obtient :
[3,5,2]
Exemple avec une matrice
On tape :
apply(x->x+1,[[3,5,1],[3,5,1],[3,5,1]])
ou
map([[3,5,1],[3,5,1],[3,5,1]],x->x+1)
cela ajoute 1 chaque lment de la liste cest dire chaque ligne de la matrice
et comme [3,5,1]+1=[3,5,2], on obtient :
[[3,5,2],[3,5,2],[3,5,2]]

448

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
of(x->x+1,[[3,5,1],[3,5,1],[3,5,1]])
cela ajoute 1 cest dire la matrice identit la matrice et on obtient :
[[4,5,1],[3,6,1],[3,5,2]]
On tape :
map([[3,5,1],[3,5,1],[3,5,1]],x->x+1,matrix)
cela ajoute 1 chaque lment de la matrice et on obtient :
[[4,6,2],[4,6,2],[4,6,2]]
Autres exemples On tape :
apply(x->x^2,[3,5,1])
ou
of(x->x^2,[3,5,1])
ou
map([3,5,1],x->x^2)
ou on dfinit la fonction h(x) = x2 en tapant :
h(x):=x^2
puis
apply(h,[3,5,1])
ou
of(h,[3,5,1])
ou
map([3,5,1],h)
On obtient :
[9,25,1]
On tape :
apply(h,[[3,5,1],[3,5,1],[3,5,1]])
ou
map([[3,5,1],[3,5,1],[3,5,1]],h)
ou
map([[3,5,1],[3,5,1],[3,5,1]],h,matrix)

6.40. LES LISTES OU LES VECTEURS

449

On obtient chaque lement au carr :


[[9,25,1],[9,25,1],[9,25,1]]
On tape :
of(h,[[3,5,1],[3,5,1],[3,5,1]])
On obtient le carr de la matrice :
[[27,45,9],[27,45,9],[27,45,9]]
On dfinit la fonction g(x) = [x, x2 , x3 ] en tapant :
g(x):=[x,x^2,x^3]
ou
g:=(x)->[x,x^2,x^3]
puis, on tape :
apply(g,[3,5,1])
ou
map([3,5,1],g)
On fait agir g sur 3, puis sur 5, puis sur 1 et on obtient :
[[3,9,27],[5,25,125],[1,1,1]]
On tape :
of(g,[3,5,1])
On fait agir g sur la liste [3,5,1] et on obtient :
[[3,5,1],[9,25,1],[27,125,1]]
Remarque
Si l1,l2,l3 sont des listes :
sizes([l1,l2,l3])=map(size,[l1,l2,l3])

6.40.35

Appliquer une fonction de plusieurs variables un polynme


donn au format interne :map

Le polynme x2 + 2xy + y 2 scrit au format interne :


% % % {1,[2,0]% % % }+% % % {2,[1,1]% % % }+% % % {1,[0,2]%
% % }
On peut transformer x2 +2xy+y 2 au format interne avec la commande symb2poly
(voir 6.26.6). Par exemple p:=symb2poly((x+y)^2,[x,y]) renvoie % %
% {1,[2,0]% % % }+% % % {2,[1,1]% % % }+% % % {1,[0,2]%
% % }
Pour un polynme de n variables, f va agir sur les coefficients de chaque monme
du polynme.

450

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Pour agir sur un monme de n variables, f doit tre une fonction de n + 1 variables, on considre que ces variables reprsentent le coefficient, lexposant de la
premire variable,...,lexposant de la n-ime variable et f transforme le coefficient
de ce monme.
Par exemple, si le monme est 5x2 y 3 , au format interne il scrit : % % % {5,[2,3]%
% % }
et si f est ddfinie par :
f(a,b,c):=a*(2*b+3*c)
alors
map(% % % {5,[2,3]% % % },f) renvoie le monme f (5, 2, 3)x2 y 3 = 65x2 y 3
crit au format interne, cest dire % % % {65,[2,3]% % % }
On tape :
map(% % % {5,[2,3]% % % },(a,b,c)->a*(2b+3c))
On obtient :
% % % {65,[2,3]% % % }
On tape :
map(% % % {1,[2,0]% % % }+% % % {2,[1,1]% % % }+% % % {1,[0,2]%
% % },(a,b,c)->a*(b+2c))
On obtient :
% % % {2,[2,0]% % % }+% % % {6,[1,1]% % % }+% % % {4,[0,2]%
% % } car si f est la fonction (a, b, c) > a (b + 2c) alors f (1, 2, 0) =
2, f (2, 1, 1) = 6, f (1, 0, 2) = 4

6.40.36

Appliquer une fonction de 2 variables aux lments de 2 listes :


zip

zip sert appliquer une fonction de 2 variables aux lments de 2 listes.


On tape :
zip(sum,[a,b,c,d],[1,2,3,4])
On obtient :
[a+1,b+2,c+3,d+4]
On tape :
zip((x,y)->x^2+y^2,[4,2,1],[3,5,1])
Ou on tape :
f:=(x,y)->x^2+y^2
puis,
zip(f,[4,2,1],[3,5,1])
On obtient :
[25,29,2]
On tape :

6.40. LES LISTES OU LES VECTEURS

451

f:=(x,y)->[x^2+y^2,x+y]
puis,
zip(f,[4,2,1],[3,5,1])
On obtient :
[[25,7],[29,7],[2,2]]

6.40.37

Faire une liste de zros : newList

newList(n) fabrique une liste forme de n zros.


On tape :
newList(3)
On obtient :
[0,0,0]

6.40.38

Faire une liste avec une fonction : makelist

makelist fabrique une liste laide dune fonction, en donnant les bornes de la
variable et le pas de cette variable qui par dfaut vaut 1 ou -1 selon que lordre des
bornes.
On tape :
makelist(x->x^2,3,5)
ou bien
makelist(x->x^2,3,5,1)
ou on dfinit la fonction h(x) = x2 en tapant : h(x):=x^2 puis
makelist(h,3,5,1)
On obtient :
[9,16,25]
On tape :
makelist(x->x^2,3,6,2)
On obtient :
[9,25]
Attention ! ! ! il faut purger x si x est affect.

452

6.40.39

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Faire une liste alatoire : randvector

randvector fabrique une liste de nombres alatoires.


randvector a comme argument un entier n et ventuellement un deuxime argument, soit un entier k, soit le nom quot ou non quot de la loi de distribution
des nombres alatoires de la liste (voir aussi 6.26.32, 6.44.3 et 7.3.9).
randvector renvoie une liste dordre n constitue dentiers alatoires uniformment distribus entre -99 et 99 (par dfaut) ou entre 0 et k 1 ou uneliste dordre
n de nombres alatoires distribus selon la loi mise entre-quote ou en paramtre.
Lorsque randvector a comme argument un entier n et une loi alatoire de Xcas
quil faut quoter ou pas dans ce cas, randvector renvoie une liste de dimension
n dont les lments sont pris au hasard selon la fonction donne en troisime argument.
Les fonctions donnes en deuxime argument qui doivent tre quoter ou non et
peuvent tre :
rand(n)
binomial(n,p) ou binomial,n,p ourandbinomial(n,p)
multinomial(P,K) ou multinomial,P,K ou randmultinomial(P,K)
poisson() ou poisson, ou randpoisson()
normald(,) ou normald,, ou randnorm(,)
exponential(a) ou exponential,a ou randexp(a)
fisher(n,m) ou fisher,n,m ou randfisher(n,m)
Attention la syntaxe sans quote marche avec les lois mais pas avec la commande
rand... correspondante, donc par exemple les commandes randvector(3,normald,0,1)
ou randvector(3,normald(0,1)) ou randvector(3,randnorm(0,1))
sont valables mais randvector(3,randnorm,0,1) nest pas valable.
On tape :
randvector(3)
On obtient par exemple :
[-54,78,-29]
On tape :
randvector(3,5)
On tape :
randvector(3,rand(5))
On obtient par exemple :
[1,2,4]
On tape :
randvector(3,normald,0,1)
Ou on tape :
randvector(3,normald(0,1))

6.40. LES LISTES OU LES VECTEURS

453

On obtient par exemple :


[1.39091705476,-0.136794772167,0.187312440336]
On tape :
randvector(3,2..4)
On obtient par exemple :
[3.92450003885,3.50059241243,2.7322040787]
On tape :
randvector(6,binomial,4,0.2)
Ou on tape :
randvector(6,binomial(4,0.2))
On obtient par exemple :
[0,1,0,2,2,0]
On effectue 6 fois 4 tirages avec une probabilit de succs de 0.2 et chaque fois
le nombre de succs a t de :
0 puis 1, puis 0, puis 2, puis 2, puis 0.
On tape :
randvector(6,multinomial,[1/2,1/3,1/6])
Ou on tape :
randvector(6,multinomial([1/2,1/3,1/6]))
On obtient par exemple :
[3,2,1]
On effectue 6 fois le tirage dun objet parmi 3 objets (tirage avec remise). Chaque
objet a la probabilit [1/2,1/3,1/6] dtre tir et ici on a obtenu :
3 fois lobjet ayant la probabilit 1/2 dtre tirs, 2 fois lobjet ayant la probabilit
1/3 dtre tirs et 1 fois lobjet ayant la probabilit 1/6 dtre tirs. On tape :
randvector(10,multinomial,[1/2,1/3,1/6],[A,B,C])
Ou on tape :
randvector(10,multinomial([1/2,1/3,1/6],[A,B,C]))
On obtient par exemple :
[A,C,A,A,B,B,C,A,A,B]
cest dire la liste des objets qui ont t tirs. On tape :
randvector(10,multinomial,[1/2,1/3,1/6],["R","V","B"])

454

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Ou on tape :
randvector(10,multinomial([1/2,1/3,1/6],["R","V","B"]))
On obtient par exemple :
["R","R","B","V","R","V","B","B","R","R"]
On tape :
randvector(6,poisson,1.3)
Ou on tape :
randvector(6,poisson(1.3))
On obtient par exemple :
[1,0,1,1,1,1]
On tape :
randvector(4,exponential,1.2)
Ou on tape :
randvector(4,exponential(1.2))
On obtient par exemple :
[1.67683756526,0.192937941271,0.580820253805,0.709352619633]
On tape :
randvector(5,fisher,4,6)
Ou on tape :
randvector(5,fisher(4,6))
On obtient par exemple :

[0.17289703163,1.03709368317,0.161051043162,1.4407877128,0.35869010427

6.40.40

Liste des diffrences de termes conscutifs : deltalist

deltalist permet dobtenir la liste des diffrences de deux termes conscutifs


de la liste donne comme argument.
On tape :
deltalist([5,8,1,9])
On obtient :
[3,-7,8]

6.41. FONCTIONS UTILES POUR LES VECTEURS ET LES COMPOSANTES DUN VECTEUR455

6.40.41

Faire une matrice avec une liste : list2mat

list2mat permet dobtenir la matrice des termes de la liste donne comme argument en scindant la liste selon le nombre de colonnes spcifies. Si il manque des
termes, la liste est complte par des 0.
On tape :
list2mat([5,8,1,9,5,6],2)
On obtient :
[[5,8],[1,9],[5,6]]
On tape :
list2mat([5,8,1,9],3)
On obtient :
[[5,8,1],[9,0,0]]
Remarque
En rponse, les dlimiteurs dune matrice sont [ et ] alors que les dlimiteurs dune
liste sont [ et ] (la barre verticale des crochets est plus eppaisse pour les matrices).

6.40.42

Faire une liste avec une matrice : mat2list

mat2list permet dobtenir la liste des termes de la matrice donne comme argument.
On tape :
mat2list([[5,8],[1,9]])
On obtient :
[5,8,1,9]

6.41

Fonctions utiles pour les vecteurs et les composantes


dun vecteur

6.41.1

Les normes dun vecteur : maxnorm l1norm l2norm norm

Voir aussi 6.48 pour les diffrentes instructions pour les normes dune matrice.
Les diffrentes instructions pour les normes dun vecteur sont :
maxnorm pour calculer la norme l dun vecteur : cest le maximum des
valeurs absolues de ses coordonnes.
On tape :
maxnorm([3,-4,2])
Ou on tape :
maxnorm(vecteur(3,-4,2))
On obtient :
4

456

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


En effet : x=3, y=-4, z=2 et 4=max(|x|,|y|,|z|).
Pour les matrices voir 6.48.4.
l1norm pour calculer la norme l1 dun vecteur : cest la somme des valeurs
absolues de ses coordonnes.
On tape :
l1norm([3,-4,2])
Ou on tape :
l1norm(vecteur(3,-4,2))
On obtient :
9
En effet : x=3, y=-4, z=2 et 9=|x|+|y|+|z|.
Pour les matrices voir 6.48.4.
norm ou l2norm pour calculer la norme l2 dun vecteur : cest la racine
carre de la somme des carrs de ses coordonnes.
On tape :
norm([3,-4,2])
Ou on tape :
norm(vecteur(3,-4,2))
On obtient :
sqrt(29)
En effet : x=3, y=-4, z=2 et 29 = |x|2 + |y|2 + |z|2 .
Pour les matrices voir 6.48.4 et 6.48.1.

6.41.2

Pour normaliser les composantes dun vecteur : normalize


unitV

normalize ou unitV normalise les composantes dun vecteur et renvoie les


composantes dun vecteur de norme 1 selon la norme l2 (la racine carre de la
somme des carrs de ses coordonnes).
On tape :
normalize([3,4,5])
On obtient :
[3/(5*sqrt(2)),4/(5*sqrt(2)),5/(5*sqrt(2))]
En effet : x=3, y=4, z=5 et 50 = |x|2 + |y|2 + |z|2 .

6.41.3

Somme terme terme de deux listes : + .+

La somme terme terme de deux listes se fait avec loprateur infix + ou .+


et aussi avec loprateur prefix +.
Si les deux listes nont pas la mme longueur la liste la plus petit est complte par
des zros.
Bien voir la diffrence avec les squences car si loprateur infix + a comme
arguments deux squences, il renvoie la somme des termes des deux squences.
On tape :
[1,2,3]+[4,3,5]

6.41. FONCTIONS UTILES POUR LES VECTEURS ET LES COMPOSANTES DUN VECTEUR457
Ou on tape :
[1,2,3] .+[4,3,5]
Ou on tape :
+([1,2,3],[4,3,5])
Ou on tape :
+([[1,2,3],[4,3,5]])
On obtient :
[5,5,8]
On tape :
[1,2,3,4,5,6]+[4,3,5]
Ou on tape :
+([1,2,3,4,5,6],[4,3,5])
Ou on tape :
+([[1,2,3,4,5,6],[4,3,5]])
On obtient :
[5,5,8,4,5,6]
Attention
Quand loprateur + est prfix il doit tre quot cest dire crit +.
Si on tape : On tape :
[1,2,3,4,5,6]+4
On obtient, car la liste est considre comme les coefficients dun polynme :
[1,2,3,4,5,10]

6.41.4

Diffrence terme terme de deux listes : - .-

La diffrence terme terme de deux listes se fait avec loprateur infix - ou


.- et aussi avec loprateur prefix -.
Si les deux listes nont pas la mme longueur la liste la plus petit est complte par
des zros.
Bien voir la diffrence avec les squences car si loprateur infix - a comme arguments deux squences, il renvoie la diffrence des sommes des termes de chacune
des squences.
On tape :
[1,2,3]-[4,3,5]
Ou on tape :

458

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


[1,2,3] .+ [4,3,5]

Ou on tape :
-([1,2,3],[4,3,5])
Ou on tape :
-([[1,2,3],[4,3,5]])
On obtient :
[-3,-1,-2]
Attention
Quand loprateur - est prfix il doit tre quot cest dire crit -.

6.41.5

Produit terme terme de deux listes : .*

Voir aussi 6.45.9, hadamard pour les matrices (cf 6.45.8) et product pour
les listes et les matrices (cf 6.45.6 et 6.40.33)
Le produit terme terme de deux listes de mme longueur se fait avec loprateur
infix .*.
On tape :
[1,2,3] .* [4,3,5]
On obtient :
[4,6,15]
On tape :
[[1,2],[4,3]] .* [[4,3],[5,6]]
On obtient :
[[4,6],[20,18]]

6.41.6

Quotient terme terme de deux listes : ./

Le quotient terme terme de deux listes de mme longueur se fait avec loprateur infix ./.
On tape :
[1,2,3] ./ [4,3,5]
On obtient :
[1/4,2/3,3/5]

6.41. FONCTIONS UTILES POUR LES VECTEURS ET LES COMPOSANTES DUN VECTEUR459

6.41.7

Le produit scalaire : scalar_product dotprod dot dotP


* scalar_Product produit_scalaire

*, oprateur infix, calcule le produit scalaire des deux vecteurs dont les composantes sont donnes en argument.
dot ou dotP ou dotprod ou scalar_product ou scalarProduct calcule le produit scalaire des deux vecteurs dont les composantes sont donnes en
argument.
On tape :
dot([1,2,3],[4,3,5])
ou :
scalar_product([1,2,3],[4,3,5])
ou :
produit_scalaire([1,2,3],[4,3,5])
ou :
produit_scalaire(vecteur([1,2,3]),vecteur([4,3,5]))
ou :
[1,2,3]*[4,3,5]
ou encore :
*([1,2,3],[4,3,5])
On obtient :
25
En effet 25=1*4+2*3+3*5.
Attention
Le produit de deux listes de longueur n renvoie le prduit scalaire de deux vecteurs
de Rn mais une liste leve au carr renvoie la liste des carres terme terme : On
tape :
[1,2,3]*[1,2,3]
On obtient :
25
On tape :
[1,2,3]^2
On obtient :
[1,4,9]

460

6.41.8

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Le produit vectoriel : cross crossP crossproduct

cross ou crossP ou crossproduct calcule les composantes du produit


vectoriel des deux vecteurs dont les composantes sont donnes en argument.
On tape :
cross([1,2,3],[4,3,2])
Ou on tape :
cross(vecteur([1,2,3]),vecteur([4,3,2]))
On obtient :
[-5,10,-5]
En effet : 5 = 2 2 3 3, 10 = 1 2 + 4 3, 5 = 1 3 2 4.

6.42

Fonctions utiles pour les statistiques : mean moyenne,


variance, stddev ecart_type, stddevp, ecart_type_
stdDev, median, quantile, quartiles, quartile1,
quartile3, boxwhisker, moustache

Voir aussi 6.45.37 and 7.


Fonctions utiles pour les statistiques dont les donnees sont des listes :
mean ou moyenne pour calculer la moyenne des lments dune liste.
On tape :
mean([3,4,2])
On obtient :
3
On tape :
mean([1,0,1])
On obtient
2/3
stddev ou ecart_type pour calculer lcart type numrique des lments dune liste.
On tape :
stddev([3,4,2])
On obtient :
sqrt(2/3)
On
p a en effet la moyenne qui vaut 3 et lcart
p type qui vaut :
((3 3)2 + (4 3)2 + (2 3)2 )/3 = 2/3
stddevp ou stdDev ou ecart_type_population pour calculer une
estimation de lcart type numrique de la population partir dun chantillon dont les lments sont donns dans une liste.
On tape :
stddevp([3,4,2])
On obtient :
1

6.42. FONCTIONS UTILES POUR LES STATISTIQUES : MEAN MOYENNE, VARIANCE, STDDEV ECART_

On
p a en effet la moyenne qui vaut 3 et lcart
p type qui vaut :
((3 3)2 + (4 3)2 + (2 3)2 )/2 = 2/2 = 1
On a la relation :
stddevp(l)^2=size(l)*stddev(l)^2/(size(l)-1).
variance pour calculer la variance numrique des lments dune liste.
On tape :
variance([3,4,2])
On obtient :
2/3
median pour calculer la mdiane des lments dune liste.
On tape :
median([0,1,3,4,2,5,6])
On obtient :
3.0
quantile pour calculer les dciles des lments dune liste.
On tape :
quantile([0,1,3,4,2,5,6],0.25)
On obtient le premier quartile :
[1.0]
On tape :
quantile([0,1,3,4,2,5,6],0.5)
On obtient la mdiane :
[3.0]
On tape :
quantile([0,1,3,4,2,5,6],0.75)
On obtient le troisime quartile :
[5.0]
quartiles calcule le minimum, le premier quartile, la mdiane, le troisime quartile et le maximum dune serie statistique.
On tape :
quartiles([0,1,3,4,2,5,6])
On obtient :
[[0.0],[1.0],[3.0],[5.0],[6.0]]
quartile1 calcule le premier quartile dune serie statistique.
On tape :
quartile1([0,1,3,4,2,5,6])
On obtient :
1.0
quartile3 calcule le troisime quartile dune serie statistique.
On tape :
quartile3([0,1,3,4,2,5,6])
On obtient :
5.0
boxwhisker ou moustache pour afficher la boite moustaches des lments dune liste.
On tape :
moustache([0,1,3,4,2,5,6])

462

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient le dessin de la boite moustaches de la liste mise comme paramtre.


Soit A la liste [0,1,2,3,4,5,6,7,8,9,10,11].
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
On obtient :
11/2 pour mean(A)
sqrt(143/12) pour stddev(A)
0 pour min(A)
[1.0] pour quantile(A,0.1)
[2.0] pour quantile(A,0.25)
[5.0] pour median(A) ou pour quantile(A,0.5)
[8.0] pour quantile(A,0.75)
[9.0] pour quantile(A,0.9)
11 pour max(A)
[[0.0],[2.0],[5.0],[8.0],[11.0]] pour quartiles(A)
Voir aussi ces fonctions pour les matrices la section 6.45.37 et pour les listes
pondres au chapitre 7.

6.43

Les tableaux indics par des chanes : table

Une table est une liste indice par quelque chose de plus gnral que des entiers.
Une table peut tre utilise, par exemple, pour stocker des numros de tlphone
indics par des noms.
Dans Xcas, les indices dune table peuvent tre nimporte quels objets de Xcas.
Laccs se fait par un algorithme qui trie par type puis utilise lordre de chaque
type (par exemple < pour le type numrique, lordre lexicographique pour les
chaines etc...).
table a comme argument une liste ou une squence dgalit de la forme :
"nom_index"=valeur_element.
table renvoie cette table.
On tape :
T:=table(3=-10,"a"=10,"b"=20,"c"=30,"d"=40)
On tape :
T["b"]
On obtient :
20
On tape :
T[3]
On obtient :
-10

6.44. LES MATRICES PARTICULIRES

463

Exemple On veut coder les lettres "a","b",.."z" par 1,2,....26.


On tape :
alphab:="abcdefghijklmnopqrstuvwxyz";
puis :
code:=table(seq(alphab[j]=j+1,j=0..25));
On tape code["c"]
On obtient 3
ou bien on crit une fonction :
Code(a):={
local code,alphab,j;
alphab:="abcdefghijklmnopqrstuvwxyz";
code:=table(seq(alphab[j]=j+1,j=0..25));
return code(a);
};
On tape Code("c")
On obtient 3
Remarque
Si on fait une affectation du type T[n]:= ... o T est le nom dune variable et
n un entier
si la variable T contient une liste ou une squence, alors le n-ime lment
de T est modifi,
si la variable T nest pas assigne, une table T est cre avec une entre
(correspondant lindice n). Notez quaprs cette assignation T nest pas
une liste, bien que n soit un entier.

6.44

Les matrices particulires

Une matrice est represente par une liste de listes de mme longueur. Dans
les rponses de Xcas, les matrices sont parenthses avec []. Par exemple, [1,2,3]
dsigne la matrice [[1,2,3]] qui a une seule ligne, alors que [1,2,3] dsigne la liste
[1,2,3].
Dans ce document, on utilise la notation habituelle ( [[1,2,3]]) pour les matrices
renvoyes comme rponses.

6.44.1

Matrice identit : idn identity

idn a comme argument un entier n.


idn renvoie la matrice identit dordre n.
On tape :
idn(2)
On obtient :
[[1,0],[0,1]]
On tape :
idn(3)

464

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[[1,0,0],[0,1,0],[0,0,1]]

6.44.2

Matrice de zros : newMat matrix

newMat(n,p) ou matrix(n,p) renvoie la matrice de n lignes et de p colonnes forme par des zros.
On tape :
newMat(4,3)
Ou on tape :
matrix(4,3)
On obtient :
[[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

6.44.3

Matrice alatoire : ranm randMat randmatrix

ranm ou randMat ou randmatrix a comme argument un entier n ou deux


entiers n, m et ventuellement un troisime argument soit un entier k, soit le nom
quot ou non quot de la loi de distribution des nombres alatoires de la matrice
(voir aussi 6.26.32, 6.40.39 et 7.3.9).
ranm renvoie un vecteur dordre n ou une matrice n m constitue dentiers alatoires uniformment distribus entre -99 et 99 (par dfaut) ou entre 0 et k 1 ou
une matrice n m de nombres alatoires distribus selon la loi mise entre-quote.
Attention la syntaxe sans quote marche avec les lois mais pas avec la commande
rand... correspondante, donc par esxemple les commandes ranm(3,4,normald,0,1)
ou ranm(3,4,normald(0,1)) ou ranm(3,4,randnorm(0,1)) sont
valables mais ranm(3,4,randnorm,0,1) nest pas valable.
On tape :
ranm(3)
On obtient :
[-54,78,-29]
On tape :
ranm(2,4)
On obtient :
[[27,-29,37,-66],[-11,76,65,-33]]
On tape :
ranm(2,4,3)
Ou on tape :

6.44. LES MATRICES PARTICULIRES

465

ranm(2,4,rand(3))
On obtient :
[[0,1,1,0],[0,1,2,0]]
On tape :
ranm(2,4,randnorm(0,1))
On obtient :
[[1.83785427742,0.793007112053,-0.978388964902,-1.88602023857],
[-1.50900874199,-0.241173369698,0.311373795585,-0.532752431454]]
On tape :
ranm(2,4,2..4)
On obtient :
[[2.00549363438,3.03381264955,2.06539073586,2.04844321217],
[3.88383254968,3.28664474655,3.76909781061,2.39113253355]]
On tape :
ranm(4,5,binomial,4,0.2)
Ou on tape :
ranm(4,5,binomial(4,0.2))
On obtient :
[[1,1,1,0,2],[2,1,0,0,0],[1,2,2,1,1],[0,2,1,1,0]]
On effectue 4*5 fois 4 tirages avec une probabilit de succs de 0.2 et chaque fois
le nombre de succs a t de :
1 puis 1, puis 1, puis 0, puis 2, puis 2, puis 1 etc...
On tape :
ranm(4,5,multinomial,[1/2,1/3,1/6])
Ou on tape :
ranm(4,5,multinomial([1/2,1/3,1/6]))
On obtient par exemple :
[[4,1,0],[2,2,1],[3,2,0],[4,1,0]]
Dans ce cas on obitient une matrice ayant 4 lignes et 3 colonnes car sur chaque
ligne on a le dcompte du nombre de tirages par type, ici pour le premier tirage on
a obtenu 4 objets ayant la probabilit 1/2 dtre tirs, 1 objet de probabilit ayant la
probabilit 1/3 dtre tirs, 0 objet de probabilit ayant la probabilit 1/6 dtre tirs,
etc... Cest pratique car par exemple ranm(4,200,multinomial,[1/2,1/3,1/6])
va renvoyer une matrice 4*3 qui donne la rpartition.
On tape :

466

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


ranm(3,5,multinomial,[1/2,1/3,1/6],["R","V","B"])

Ou on tape :
ranm(3,5,multinomial([1/2,1/3,1/6],["R","V","B"]))
On obtient par exemple :

[["B","B","V","V","R"],["B","R","R","R","R"],["R","R","R","R","V"]]
On tape :
ranm(3,4,poisson,1.3)
Ou on tape :
ranm(3,4,poisson(1.3))
On obtient par exemple :
[[2,2,0,4],[0,0,1,1],[0,4,1,0]]
On tape :
ranm(2,3,exponential,1.2)
Ou on tape :
ranm(2,3,exponential(1.2))
On obtient par exemple :
[[1.39292444066,0.214488721628,0.607596751757],
[0.58087800165,0.662248573431,0.385110606536]]
On tape :
ranm(2,3,fisher,6,5)
Ou on tape :
ranm(2,3,fisher(6,5))
On obtient par exemple :

[[0.580815888368,0.43932104968,3.00433399184],[0.546184604298,2.078467

6.44. LES MATRICES PARTICULIRES

6.44.4

467

Diagonale dune matrice ou matrice dune diagonale : diag


BlockDiagonal

diag ou BlockDiagonal a comme argument une matrice A ou une liste l.


diag renvoie la diagonale de A ou la matrice diagonale ayant pour diagonale la
liste l.
On tape :
diag([[1,2],[3,4]])
On obtient :
[1,4]
On tape :
diag([1,4])
On obtient :
[[1,0],[0,4]]

6.44.5

Bloc de Jordan : JordanBlock

JordanBlock a comme argument une expression a et un entier n.


JordanBlock renvoie une matrice carre dordre n avec a sur la diagonale principale, 1 au-dessus de la diagonale et 0 ailleurs.
On tape :
JordanBlock(7,3)
On obtient :
[[7,1,0],[0,7,1],[0,0,7]]

6.44.6

Matrice de Hilbert : hilbert

hilbert a comme argument un entier n.


hilbert renvoie la matrice de Hilbert.
Cest une matrice carre dordre n dlments : aj,k =

1
j+k+1

On tape :
hilbert(4)
On obtient :
[[1,1/2,1/3,1/4],[1/2,1/3,1/4,1/5],[1/3,1/4,1/5,1/6],
[1/4,1/5,1/6,1/7]]

468

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.44.7

Matrice de Vandermonde : vandermonde

vandermonde a comme argument un vecteur de composantes xj .


vandermonde renvoie la matrice de Vandermonde correspondante : elle a pour
k ime ligne est le vecteur de composantes xkj (k = 0..n 1).
Attention !
Xcas numrote les lignes et les colonnes partir de 0.
On tape :
vandermonde([a,2,3])
On obtient (si a nest pas affect) :
[[1,1,1],[a,2,3],[a*a,4,9]]

6.45

Cration et arithmtique des matrices

6.45.1

Pour valuer une matrice : evalm

evalm sert valuer une matrice en mode Maple, par contre Xcas value toujours les matrices, sans avoir besoin de la commande evalm.

6.45.2

Addition et soustraction de deux matrices : + - .+ .-

Laddition (resp la soustraction) de deux matrices se fait laide de loprateur


infix + ou .+ (resp - ou .-).
On tape :
[[1,2],[3,4]] + [[5,6],[7,8]]
On obtient :
[[6,8],[10,12]]
On tape :
[[1,2],[3,4]] - [[5,6],[7,8]]
On obtient :
[[-4,-4],[-4,-4]]
Remarque
+ peut aussi tre prfix, dans ce cas il doit tre quot.
On tape :
+([[1,2],[3,4]],[[5,6],[7,8]],[[2,2],[3,3]])
On obtient :
[[8,10],[13,15]]

6.45. CRATION ET ARITHMTIQUE DES MATRICES

6.45.3

469

Multiplication de deux matrices : * &*

La multiplication de deux matrices se fait laide de loprateur infix * (ou &*).


On tape :
[[1,2],[3,4]] * [[5,6],[7,8]]
Ou on tape :
[[1,2],[3,4]] &* [[5,6],[7,8]]
On obtient :
[[19,22],[43,50]]

6.45.4

Addition des lments dune mme colonne dune matrice :


sum

sum a comme argument une matrice A.


sum renvoie la liste dont les lments sont les sommes des lments de chaque
colonne de la matrice A.
On tape :
sum([[1,2],[3,4]])
On obtient :
[4,6]

6.45.5

Somme cumule des lments dune mme colonne dune matrice : cumSum

cumSum a comme argument une matrice A.


cumSum renvoie la matrice dont les colonnes sont les sommes cumules deslments dune mme colonne de la matrice A.
On tape :
cumSum([[1,2],[3,4],[5,6]])
On obtient :
[[1,2],[4,6],[9,12]]
puisque les sommes cumules sont 1, 1+3=4, 1+3+5=9 et 2, 2+4=6, 2+4+6=12.

6.45.6

Multiplication des lments dune mme colonne dune matrice : product

product a comme argument une matrice A.


product renvoie la liste des produits des lments dune mme colonne de la
matrice A (voir aussi 6.40.33 et 6.45.8).
On tape :
product([[1,2],[3,4]])
On obtient :
[3,8]

470

6.45.7

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Elvation dune matrice une puissance entire : &

Llvation dune matrice une puissance se fait laide de loprateur infix


^ (ou &^).
On tape :
[[1,2],[3,4]] ^ 5
Ou on tape :
[[1,2],[3,4]] &^ 5
On obtient :
[[1069,1558],[2337,3406]]
On tape :
normal([[1,2],[3,4]] ^ n)
Ou on tape :
normal([[1,2],[3,4]] &^ n)
On obtient :

[[(11-sqrt(33))/22*((sqrt(33)+5)/2)^n+(11+sqrt(33))/22*((-sqrt(33)+5)/

6.45.8

Produit de Hadamard : hadamard product

Voir aussi .* pour les listes (cf 6.41.5)


hadamard (ou product) a comme arguments deux matrices A et B de mme
ordre.
product est une fonction plus gnrale (voir aussi 6.40.33 et 6.45.6).
hadamard (ou product) renvoie la matrice constitue par le produit terme
terme des lments de A et B.
On tape :
hadamard([[1, 2],[3,4]],[[5, 6],[7, 8]])
On obtient :
[[5,12],[21,32]]
Si on tape :
hadamard([1,2],[3,4])
ou
hadamard([[1,2],[3,4]])
On obtient :
5*sqrt(5)

6.45. CRATION ET ARITHMTIQUE DES MATRICES

471

Ici [1,2],[3,4] nest pas considr comme 2 vecteurs (car le produit de Hadamard
ne marche que sur des matrices) mais comme une matrice 2 lignes.
hadamard calcule prend le produit des normes des vecteurs colonnes et des vecteurs

lignes
et renvoie leplus petit des 2 :

1 + 4 9 + 16 = 5 5 qui est plus petit que 1 + 9 4 + 16 = 10 2.


Mais si on tape :
product([1,2],[3,4])
ou
product([[1,2],[3,4]])
On obtient :
[3,8]

6.45.9

Produit de Hadamard (version infixe) : .*

Voir aussi 6.41.5 et 6.45.8.


.* a comme arguments deux matrices ou deux listes A et B de mme ordre.
.* est un oprateur infix qui renvoie la matrice ou la liste constitue par le produit
terme terme des lments de A et B.
On tape :
[[1, 2],[3,4]] .* [[5, 6],[7, 8]]
On obtient :
[[5,12],[21,32]]

6.45.10

Division de Hadamard (version infixe) : ./

./ a comme arguments deux matrices ou deux listes A et B de mme ordre.


./ est un oprateur infix qui renvoie la matrice ou la liste constitue par la division
terme terme des lments de A et B.
On tape :
[[1, 2],[3,4]] ./ [[5, 6],[7, 8]]
On obtient :
[[1/5,1/3],[3/7,1/2]]

6.45.11

Puissance de Hadamard (version infixe) : .

.^ a comme arguments une matrices A et un nombre rel b.


.^ est un oprateur infix qui renvoie la matrice constitue par les puissances b de
chaque lment de A.
On tape :
[[1, 2],[3,4]] .^ 2
On obtient :
[[1,4],[9,16]]

472

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.45.12

Extraire un ou des lment(s) dune matrice : at

Un matrice est une liste de listes de mme longueur.


On tape :
A:=[[3,4,5],[1,2,6]]
On obtient :
[[3,4,5],[1,2,6]]
Pour obtenir un lment, on met deux arguments entre des crochets : lindice
de la ligne et lindice de la colonne spar par une virgule si on veut que les
indices commencent 0.
On tape :
[[3,4,5],[1,2,6]][1,2]
ou
A[1,2]
ou
A[1][2]
ou
at(A,[1,2])
On obtient :
6
Ou bien On tape des doubles crochets ou des parenthses si on veut que les
indices commencent 1 :
[[3,4,5],[1,2,6]][[1,2]]
ou
A[[1,2]]
ou
A[[1]][[2]]
ou
[[3,4,5],[1,2,6]](1,2)
ou
A(1,2)
ou
A(1)(2)
On obtient :
4
Pour obtenir une ligne de la matrice A, on met lindice de la ligne entre des
crochets, on tape :
[[3,4,5],[1,2,6]][1]
ou
A[1]
ou
at(A,1)
On obtient :
[1,2,6]
Ou bien On tape des doubles crochets ou des parenthses si on veut que les
indices commencent 1 :

6.45. CRATION ET ARITHMTIQUE DES MATRICES

473

[[3,4,5],[1,2,6]][[1]]
ou
A[[1]]
ou
[[3,4,5],[1,2,6]](1)
ou
A(1)
On obtient :
[3,4,5]
Pour obtenir une sous-ligne de la matrice A, on met deux arguments entre
des crochets : lindice de la ligne et un intervalle pour dsigner les indices
des colonnes formant la sous-ligne.
On tape :
A[1,0..2]
On obtient :
[1,2,6]
On tape :
A[1,1..2]
On obtient :
[2,6]
Pour obtenir, sous la forme dune liste, une colonne de la matrice A, on utilise
tran(A) qui dsigne la transpose de A et on tape lindice de la colonne
entre des crochets si les indices commencent 0 :
tran([[3,4,5],[1,2,6]])[[1]]
ou
tran(A)[1]
ou
at(tran(A),1)
On obtient :
[4,2]
Ou bien On tape lindice de la colonne entre des doubles crochets ou des
parenthses si on veut que les indices commencent 1 :
tran([[3,4,5],[1,2,6]])[[1]]
ou
tran(A)[[1]]
ou
tran([[3,4,5],[1,2,6]])(1)
ou
tran(A)(1)
On obtient :
[3,1]
ou encore on met deux arguments entre des crochets : un intervalle pour
dsigner toutes les lignes et lindice de la colonne.
On tape :
A[0..1,1]
On obtient :
[4,2]
Pour avoir une liste reprsentant une sous-colonne, on met deux arguments

474

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


entre des crochets : un intervalle pour dsigner les indices des lignes formant
la sous-colonne et lindice de la colonne.
On tape :
A[0..0,1]
On obtient :
[4]
Cela peut tre utiliser pour extraire une colonne, en mettant comme premier
indice, lintervalle dsignant toutes les lignes.
On tape :
A[0..1,1]
On obtient :
[4,2]
Pour extraire une sous-matrice dune matrice, on met deux arguments entre
des crochets : un intervalle pour dsigner les lignes et un intervalle pour
dsigner les colonnes.
On dfinit la matrice A, on tape :
A:=[[3,4,5],[1,2,6]]
On tape :
A[0..1,1..2]
On obtient :
[[4,5],[2,6]]
On tape :
A[0..1,1..1]
On obtient :
[[4],[2]]
Remarque
Si on veut une sous matrice constitue de lignes conscutives compltes,
on peut ommettre le deuxime argument et ne mettre que lintervalle pour
dsigner les lignes entre des crochets.
On tape :
A[1..1]
On obtient :
[[1,2,6]]

6.45.13

Modifier un lment ou une ligne dune matrice contenue dans


une variable : := et =<

Si la matrice a un nom, on peut assigner un lment dune matrice en utilisant


son indice entour de crochets si les indices commencent 0 et entour de doubles
crochets ou des parenthses si les indices commencent 1.
Attention
On ne peut pas utiliser les parenthses avec une matrice formelle car pour Xcas
cette notation sera la dfinition dune fonction !
Si on veut que les indices commencent 1 il faut utiliser les doubles crochets. Par
exemple :
A:=idn(3);
pour j de 1 jusque 3 faire
pour k de 1 jusque 3 faire

6.45. CRATION ET ARITHMTIQUE DES MATRICES

475

A(j,k):=j*k;
fpour;
fpour;
B:=idn(3);
pour j de 1 jusque 3 faire
pour k de 1 jusque 3 faire
B[[j,k]]:=j*k;
fpour;
fpour;
On a alors
A renvoie la fonction (j,k)->j*k
B renvoie la matrice [[1,2,3],[2,4,6],[3,6,9]]
Si on assigne avec :=, une nouvelle copie de la matrice est cre et llment est
modifi, et si on assigne avec =< la matrice est modifie sans faire de copie ce qui
est plus rapide lorque la matrice est de grande taille.
Par exemple :
Si A:=[[4,5],[2,6]], pour modifier A en la matrice [[4,5],[3,6]] on
peut taper :
A[1,0]:=3 ou
A[1,0]=<3 ou
A[[2,1]]:=3 ou
A(2,1):=3 ou
A[[2,1]]=<3
Puis on tape :
A
On obtient la nouvelle valeur de A :
[[4,5],[3,6]]
On peut aussi modifier une ligne, par exemple, si A:=[[4,5],[2,6]] pour modifier en A la matrice [[4,5],[3,7]], on peut taper :
A:=[[4,5],[2,6]] A[1]:=[3,7] ou
A[1]=<[3,7] ou
A[[2]]:=[3,7] ou
A(2):=[3,7] ou
A[[2]]=<[3,7] ou
A(2)=<[3,7]
Puis on tape :
A
On obtient la nouvelle valeur de A :
[[4,5],[3,7]].
Remarque
Il faut utiliser =< avec prcautions car tous les objets pointant sur cette matrice
seront modifis. Dans un programme il faudra utiliser A:=copy(B) lors de linitialisation pour que les modifications faites avec =< sur B ne se fassent pas sur la
copie A ou que les modifications faites avec =< sur la copie A ne se fassent pas sur
B (cf 8.4.15).
Par exemple :
On tape :
B:=[[4,5],[2,6]]

476

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

A=<B ou A:=B
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
On tape :
B[1]=<[3,7] ou A[1]=<[3,7]
A,B
On obtient :
[[4,5],[3,7]],[[4,5],[3,7]]
Mais si on tape :
B:=[[4,5],[2,6]]
A:=copy(B)
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
On tape :
B[1]=<[3,7]
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[3,7]]
Ou si on tape :
B:=[[4,5],[2,6]]
A:=copy(B)
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
On tape :
A[1]=<[3,7]
A,B
On obtient :
[[4,5],[3,7]],[[4,5],[2,6]]

6.45.14

Modifier un lment ou une ligne dune matrice : subsop

subsop permet de modifier un lment ou une ligne dune matrice sans avoir
stocker la matrice dans une variable.
1. Modification dun lment
subsop a deux ou trois arguments.
Attention
En mode Maple les arguments sont permuts.
En mode Xcas, les indices commence 0 :
subsop a deux (resp trois) arguments : une matrice A et une galit
[r,c]=v (resp une matrice A, la liste des indices de la ligne et de la
colonne [r,c], la nouvelle valeur v).
On tape en mode Xcas :
subsop([[4,5],[2,6]],[1,0]=3)
Ou on tape :

6.45. CRATION ET ARITHMTIQUE DES MATRICES

477

subsop([[4,5],[2,6]],[1,0],3)
On obtient :
[[4,5],[3,6]]
En mode Mupad, TI, les indices commencent 1 :
subsop a deux (resp trois) arguments : une matrice A et une galit
[r,c]=v (resp une matrice A, la liste des indices de la ligne et de la
colonne [r,c], la nouvelle valeur v).
On tape en mode Mupad, TI :
subsop([[4,5],[2,6]],[2,1]=3)
Ou on tape :
subsop([[4,5],[2,6]],[2,1],3)
On obtient :
[[4,5],[3,6]]
Remarque
Si la matrice a un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[2,1]:=3 pour modifier A en la matrice [[4,5],[3,6]].
En mode Maple, les arguments sont permuts et les indices commencent
1:
subsop a deux arguments : une galit [r,c]=v et une matrice A.
On tape :
subsop([2,1]=3,[[4,5],[2,6]])
On obtient :
[[4,5],[3,6]]
Remarque
Si la matrice un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[2,1]:=3 pour modifier A en la matrice [[4,5],[3,6]].
2. Modification dune ligne
subsop permet de modifier une ligne dune matrice sans avoir stocker la
matrice dans une variable.
subsop a alors deux arguments :
En mode Xcas, les indices commence 0 :
subsop a deux arguments une matrice et une galit, savoir lindice de
la ligne modifier, suivi du signe = puis la liste des nouvelles valeurs de
cette ligne.
On tape en mode Xcas :
subsop([[4,5],[2,6]],1=[3,3])
On obtient :
[[4,5],[3,3]]
Remarque
Si la matrice un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[1]:=[3,3] pour
modifier A en la matrice [[4,5],[3,3]].
En mode Mupad, TI, les indices commencent 1 :
subsop a deux arguments une matrice et une galit, savoir lindice de
la ligne modifier, suivi du signe = puis la liste des nouvelles valeurs de
cette ligne.

478

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On tape en mode Mupad, TI :
subsop([[4,5],[2,6]],2=[3,3])
On obtient :
[[4,5],[3,3]]
Remarque
Si la matrice un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[2]:=[3,3] pour
modifier A en la matrice [[4,5],[3,3]].
En mode Maple les arguments sont permuts et les indices commencent
1:
subsop a deux arguments une galit, savoir lindice de la ligne modifier, suivi du signe = puis la liste des nouvelles valeurs de cette ligne et
une matrice.
On tape :
subsop(2=[3,3],[[4,5],[2,6]])
On obtient :
[[4,5],[3,3]]
Remarque
Si la matrice un nom par exemple :
A:=[[4,5],[2,6]], on peut taper directement A[2]:=[3,3] pour
modifier A en la matrice [[4,5],[3,3]].

Remarque
On peut aussi supprimer la ligne n dune matrice avec subsop en mettant comme
second argument n=NULL.
On tape en mode Xcas :
subsop([[4,5],[2,6]],1=NULL)
On obtient :
[[4,5]]

6.45.15

Redimensionner une matrice ou un vecteur : REDIM

REDIM a comme argument une matrice A (resp un vecteur) et une liste de 2 entiers
(resp 1 entier).
redim redimensionner cette matrice (resp ce vecteur) selon le deuxime argument
soit on la (resp le)raccourcissant, soit en laugmentant avec des 0.
On tape :
REDIM([[4,1,-2],[1,2,-1],[2,1,0]],[5,4])
On obtient :
[[4,1,-2,0],[1,2,-1,0],[2,1,0,0],[0,0,0,0],[0,0,0,0]]
On tape :
REDIM([[4,1,-2],[1,2,-1],[2,1,0]],[2,1])
On obtient :

6.45. CRATION ET ARITHMTIQUE DES MATRICES

479

On tape :
REDIM([4,1,-2,1,2,-1],10)
On obtient :
[[4],[1]]
On tape :
REDIM([4,1,-2,1,2,-1],3)
On obtient :
[4,1,-2]

6.45.16

Remplacer une partie dune matrice ou dun vecteur : REPLACE

REPLACE a comme argument une matrice A (resp un vecteur) et une liste de 2


indices (resp 1 entier) et la matrice (resp le vecteur) qui doit tre mis en remplacement partir de ces 2 indices.
REPLACE effectue ce remplacement en laguant ventuellement la matrice (resp
le vecteur) si elle (resp il) est sur dimensionne.
On tape :
REPLACE([[1,2,3],[4,5,6]],[0,1],[[5,6],[7,8]])
On obtient :
[[1,5,6],[4,7,8]]
On tape :
REPLACE([[1,2,3],[4,5,6]],[1,2],[[7,8],[9,0]])
On obtient :
[[1,2,3],[4,5,7]]
On tape :
REPLACE([4,1,-2,1,2,-1],2,[10,11])
On obtient :
[4,1,10,11,2,-1]
On tape :
REPLACE([4,1,-2,1,2,-1],1,[10,11,13])
On obtient :
[4,10,11,13,2,-1]

480

6.45.17

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Extraire des lignes ou des colonnes dune matrice (compatibilit Maple) : row col

row (resp col) permet dextraire une ou plusieurs lignes (resp colonnes) dune
matrice.
row (resp col) a 2 arguments : une matrice A, et un entier n ou un intervalle
n1 ..n2 .
row (resp col) renvoie la ligne (resp colonne) dindice n de la matrice A, ou la
squence des lignes (resp colonnes) dindice allant de n1 n2 de la matrice A.
On tape :
row([[1,2,3],[4,5,6],[7,8,9]],1)
On obtient :
[4,5,6]
On tape :
row([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
([1,2,3],[4,5,6])
On tape :
col([[1,2,3],[4,5,6],[7,8,9]],1)
On obtient :
[2,5,8]
On tape :
col([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
([1,4,7],[2,5,8])

6.45.18

Supprimer des lignes ou des colonnes dune matrice :


delrows delcols

delrows (resp delcols) permet de supprimer une ou plusieurs lignes (resp


colonnes) dune matrice.
delrows (resp delcols) a 2 arguments : une matrice A, et un entier n ou un
intervalle n1 ..n2 .
delrows (resp delcols) renvoie la matrice obtenue en supprimant la ligne (resp
colonne) n ou les lignes (resp colonnes) n1 jusqu n2 de la matrice A.
On tape :
delrows([[1,2,3],[4,5,6],[7,8,9]],1..1)
On obtient :

6.45. CRATION ET ARITHMTIQUE DES MATRICES

481

[[1,2,3],[7,8,9]]
On tape :
delrows([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
[[7,8,9]]
On tape :
delcols([[1,2,3],[4,5,6],[7,8,9]],1..1)
On obtient :
[[1,3],[4,6],[7,9]]
On tape :
delcols([[1,2,3],[4,5,6],[7,8,9]],0..1)
On obtient :
[[3],[6],[9]]

6.45.19

Extraire une sous-matrice dune matrice (compatibilit TI) :


subMat

subMat a 5 arguments : une matrice A, et 4 entiers nl1, nc1, nl2, nc2. Ces indices
sont : nl1 est lindice du dbut de ligne ,nc1 est lindice du dbut de colonne, nl2
est lindice de fin de ligne et nc2 est lindice de fin de colonne.
subMat(A,nl1,nc1,nl2,nc2) extrait la sous-matrice de la matrice A de
premier lment A[nl1,nc1] et de dernier lment A[nl2,nc2].
On dfinit la matrice A, on tape :
A:=[[3,4,5],[1,2,6]]
On tape :
subMat(A,0,1,1,2)
ou
subMat(A,[0,1],[1,2])
On obtient :
[[4,5],[2,6]]
On tape :
subMat(A,0,1,1,1)
ou
subMat(A,[0,1],[1,1])

482

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[[4],[2]]
Par dfaut nl1 = 0, nc1 = 0, nl2=nrows-1 et nc2=ncols-1
On tape :
A:=[[3,4,5],[1,2,6]]
subMat(A)
On obtient :
[[3,4,5],[1,2,6]]
On tape :
subMat(A,1)
Ou :
subMat(A,1,0)
Ou :
subMat(A,1,0,1)
Ou :
subMat(A,1,0,1,2)
On obtient :
[[1,2,6]]

6.45.20

Redimensionner une matrice ou un vecteur : redim

redim a comme argument une matrice A (resp un vecteur) et une liste de 2 entiers
(resp 1 entier).
redim redimensionner cette matrice (resp ce vecteur) soit en la (resp le) raccourcissant, soit en laugmentant avec des 0.
On tape :
redim([[4,1,-2],[1,2,-1]],[3,4])
On obtient :
[[4,1,-2,0],[1,2,-1,0],[0,0,0,0]]
On tape :
redim([[4,1,-2],[1,2,-1],[2,1,0]],[2,1])
On obtient :
[[4],[1]]

6.45. CRATION ET ARITHMTIQUE DES MATRICES

483

On tape :
redim([4,1,-2,1,2,-1],8)
On obtient :
[4,1,-2,1,2,-1,0,0]
On tape :
redim([4,1,-2,1,2,-1],3)
On obtient :
[4,1,-2]

6.45.21

Remplacer une partie dune matrice ou dun vecteur : replace

replace a comme argument une matrice A (resp un vecteur) et une liste de 2


indices (resp 1 entier) et la matrice (resp le vecteur) qui doit tre mis en remplacement partir de ces 2 indices.
replace effectue ce remplacement en laguant ventuellement la matrice (resp
le vecteur) si elle (resp il) est sur dimensionne.
On tape :
replace([[1,2,3],[4,5,6]],[1,1],[[5,6],[7,8]])
On obtient :
[[5,6,3],[7,8,6]]
On tape :
replace([[1,2,3],[4,5,6]],[1,2],[[7,8,10],[9,0,11]])
On obtient :
[[1,7,8],[4,9,0]]
On tape :
replace([1,2,3,4],2,[5,6])
On obtient :
[1,5,6,4]
On tape :
replace([1,2,3,4],2,[5,6,7,8])
On obtient :
[1,5,6,7]

484

6.45.22

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Ajouter une ligne une autre : rowAdd

rowAdd a trois arguments : une matrice A et deux entiers n1 et n2.


rowAdd renvoie la matrice obtenue en remplacant dans A la ligne n2 par la somme
des lignes n1 et n2.
On tape :
rowAdd([[1,2],[3,4]],0,1)
On obtient :
[[1,2],[4,6]]

6.45.23

Multiplier une ligne par une expression : mRow et scale


SCALE

mRow a trois arguments : une expression, une matrice A et un entier n.


scale (ou SCALE) a trois arguments : une matrice A, une expression et un entier
n.
Attention lordre des arguments !
mRow et scale (ou SCALE) renvoie la matrice obtenue en remplacant dans A la
ligne n par la multiplication de la ligne n par lexpression.
On tape :
mRow(12,[[1,2],[3,4]],1)
Ou on tape :
scale([[1,2],[3,4]],12,1)
On obtient :
[[1,2],[36,48]]

6.45.24

Ajouter k fois une ligne une autre : mRowAdd et scaleadd


SCALEADD

mRowAdd a quatre arguments : un rel k, une matrice A et deux entiers n1 et n2.


scale (ou SCALE) a quatre arguments : une matrice A, un rel k et deux entiers
n1 et n2.
Attention lordre des arguments !
mRowAdd et scale (ou SCALE) renvoie la matrice obtenue en remplacant dans
A la ligne n2 par la somme de la ligne n2 et de k fois la ligne n1.
On tape :
mRowAdd(1.1,[[5,7],[3,4],[1,2]],1,2)
Ou on tape :
scaleadd([[5,7],[3,4],[1,2]],1.1,1,2)
On obtient :
[[5,7],[3,4],[4.3,6.4]]

6.45. CRATION ET ARITHMTIQUE DES MATRICES

6.45.25

485

changer deux lignes : rowSwap swaprow rowswap

rowSwap a trois arguments : une matrice A et deux entiers n1 et n2.


rowSwap renvoie la matrice obtenue en changeant dans A les lignes n1 et n2.
On tape :
rowSwap([[1,2],[3,4]],0,1)
On obtient :
[[3,4],[1,2]]

6.45.26

changer deux colonnes : colSwap swapcol colswap

rowSwap a trois arguments : une matrice A et deux entiers n1 et n2.


rowSwap renvoie la matrice obtenue en changeant dans A les lignes n1 et n2.
On tape :
colSwap([[1,2],[3,4]],0,1)
On obtient :
[[2,1],[4,3]]

6.45.27

Faire une matrice avec une liste de matrices : blockmatrix

blockmatrix a comme arguments deux entiers n, m et une liste de longueur


n m forme de matrices (de mme dimension p q ou de taille diffrentes : les m
premires matrices ont le mme nombre de lignes et forment un bloc de c colonnes,
les m suivantes ont le mme nombre de lignes et forment un bloc de c colonnes,
etc... ). On forme ainsi n blocs de c colonnes.
blockmatrix renvoie la matrice de c colonnes obtenue en mettant ces n blocs
les uns sous les autres. Si les matrices de largument ont mme dimension p q, la
matrice rsultat a pour dimension p n q m.
On tape :
blockmatrix(2,3,[idn(2),idn(2),idn(2),
idn(2),idn(2),idn(2)])
On obtient :
[[1,0,1,0,1,0],[0,1,0,1,0,1],
[1,0,1,0,1,0],[0,1,0,1,0,1]]
On tape :
blockmatrix(3,2,[idn(2),idn(2),
idn(2),idn(2),idn(2),idn(2)])
On obtient :
[[1,0,1,0],[0,1,0,1],
[1,0,1,0],[0,1,0,1],[1,0,1,0],[0,1,0,1]]

486

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On tape :
blockmatrix(2,2,[idn(2),newMat(2,3),
newMat(3,2),idn(3)])
On obtient :
[[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],
[0,0,0,1,0],[0,0,0,0,1]]
On tape :
blockmatrix(3,2,[idn(1),newMat(1,4),
newMat(2,3),idn(2),newMat(1,2),[[1,1,1]]])
On obtient :
[[1,0,0,0,0],[0,0,0,1,0],[0,0,0,0,1],[0,0,1,1,1]]
On tape :
A:=[[1,1],[1,1]];B:=[[1],[1]]
puis :
blockmatrix(2,3,[2*A,3*A,4*A,5*B,newMat(2,4),6*B])
On obtient :
[[2,2,3,3,4,4],[2,2,3,3,4,4],
[5,0,0,0,0,6],[5,0,0,0,0,6]]

6.45.28

Faire une matrice avec deux matrices : semi_augment

semi_augment concatne deux matrices ayant le mme nombre de colonnes.


On tape :
semi_augment([[3,4],[2,1],[0,1]],[[1,2],[4,5]])
On obtient :
[[3,4],[2,1],[0,1],[1,2],[4,5]]
On tape :
semi_augment([[3,4,2]],[[1,2,4]])
On obtient :
[[3,4,2],[1,2,4]]
Attention Comparer semi_augment et concat.
On tape :
concat([[3,4,2]],[[1,2,4]])
On obtient :

6.45. CRATION ET ARITHMTIQUE DES MATRICES

487

[[3,4,2,1,2,4]]
En effet, quand les deux matrices A et B ont la mme dimension, concat fabrique
une matrice ayant mme nombre de lignes que A et B en accolant A et B.
On tape :
concat([[3,4],[2,1],[0,1]],[[1,2],[4,5]])
On obtient :
[[3,4],[2,1],[0,1],[1,2],[4,5]]
alors que :
concat([[3,4],[2,1]],[[1,2],[4,5]])
On obtient :
[[3,4,1,2],[2,1,4,5]]

6.45.29

Faire une matrice avec deux matrices : augment concat

augment ou concat concatne deux matrices A et B ayant le mme nombre de


lignes (resp de colonnes) cest dire augment ou concat fabrique une matrice
ayant mme nombre de lignes (resp de colonnes) que A et B en accolant A et B.
On tape :
augment([[3,4,5],[2,1,0]],[[1,2],[4,5]])
On obtient :
[[3,4,5,1,2],[2,1,0,4,5]]
On tape :
augment([[3,4],[2,1],[0,1]],[[1,2],[4,5]])
On obtient :
[[3,4],[2,1],[0,1],[1,2],[4,5]]
On tape :
augment([[3,4,2]],[[1,2,4]]
On obtient :
[[3,4,2,1,2,4]]
Quand les deux matrices A et B ont le mme nombre de lignes que de colonnes,
augment fabrique une matrice ayant mme nombre de lignes que A et B en accolant A et B.
On tape :
augment([[3,4],[2,1]],[[1,2],[4,5]])
On obtient :
[[3,4,1,2],[2,1,4,5]]]

488

6.45.30

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Faire une matrice avec une fonction : makemat

makemat a trois arguments :


une fonction de deux variables j et k gale la valeur de aj,k (j reprsente
un numro de ligne et k un numro de colonne et ces indices commencent
= 0),
deux entiers n et p.
makemat renvoie la matrice de coefficients aj,k (j = 0..n 1 et k = 0..p 1) de
dimension n p.
On tape :
makemat((j,k)->j+k,4,3)
ou on tape pour dfinir la fonction h :
h(j,k):=j+k
puis, on tape :
makemat(h,4,3)
On obtient :
[[0,1,2],[1,2,3],[2,3,4],[3,4,5]]
Attention ! la dimension et aux indices qui partent de 0 quelquesoit le mode
choisi.

6.45.31

Dfinir une matrice : matrix

matrix a trois arguments :


deux entiers n et p.
une fonction de deux variables j et k gale la valeur de aj,k (j reprsente
un numro de ligne et k un numro de colonne).
matrix renvoie la matrice de coefficients aj,k (j = 0..n 1 et k = 0..p 1)
de dimension n p si on est en Mode (syntaxe) xcas ou renvoie la matrice de
coefficients aj,k (j = 1..n et k = 1..p) de dimension n p si on est en Mode
(syntaxe) maple, mupad, ti89/92.
On tape :
matrix(4,3,(j,k)->j+k)
ou on dfinit la fonction h par : h(j,k):=j+k et,
on tape :
matrix(4,3,h)
On obtient en Mode (syntaxe) xcas :
[[0,1,2],[1,2,3],[2,3,4],[3,4,5]]
On obtient en Mode (syntaxe) maple, mupad, ti89/92 :
[[2,3,4],[3,4,5],[4,5,6],[5,6,7]]
Attention ! lordre des variables dans la dfinition de aj,k et j and k qui
partent de 0 si on est en Mode (syntaxe) xcas et qui partent de 1 si on est en
Mode (syntaxe) maple, mupad, ti89/92 .

6.45. CRATION ET ARITHMTIQUE DES MATRICES

6.45.32

489

Rajouter une colonne une matrice : border

border a comme argument une matrice A de dimension p q et une liste b de


dimension p (cest dire nrows(A)=size(b)).
border renvoie la matrice obtenue partir de A en lui rajoutant comme dernire
colonne tran(b).
On a :
border(A,b)=tran([op(tran(A)),b])=tran(append(tran(A),b))
On tape :
border([[1,2,4],[3,4,5]],[6,7])
On obtient :
[[1,2,4,6],[3,4,5,7]]
On tape :
border([[1,2,3,4],[4,5,6,8],[7,8,9,10]],[1,3,5])
On obtient :
[[1,2,3,4,1],[4,5,6,8,3],[7,8,9,10,5]]

6.45.33

Compter les lments dune matrice vrifiant une proprit :


count

count a deux ou trois paramtres : une fonction relle f et une matrice relle A
de dimension p*q (resp une liste relle l de longueur n) et ventuellement un paramtre optionnel row ou col.
count applique la fonction aux lments de la matrice (ou liste) et en renvoie la
somme, cest dire,
count renvoie f(A[0,0])+..f(A[p-1,q-1]) (resp f(l[0])+..f(l[n])).
Si il y a row (resp col) comme troisime paramtre count agit sur chaque ligne
(resp colonne) de la matrice et renvoie une liste.
Si f est une fonction boolnne count renvoie le nombre dlments de la matrice
(ou liste) pour lesquels la fonction boolnne est vraie.
On tape :
count((x)->x,[[2,12],[45,3],[7,78]])
On obtient :
147
car on a : 2+12+45+3+7+78=147.
On tape :
count((x)->x,[[2,12],[45,3],[7,78]],row)
On obtient :
[14,48,85]

490

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

car on a : 2+12=14,45+3=48,7+78=85.
On tape :
count((x)->x,[[2,12],[45,3],[7,78]],col)
On obtient :
[54,93]
car on a : 2+45+7=54, 12+3+78=93.
On tape :
count(x->x<10,[[2,12],[45,3],[7,78]])
On obtient :
3

6.45.34

Compter les lments ayant une valeur donne : count_eq

count_eq a deux ou trois paramtres : un rel et une matrice (ou une liste) relle
et ventuellement un paramtre optionnel row ou col.
count_eq renvoie le nombre dlments de la matrice (ou de la liste) qui sont
gaux au premier argument.
Si il y a row (resp col) comme troisime paramtre count_eq agit sur chaque
ligne (resp colonne) de la matrice et renvoie une liste.
On tape :
count_eq(12,[[2,12,45],[3,7,78]])
On obtient :
1
On tape :
count_eq(12,[[2,12,45],[3,7,78]],row)
On obtient :
[1,0]
On tape :
count_eq(12,[[2,12,45],[3,7,78]],col)
On obtient :
[0,1,0]

6.45. CRATION ET ARITHMTIQUE DES MATRICES

6.45.35

491

Compter les lments plus petits quune valeur donne :


count_inf

count_inf a deux ou trois paramtres : une nombre et une matrice (ou liste)
relle et ventuellement un paramtre optionnel row ou col.
count_inf renvoie le nombre dlments de la matrice (ou liste) qui sont strictement infrieurs au premier argument.
Si il y a row (resp col) comme troisime paramtre count_inf agit sur chaque
ligne (resp colonne) de la matrice et renvoie une liste.
On tape :
count_inf(12,[2,12,45,3,7,78])
Ou on tape :
count_inf(12,[[2,12],[45,3],[7,78]])
On obtient :
3
On tape :
count_inf(12,[[2,12],[45,3],[7,78]],row)
On obtient :
[1,1,1]
On tape :
count_inf(12,[[2,12],[45,3],[7,78]],col)
On obtient :
[2,1]

6.45.36

Compter les lments plus grands quune valeur donne :


count_sup

count_sup a deux ou trois paramtres : une nombre et une matrice (ou liste)
relle et ventuellement un paramtre optionnel row ou col.
count_sup renvoie le nombre dlments de la matrice (ou liste) qui sont strictement suprieurs au premier argument.
Si il y a row (resp col) comme troisime paramtre count_sup agit sur chaque
ligne (resp colonne) de la matrice et renvoie une liste.
On tape :
count_sup(12,[[2,12,45],[3,7,78]])
On obtient :
2
On tape :

492

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


count_sup(12,[[2,12,45],[3,7,78]],row)

On obtient :
[1,1]
On tape :
count_sup(12,[[2,12,45],[3,7,78]],col)
On obtient :
0,0,2]

6.45.37

Fonctions utiles pour les colonnes dune matrice : mean ou


moyenne, stddev ou ecart_type, variance, median,
quantile, quartiles, boxwhisker ou
moustache

Voir aussi 6.42 and 7.


Fonctions utiles pour les statistiques dont les donnees sont les colonnes dune
matrice :
mean ou moyenne pour calculer la moyenne numrique de series statistiques qui sont les colonnes dune matrice.
On tape :
mean([[3,4,2],[1,2,6]])
On obtient un vecteur de composantes la moyenne des colonnes :
[2,3,4]
On tape :
mean([[1,0,0],[0,1,0],[0,0,1]])
On obtient
[1/3,1/3,1/3]
stddev ou ecart_type pour calculer lcart type numrique de series
statistiques qui sont les colonnes dune matrice.
On tape :
stddev([[3,4,2],[1,2,6]])
On obtient un vecteur de composantes lcart type des colonnes :
[1,1,2]
variance pour calculer la variance numrique de series statistiques qui
sont les colonnes dune matrice.
On tape :
variance([[3,4,2],[1,2,6]])
On obtient un vecteur de composantes la variance des colonnes :
[1,1,4]
median pour calculer la mdiane de series statistiques qui sont les colonnes
dune matrice.
On tape :
median([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]])
On obtient un vecteur de composantes la mdiane des colonnes :

6.45. CRATION ET ARITHMTIQUE DES MATRICES

493

[2.0,2.0,3.0,3.0,2.0,2.0,3.0]
quantile pour calculer le dcile selon le second argument, de series statistiques qui sont les colonnes dune matrice.
On tape :
quantile([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]],0.25)
On obtient un vecteur de composantes le premier quartile des colonnes :
[1.0,1.0,2.0,2.0,1.0,1.0,1.0]
On tape :
quantile([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1],[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]],0.75)
On obtient un vecteur de composantes le troisime quartile des colonnes :
[4.0,4.0,5.0,5.0,5.0,5.0,5.0]
quartiles pour calculer le minimum, le premier quartile, la mdiane, le
troisime quartile et le maximum de series statistiques qui sont les colonnes
dune matrice.
On tape :

quartiles([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],[1,3,4,2,5,6,0],
[3,4,2,5,6,0,1], [4,2,5,6,0,1,3],
[2,5,6,0,1,3,4]])
On obtient la matrice, de premire ligne le minimum de chaque colonne,
de deuxime ligne le premier quartile de chaque colonne, de troisime ligne
la mdiane de chaque colonne, de quatrime ligne le troisime quartile de
chaque colonne et de dernire ligne le maximum de chaque colonne :

[[0.0,0.0,1.0,0.0,0.0,0.0,0.0],[1.0,1.0,2.0,2.0,1.0,1.0,1.0],
[2.0,2.0,3.0,3.0,2.0,2.0,3.0],[4.0,4.0,5.0,5.0,5.0,5.0,5.0],
[6.0,5.0,6.0,6.0,6.0,6.0,6.0]]
boxwhisker ou moustache pour afficher les boites moustaches de
series statistiques qui sont les colonnes dune matrice.
On tape :
moustache([[6,0,1,3,4,2,5],[0,1,3,4,2,5,6],
[1,3,4,2,5,6,0], [3,4,2,5,6,0,1],
[4,2,5,6,0,1,3],[2,5,6,0,1,3,4]])
On obtient les dessins des boites moustaches des series statistiques qui sont
les colonnes de la matrice mise comme paramtre.

6.45.38

Dimension dune matrice : dim

dim a comme argument une matrice A.


dim renvoie la dimension de la matrice A sous la forme dune liste forme par son
nombre de lignes et par son nombre de colonnes.
On tape :

494

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


dim([[1,2,3],[3,4,5]])

On obtient :
[2,3]

6.45.39

Nombre de lignes : rowdim rowDim nrows

rowdim (ou rowDim ou nrows) a comme argument une matrice A.


rowdim (ou rowDim ou nrows) renvoie le nombre de lignes de la matrice A.
On tape :
rowdim([[1,2,3],[3,4,5]])
ou
nrows([[1,2,3],[3,4,5]])
On obtient :
2

6.45.40

Nombre de colonnes : coldim colDim ncols

coldim (ou colDim ou ncols) a comme argument une matrice A.


coldim (ou colDim ou ncols) renvoie le nombre de colonnes de la matrice A.
On tape :
coldim([[1,2,3],[3,4,5]])
ou
ncols([[1,2,3],[3,4,5]])
On obtient :
3

6.46

Algbre linaire

6.46.1

Transpose dune matrice : tran transpose

tran ou transpose a comme argument une matrice A.


tran ou transpose renvoie la matrice transpose de A.
On tape :
tran([[1,2],[3,4]])
On obtient :
[[1,3],[2,4]]

6.46. ALGBRE LINAIRE

6.46.2

495

Inverse dune matrice : inv inverse /

inv a comme argument une matrice carre A.


inv renvoie la matrice inverse de A.
On tape :
inv([[1,2],[3,4]])
ou
inverse([[1,2],[3,4]])
ou
1/[[1,2],[3,4]])
ou
A:=[[1,2],[3,4]];1/A
On obtient :
[[-2,1],[3/2,1/-2]]

6.46.3

Trace dune matrice : trace

trace a comme argument une matrice A (voir aussi trace dun objet gomtrique 9.21.3).
trace renvoie la trace de A : cest la somme des lments de la diagonale.
On tape :
trace([[1,2],[3,4]])
On obtient :
5

6.46.4

Dterminant dune matrice : det

det a comme argument une matrice A.


det renvoie le dterminant de la matrice A.
On tape :
det([[1,2],[3,4]])
On obtient :
-2
On tape :
det(idn(3))
On obtient :
1

496

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On peut spcifier lalgorithme de calcul du dterminant en ajoutant un argument optionnel


lagrange : lorsque les coefficients de la matrice sont des polynmes ou
des fractions rationnelles, calcule le dterminant par valuation des variables
de ces polynmes ou fractions et interpolation de Lagrange
rational_det : lalgorithme du pivot de Gauss est appliqu sans conversion au format interne pour les fractions, et sans rduction pralable vers des
coefficients sans dnominateurs
bareiss : lalgorithme de Gauss-Bareiss est utilis (rduction sans fraction
et division par le pivot de ltape prcdente).
minor_det : lalgorithme utilis est le dveloppement des mineurs. Ceci
ncessite 2n oprations, mais est parfois plus rapide que les autres algorithmes pour des matrices de taille moyenne (jusqu n = 20 environ)
coefficients polynomiaux.
Par dfaut, lalgorithme utilis est choisi parmi Bareiss et Lagrange, celui donnant
priori en fonction des coefficients le temps de calcul le plus rapide est utilis.
Pour les matrices coefficients entiers, lalgorithme utilis par dfaut est un mix
dune mthode p-adique et dune mthode modulaire. On commence par rsoudre
un systme linaire modulo un premier p pour trouver un grand facteur du dterminant, puis on termine le calcul en compltant par les restes chinois avec quelques
nombres premiers. On arrte lalgorithme de manire probabiliste (en fonction de
la valeur de =proba_epsilon) lorsque le dterminant reconstruit par les restes
chinois reste constant pour un produit de nombres premiers suprieur 1/. Si
 = 0, lalgorithme est dterministe, le test darrt utilise la borne de Hadamard du
dterminant. Le temps de calcul est en O(n4 ln(n)) mais pour des valeurs de n pas
trop grandes il ressemble plutot un O(n3).

6.46.5

Dterminant dune matrice creuse : det_minor

det_minor a comme argument une matrice A.


det_minor renvoie le dterminant de la matrice A calcul laide du dveloppement du dterminant selon la premire ligne en utilisant lalgorithme de Laplace.
On tape :
det_minor([[1,2],[3,4]])
On obtient :
-2
On tape :
det_minor(idn(3))
On obtient :
1

6.46. ALGBRE LINAIRE

6.46.6

497

Rang dune matrice : rank

rank a comme argument une matrice A.


rank renvoie le rang de la matrice A.
On tape :
rank([[1,2],[3,4]])
On obtient :
2
On tape :
rank([[1,2],[2,4]])
On obtient :
1

6.46.7

Matrice adjointe : trn

trn a comme argument une matrice A.


trn renvoie la matrice adjointe (transpose de la conjugue) de A.
On tape :
trn([[i, 1+i],[1, 1-i]])
On obtient aprs simplification :
[[-i,1],[1-i,1+i]]

6.46.8

Matrice quivalente : changebase

changebase a comme argument une matrice A et une matrice de changement de


base P .
changebase renvoie la matrice B telle que B = P 1 AP .
On tape :
changebase([[1,2],[3,4]],[[1,0],[0,1]])
On obtient :
[[1,2],[3,4]]
On tape :
changebase([[1,1],[0,1]],[[1,2],[3,4]])
On obtient :
[[-5,-8],[9/2,7]]
En effet :

.

1 2
3 4


1 
 
 
1 1
1 2
5 8

=
9
7
0 1
3 4
2

498

6.46.9

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Base dun sous espace vectoriel : basis

basis a comme argument la liste des composantes des vecteurs qui engendrent
un sous espace vectoriel de Rn .
basis renvoie une liste constitue des vecteurs dune base de ce sous espace
vectoriel.
On tape :
basis([[1,2,3],[1,1,1],[2,3,4]])
On obtient :
[[1,0,-1], [0,1,2]]

6.46.10

Base de lintersection de deux sous espaces vectoriels : ibasis

ibasis a comme argument deux listes de vecteurs qui engendrent deux sous espaces vectoriels de Rn .
ibasis renvoie une liste constitue de vecteurs formant une base de lintersection
de ces sous espaces vectoriels.
On tape :
ibasis([[1,2]],[[2,4]])
On obtient :
[[1,2]]

6.46.11

Image dune application linaire : image

image a comme argument la matrice dune application linaire f dans la base


canonique.
image renvoie une liste de vecteurs formant une base de limage de f .
On tape :
image([[1,1,2],[2,1,3],[3,1,4]])
On obtient :
[[-1,0,1],[0,-1,-2]]

6.46.12

Noyau dune application linaire : kernel nullspace ker

ker (ou kernel ou nullspace) a comme argument la matrice dune application linaire f dans la base canonique.
ker (ou kernel ou nullspace) renvoie une liste de vecteurs formant une base
du noyau de f .
On tape :
ker([[1,1,2],[2,1,3],[3,1,4]])
On obtient :
[[1,1,-1]]
Le noyau est donc engendr par le vecteur [1,1,-1].

6.46. ALGBRE LINAIRE

6.46.13

499

Noyau dune application linaire : Nullspace

Attention Nullspace nest utilisable quen mode Maple (bouton donnant la


ligne dtat puis Prog style et choisir Maple puis OK).
Nullspace est la forme inerte de nullspace.
Nullspace a comme argument la matrice dune application linaire f dans la
base canonique.
Nullspace) suivi de mod prenvoie une liste de vecteurs formant une base du
noyau de f calculs dans Z/pZ[X].
On tape :
Nullspace([[1,1,2],[2,1,3],[3,1,4]])
On obtient :
nullspace([[1,1,2],[2,1,3],[3,1,4]])
On tape (en mode Maple) :
Nullspace([[1,2],[3,1]]) mod 5
On obtient :
[2,-1]
En mode Xcas la commande quivalent est :
nullspace([[1,2],[3,1]] % 5)
On obtient :
[2% 5,-1]

6.46.14

Espace engendr par les colonnes dune matrice : colspace

colspace a comme argument la matrice A dune application linaire f dans la


base canonique.
colspace renvoie une matrice dont les colonnes sont des vecteurs formant une
base de lespace engendr par les colonnes de A.
colspace peut avoir un deuxime argument, le nom dune variable qui donnera
la dimension de lespace engendr par les colonnes de A.
On tape :
colspace([[1,1,2],[2,1,3],[3,1,4]])
On obtient :
[[-1,0],[0,-1],[1,-2]]
On tape :
colspace([[1,1,2],[2,1,3],[3,1,4]],dimension)
On obtient :
[[-1,0],[0,-1],[1,-2]]
Puis, on tape :
dimension
On obtient :
2

500

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.46.15

Espace engendr par les lignes dune matrice : rowspace

rowspace a comme argument la matrice A dune application linaire f dans la


base canonique.
rowspace renvoie une liste de vecteurs formant une base de lespace engendr
par les lignes de A.
rowspace peut avoir un deuxime argument le nom dune variable qui donnera
la dimension de lespace engendr par les lignes de A.
On tape :
rowspace([[1,1,2],[2,1,3],[3,1,4]])
On obtient :
[[-1,0,-1],[0,-1,-1]]
On tape :
rowspace([[1,1,2],[2,1,3],[3,1,4]],dimension)
On obtient :
[[-1,0,-1],[0,-1,-1]]
Puis, on tape :
dimension
On obtient :
2

6.47

Programmation linaire

6.47.1

La commande Xcas : simplex_reduce

Cas le plus simple


La fonction simplex_reduce effectue la rduction par lalgorithme du simplexe pour trouver :
max(c.x)

avec

A.x b, x 0, b 0

o c, x sont des vecteurs de Rn , b 0 est un vecteur de Rp et A est une matrice de


p lignes et de n colonnes.
simplex_reduce a comme argument A,b,c et renvoie max(c.x), la solution augmente de x et la matrice rduite.
Exemple
Chercher

(X, Y ) 0

3X + 2Y 3
max(X + 2Y ) lorsque

X +Y 4
On tape :

6.47. PROGRAMMATION LINAIRE

501

simplex_reduce([[-3,2],[1,1]],[3,4],[1,2])
On obtient :
7,[1,3,0,0],[[0,1,1/5,3/5,3],[1,0,(-1)/5,2/5,1],
[0,0,1/5,8/5,7]]
Ce qui veut dire que le maximum de X+2Y sous ces conditions est 7, il est obtenu
pour X=1,Y=3 car [1,3,0,0] est la solution augmente et la matrice rduite
est :
[[0,1,1/5,3/5,3],[1,0,(-1)/5,2/5,1], [0,0,1/5,8/5,7]].
Un cas plus compliqu qui se ramne au cas simple
simplex_reduce oblige rcrire les contraintes impliquant une seule variable
pour quelles soient sous la forme xk 0, puis liminer les variables sans
contraintes puis ajouter des variables afin davoir comme contraintes : toutes
les composantes des lments du simplexe sont positives. Par exemple, si on part
du problme :

x 1

y 2

x + 3y z = 2
min(2x + y z + 4) lorsque

2x y + z 8

x + y 5
on pose x = 1 X, y = Y + 2, z = 5 X + 3Y le problme devient chercher le
minimum de (2X + Y (5 X + 3Y ) + 8) lorsque

X 0

Y 0
2(1

X)

(Y
+
2)
+
5

X
+
3Y
8

(1 X) + (Y + 2) 5
donc chercher le minimum de :

X
Y
(X 2Y + 3) lorsque
3X
+
2Y

X +Y

0
0
3
4

ce qui revient chercher le maximum de (X 2Y + 3) = X + 2Y 3 sous


les mmes conditions, on est donc ramen au problme prcdent (le maximum est
donc de 7-3=4).
Cas gnral
Tous les cas ne se ramnent pas directement au cas simple ci-dessus. On verra
plus loin comment les traiter, cela ncessitera dutiliser une autre forme dappel de
simplex_reduce, que lon peut dailleurs aussi utiliser dans le cas simple de la
manire suivante : si A a p lignes et n colonnes et si on dfinit :
B:=augment(A,idn(p)); C:=border(B,b);
d:=append(-c,0$(p+1)); D:=augment(C,[d]);
simplex_reduce accepte aussi en argument D.
Pour lexemple prcdent, on tape :

502

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


A:=[[-3,2],[1,1]];B:=augment(A,idn(2));
C:=border(B,[3,4]); D:=augment(C,[[-1,-2,0,0,0]])

On a C=[[-3,2,1,0,3],[1,1,0,1,4]]
et D=[[-3,2,1,0,3],[1,1,0,1,4],[-1,-2,0,0,0]]
On tape :
simplex_reduce(D)
On obtient le mme rsultat que prcdemment.

6.47.2

criture matricielle et algorithme du simplexe

Un simplexe est une portion de Rn dlimite par des hyperplans.


Lalgorithme du simplexe sert maximiser une fonction linaire sous des contraintes
dgalit ou dingalit linaire. Le principe de lalgorithme consiste trouver un
sommet du simplexe dfini par les contraintes, puis slectionner une arte et la
suivre jusquau sommet suivant, la slection se faisant de sorte ne jamais diminuer la valeur de la fonction linaire. On effectue donc les tapes suivantes
rcrire les contraintes impliquant une seule variable sous la forme xk 0,
liminer si possible par pivot de Gauss les variables sans contraintes (ou
ajouter des variables). la fin de cette tape, on doit avoir pour contraintes
que toutes les composantes des lments du simplexe sont positives.
transformer si ncessaire les contraintes dingalit restante en galit (par
ajout de variables dcart) avec un second membre positif,
construire un sommet sil en existe (ce qui dans les cas non vidents se fait
en optimisant une fonction artificielle),
passer de sommet sommet.
Un sommet va tre caractris dans la suite par ses composantes nulles et ses
composantes non nulles. La reprsentation matricielle associe un sommet des
contraintes dgalit fait apparaitre une sous-matrice identit dans les colonnes
correspondant aux composantes non nulles du sommet. Par exemple, si on part
du problme, chercher :

x 1

y 2
max(2x + y z + 4) lorsque
x
+
3y

z = 2

2x y + z 8
on pose x = 1 X, y = Y + 2, donc on cherche :

Y
max(2X + Y z + 8) lorsque
1

X
+
3(Y
+
2)

2(1 X) (Y + 2) + z

0
0
2
8

puis on limine z par la contrainte dgalit z = 5 X + 3Y et on cherche :

X 0

Y 0
max(2X +Y (5X +3Y )+8) lorsque

2X Y + 5 X + 3Y 8

6.47. PROGRAMMATION LINAIRE

503

cela revient donc chercher :



max(X 2Y + 3) lorsque

(X, Y ) 0
3X + 2Y 3

Il faut ici ajouter une variable dcart t 0 pour transformer la dernire ingalit
en galit :
on pose t = 3 (3X + 2Y ) et on a alors
t 0 et 3X + 2Y + t = 3 est quivalent 3X + 2Y 3, et cela donne un
sommet de dpart vident. La matrice correspondant ces conditions est alors la
ligne
(3, 2, 1, 3)
le sommet de dpart associ est (X, Y, t) = (0, 0, 3) la sous-matrice identit utilise
la 3me colonne (t est le coefficient non nul). On pourrait passer le coefficient non
nul en 2me colonne (sommet (X, Y, t) = (0, 3/2, 0)) en rcrivant lgalit sous
la forme
(3/2, 1, 1/2, 3/2)
mais on ne pourrait passer le coefficient non nul en 1re colonne (il ny a en effet
que 2 sommets ce simplexe).
Avec Xcas, on tape :
simplex_reduce([[-3,2]],[3],[-1,-2])
On obtient :
(0,[0,0,3],[[-3,2,1,3],[1,2,0,0]])
En gnral, le passage dun sommet un autre sommet consiste alors effectuer une opration de rduction de Gauss qui fait sortir une colonne et entrer
une autre colonne dans les composantes non nulles du sommet, ce qui revient
dplacer la sous-matrice identit. On doit prendre garde effectuer lopration de
rduction de Gauss en conservant la positivit du membre de droite des contraintes
de lgalit, et ce sans diminuer la valeur de la fonction optimiser. Pour pouvoir
raliser cette dernire condition, on augmente la matrice des contraintes dgalit
par une ligne forme des opposs des coefficients de la fonction maximiser, sauf
en dernire colonne (on y met le coefficient constant de la fonction maximiser).
Dans lexemple ce serait


3 2 1 3
1 2 0 3
On cre (si ncessaire) des zros dans cette dernire ligne dans les colonnes correspondant la sous-matrice identit (donc aux composantes non nulles du sommet),
de sorte que le coefficient constant de la ligne (aprs cette rduction) reprsente la
valeur de la fonction optimiser en ce sommet. Plus gnrallement pour un point
du simplexe, au cours de la rduction la somme de la fonction maximiser et du
produit scalaire des coordonns du point avec cette dernire ligne (priv du dernier
coefficient) vaut le dernier coefficient. On aura donc un sommet ralisant le maximum si tous les coefficients de la ligne sont positifs (sauf le dernier). Cest le cas
ici, le maximum est 3, atteint pour X = Y = 0 (donc x = 1, y = 2 et z = 5).
Linstruction simplex_reduce de Xcas applique lalgorithme du simplexe
dans deux situations distinctes : soit le problme est pos sous forme canonique
et on lui donne 3 arguments (cf. infra), soit on lui donne un seul argument qui doit
tre une matrice associe un sommet au sens de ce paragraphe.

504

6.47.3

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Premier cas : 3 arguments

Lorsquon lui passe 3 arguments A, b, c, la fonction simplex_reduce calcule le maximum (sil existe) de c.x pour c vecteur fix de Rn et x variable, sous
les conditions x 0 et A.x b (avec A et b 0 fixs). Ce problme est appel
forme canonique.
Xcas ajoute m variables dcart y1 , ..., ym (m=nombre de lignes de A) pour
transformer les ingalits en galits, puis choisit comme sommet de dpart vident
toutes les variables de dpart nulles et les variables dcart valant b. Il construit
donc la matrice


A I bt
c 0 0
Ensuite il se dplace en suivant des artes du simplexe dfini par les conditions
Ax + y = b, x, y 0 en augmentant le plus possible la valeur de c.x. Cela se
fait en cherchant dans la dernire ligne un coefficient ngatif strict (soit le plus
ngatif possible, soit le premier ngatif), qui reprsentera une colonne entrant dans
la sous-matrice identit (en rendant son coefficient non nul dans les composantes du
sommet, on augmentera au sens large la valeur de c.x). Sil ny a pas de coefficient
ngatif, on arrte lalgorithme (on verra que le maximum est le coefficient en bas
droite de la matrice). Sil existe, on slectionne cette colonne comme colonne du
pivot (colonne entrante dans la matrice identit), il nous reste dterminer la ligne
du pivot utilis (cest la colonne sortant de la matrice identit) :
dune part, le pivot utilis doit tre positif, en effet on va diviser la ligne du
pivot par la valeur du pivot, et le coefficient constant de cette ligne (qui sera
la valeur dune coordonne dun sommet) doit rester positif.
dautre part les autres coefficients du sommet doivent aussi rester positifs.
Pour raliser cela, on calcule de la ligne 1 m les rapport des coefficients
de cette ligne dernire colonne avec le coefficient de cette ligne, colonne
du pivot, en cherchant la ligne qui donne un rapport positif le plus petit
possible. Sil nexiste pas de telle ligne, le maximum est alors + (car on
peut indfiniment augmenter la valeur de la composante ayant ce numro
de colonne en restant dans le domaine). Si une telle ligne existe, on se sert
du coefficient de cette ligne/colonne comme dun pivot, et on cre un 1
cette ligne et des 0 ailleurs dans cette colonne par combinaisons linaires de
lignes.
Au cours de lalgorithme, les m premires lignes de la matrice contiennent toujours une sous-matrice identit m, m (puisquon fait du pivot de Gauss), et les coefficients de la dernire ligne qui correspondent cette sous-matrice identit sont
nuls (pour la mme raison). On a donc une matrice de la forme


B 1 A
B 1
B 1 b
c + cB B 1 A cB B 1 cB B 1 b
o B est une sous-matrice extraite de A, I (correspondant des colonnes de la dernire ligne ayant pour coefficients 0) et cB est la liste des coefficients de c correspondant aux mmes colonnes de A, I que B. Pour viter de boucler indfiniment si
le coefficient en bas droite est constant, on peut garder en mmoire dans une table
les colonnes correspondant lidentit et se refuser revenir une configuration
prcdente.

6.47. PROGRAMMATION LINAIRE

505

Si on ne quitte pas lalgorithme (maximum=+), la fin, la dernire ligne


ne contient que des coefficients positifs ou nuls. On a de plus lidentit fonction
optimiser + produit scalaire entre la dernire ligne et (x, y) est gal au coefficient
en bas droite (=cB B 1 b). Comme les coefficients de la dernire ligne sont positifs
ou nuls, de mme que les composantes de x et y, on en dduit que la fonction
optimiser est infrieure au coefficient en bas droite. Dautre part, cette valeur est
atteinte au sommet correspondant.
Le rsultat renvoy par simplex_reduce est une squence compose de la
valeur du maximum, dune solution augmente (les premires composantes sont
celles de la solution, les composantes suivantes celles des variables ajoutes artificiellement pour transformer Ax b en une galit) et de la matrice de lalgorithme
du simplexe aprs rduction.
Exemple : si on cherche le maximum de 3x1 + x2 + 3x3 sous les conditions
x1 , x2 , x3 0 et

2x1 + x2 + x3 2
x1 + 2x2 + 3x3 5

2x1 + 2x2 + x3 6
on prend A:=[[2,1,1],[1,2,3],[2,2,1]], b:=[2,5,6] et c:=[3,1,3],
donc on tape :
simplex_reduce([[2,1,1],[1,2,3],[2,2,1]],[2,5,6],[3,1,3])
et on obtient 27/5 comme maximum, [1/5,0,8/5,0,0,4] comme solution
augmente (donc [1/5,0,8/5] est solution), ainsi que la matrice rduite.

6.47.4

Deuxime cas : un argument

On peut aussi passer un seul argument simplex_reduce, cet argument


tant du type des matrices construites prcdemment, cest--dire que si on enlve
la dernire ligne et la dernire colonne, on doit pouvoir extraire une sous-matrice
identit de taille maximale.
On va voir comment on peut utiliser cette forme dappel de simplex_reduce
pour rsoudre des problmes de programmation linaire plus gnraux que ceux de
la section prcdente.

6.47.5

Passage de la forme standard la forme canonique

La forme standard dun problme doptimisation linaire est analogue la


forme canonique, mais en remplacant Ax b par Ax = b avec b 0 et o
on cherche x 0 (on peut sy ramener si ncessaire en changeant le signe dune
ligne).
Le problme pour appliquer lalgorithme prcdent est quon ne peut pas ajouter de variables dcarts et donc quon na pas de valeur x vidente dans le domaine
de maximisation (dit autrement on na pas de sous-matrice identit dans la formulation matricielle du problme et il ny a pas dopration de lignes vidente qui
permette de le faire).
On va se ramener des problmes sous forme canonique par la mthode dite
en 2 phases. Soit m le nombre de lignes de A (nombre de conditions dans Ax = b).

506

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

P
On ajoute des variables artificielles y1 , ..., ym et on maximise yi sous condition Ax = b, x 0, y 0 en partant de la valeur initiale 0 pour les variables non
artificielles et b pour y (on appelle donc simplex_reduce avec un argument
matrice obtenue en augmentant A par lidentit, b inchang et un c artificiel form
de 0 au dbut et de 1 en dessous de lidentit (que simplex_reduce va commencer par annuler)). Si le maximum existe et est 0, on obtiendra une sous-matrice
identit dans les colonnes correspondants x, et on pourra liminer les variables
artificielles (dont la valeur sera 0 pour atteindre loptimum). Il restera appliquer
nouveau lalgorithme du simplexe mais avec le c original (comme les coefficients
de c correspondant lidentit nont pas de raison dtre nuls, on doit commencer
par les rendre nuls, ce que simplex_reduce fait si on permute les colonnes
pour placer la sous-matrice identit droite).
Exemple : on cherche le minimum de 2x + 3y z + t avec les x, y, z, t 0
et :

x y + t = 1
yz+t = 3
Ceci revient calculer loppos du maximum de (2x+3yz+t). On ajoute donc
deux variables artificielles y1 et y2 , on tape directement la matrice de lalgorithme
simplex_reduce([[-1,-1,0,1,1,0,1],
[0,1,-1,1,0,1,3],
[0,0,0,0,1,1,0]])
On obtient comme optimum 0, avec 0
cielles, et la matrice

1/2 0 1/2
1/2 1 1/2
0
0
0

comme valeurs pour les variables artifi


1 1/2 1/2 2
0 1/2 1/2 1
0
1
1 0

Ceci signifie aussi quune valeur initiale dans le domaine est (0, 1, 0, 2). Il nous
reste optimiser le problme de dpart en remplacant les lignes de Ax = b par
les 2 premires lignes de la matrice rponse ci-dessus dont on enlve les variables
artificielles et en ajoutant la ligne de la fonction optimiser. On prend donc la
matrice
simplex_reduce([[-1/2,0,-1/2,1,2],
[1/2,1,-1/2,0,1],[2,3,-1,1,0]])
On obtient comme maximum -5, donc le minimum de loppos est 5, obtenu pour
(0, 1, 0, 2) soit aprs replacement des colonnes t = 2 et y = 1, les autres nuls.
Pour plus de dtails, chercher sur google simplex algorithm ou dans une
bibliothque Ciarlet Introduction lanalyse matricielle et loptimisation.

6.48

Les diffrentes norme dune matrice

Voir aussi 6.41.1 pour les diffrentes norme dun vecteur.

6.48. LES DIFFRENTES NORME DUNE MATRICE

6.48.1

507

Norme de Frobenius dune matrice : frobenius_norm

frobenius_norm a comme argument une matrice A (voir aussi 6.41.1).


frobenius_norm
renvoie la norme de Frobenius de A i.e.
sX
a2j,k si largument est A = aj,k .
j,k

On tape :
B:=[[1,2,3],[3,-9,6],[4,5,6]]
puis,
frobenius_norm(B)
On obtient :
sqrt(217)

En effet : 1 + 4 + 9 + 9 + 81 + 36 + 16 + 25 + 36 = 217 ' 14.7309198627

6.48.2

Norme dune matrice avec la norme des lignes : rownorm


rowNorm

rownorm (ou rowNorm) a comme argument


P une matrice A.
rownorm (ou rowNorm) renvoie maxk ( j |aj,k |) si largument est A = aj,k .
On tape :
rownorm([[1,2],[3,-4]])
ou
rowNorm([[1,2],[3,-4]])
On obtient :
7
En effet : max(1 + 2, 3 + 4) = 7

6.48.3

Norme dune matrice avec la norme des colonnes : colnorm


colNorm

colnorm (ou colNorm) a comme argument


P une matrice A.
colnorm (ou colNorm) renvoie maxj ( k (|aj,k |)) si largument est A = aj,k .
On tape :
colnorm([[1,2],[3,-4]])
ou
colNorm([[1,2],[3,-4]])
On obtient :
6
En effet : max(1 + 3, 2 + 4) = 6

508

6.48.4

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

La triple norme dune matrice : matrix_norm et l1norm,


l2norm ou norm ou specnorm, linfnorm

matrix_norm a deux arguments : une matrice A et 1 ou 2 ou inf et par dfaut


1.
matrix_norm renvoie la triple norme subordonne l1 (resp l2 ou l ) si il ny
a pas de second argument ou si le second argument est 1 (resp 2 ou inf).
matrix_norm(A) ou matrix_norm(A,1) cest aussi l1norm(A) ou colnorm(A),
matrix_norm(A,2) cest aussi l2norm(A) ou SPECNORM(A) ou max(SVL(A)),
matrix_norm(A,inf) cest aussi linfnorm(A) ou rownorm(A).
Pour les diffrentes normes de vecteurs (voir aussi 6.41.1, 6.41.1 et 6.41.1).
Pour plus de dtails sur la triple norme voir le Rappel situ aprs les exemples.
On tape :
B:=[[1,2,3],[3,-9,6],[4,5,6]]
Puis
matrix_norm(B)
ou
matrix_norm(B,1)
ou
l1norm(B)
ou
colnorm(B)
On obtient :
16
En effet max(1 + 3 + 4, 2 + 9 + 5, 3 + 6 + 6) = 16
On tape :
matrix_norm(B,2)
ou
l2norm(B)
ou
SPECNORM(B)
ou
max(SVL(B))
On obtient :
11.2449175989

6.48. LES DIFFRENTES NORME DUNE MATRICE

509

En effet max(SVL(B)) renvoie la plus grande racine carre des valeurs propres
de trn(B)*B.
sqrt(proot(pcar(trn(B)*B))) ou sqrt(EIGENVAL(trn(B)*B)) renvoie :
[9.48552308331,0.759394515579,11.2449175989]
On tape :
matrix_norm(B,inf)
ou
linfnorm(B)
ou
rownorm(B)
On obtient :
18
En effet max(1 + 2 + 3, 3 + 9 + 6, 4 + 5 + 6) = 18
Rappel
En mathmatiques, et plus particulirement en analyse fonctionnelle, une norme
doprateur ou norme subordonne est une norme dfinie sur lespace des oprateurs borns entre deux espaces vectoriels norms. Entre deux tels espaces, les
oprateurs borns ne sont autres que les applications linaires continues.
On va considrer ici que les applications linaires sur des espaces vectoriels de dimension finie.
Thorme
Soient E et F 2 espaces vectoriels norms (de norme k kE et k kF ) de dimension
finie et f une application linaire de E dans F .
Alors il existe une constante relle K tel que pour tout x E on ait :
kf (x)kF KkxkE
f est donc lipschitzienne sur E et continue de E dans F .
Dfinition de la triple norme
Daprs ce qui prcde, on a :
pour tout x E si kxkE 1 alors on a kf (x)kF K.
Donc lensemble {kf (x)kF pourkxkE 1} est une partie non vide et majore
de R. Cet ensemble admet donc une borne suprieure que lon appelle la triple
norme.
Ainsi
|||f ||| = sup kf (x)kF
kxkE 1

Attention La valeur de |||f ||| dpend des normes k kE et k kF utilises.


la triple norme est donc une norme subordonne aux normes de E et F .
Dans le cas o E = F , on choisit usuellement k kE = k kF (mme si ce nest
pas obligatoire).
Pour les normes usuelles, on dispose de formules pratiques : prenons E = Rn et
f L(E). Notons x = (x1 , ..., xn ) un vecteur quelconque de Rn et A = (ajk ) la
matrice de f dans la base canonique. On a alors :

510

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Si kxkE = max0jn1 |xj | (cest la norme l ), alors la norme de f vaut :
X
max
|ajk |
0jn1

0kn1

Cest ce quiP
est dfini dans Xcas par rownorm(A)
Si kxkE = 1in |xi | (cest la norme l1 ), alors la norme de f vaut :
max

0kn1

|ajk |

0jn1

Cest ce qui q
est not dans Xcas : colnorm(A)
P
2
Si kxkE =
0jn1 xj (cest la norme l2 ou euclidienne, associe au
produit scalaire canonique), alors la norme triple de f est la racine carre de
la plus grande valeur propre de f f , o f dsigne ladjoint de f .
La norme triple de f est donc sa plus grande valeur singulire. Ceci se gnralise en remplaant Rn par nimporte quel espace de Hilbert.
Cest ce qui est not dans Xcas : max(SVL(A)) : cest la plus grande valeur singulire de A i.e la plus grande valeur de la racine carre des valeurs
propres de trn(A)*A.
Pour tout endomorphisme symtrique g (en particulier pour g = f f ), la
norme de g est gale son rayon spectral, qui est la plus grande des valeurs
absolues de ses valeurs propres.
Dmonstration Soient E = Rn et F = Rp munis de leur base canonique
Soit e1 ..en est la base canonique de E
Soit aj,k la matrice associe f dans les bases canoniques de E et F .
Montrons que pour la norme l1norm, la triple norme de A nomme ici matrix_norm(A,1)
cest colnorm.
P
Soit x = k (xk ek )
On a donc :
P
P
l1norm(f (x)) =l1norm(
k |xk |l1norm(f (ek )) P
k xk f (ek ))
P
l1norm(f (x)) k |xk |maxk (l1norm(f (ek ))) =l1norm(x)maxk ( j |aj,k |)
donc
matrix_norm(A,1)<=colnorm(A)
Montrons que ce maximum est atteint.
Soit k0P
tel que :
P
maxk ( j |aj,k |) = j |aj,k0 | =colnorm(A)
P
On a alors l1norm(ek0 ) = 1 et l1norm(f (ek0 )) = j |aj,k0 |
donc matrix_norm(A,1)=colnorm(A).
Montrons que pour la norme du maximum la triple norme de A nomme ici
matrix_norm(A,inf)
cest rownorm.
P
Soit x = k xk ek avec maxk (|xk |) 1
On a :
P
maxnorm(f (x))=maxnorm(P k xk f (ek )) =
P
maxnorm(f (x)) = maxj (| k xk ajk|) maxj ( k |xk | |aj,k |) puisque
maxk |xk ) 1
P
maxnorm(f (x)) maxj ( k |aj,k |) =colrow(A)
Montrons que ce maximum
est atteint.
P
P
Soit j0 tel que maxj ( k |aj,k |) = k |aj0 , k| =rownorm(A).

6.48. LES DIFFRENTES NORME DUNE MATRICE

511

P
Soit xO = k sign(aj0 ,k ) ek alors maxnorm(x
P 0 ) = 1 et
maxnorm(f
(x
))
=
max
(f
(x
))
=
max
(|
0
j
0
j
k sign(aj0 ,k ) aj,k |) =
P
P
max( k |aj0 ,k |, maxj!=j0 (| k sign(aj0 ,k ) aj,k |))
siP
j! = j0 on a :
P
P
| k sign(aj0 ,k ) aj,k )| k |aj,k | k |aj0 ,k |
Donc
P
maxnorm(f (x0 )) = k |aj0 ,k | =rownorm(A)
Donc matrix_norm(A,inf)=rownorm(A).
Montrons que pour la norme l2norm, la triple norme de la matrice A nomme
ici matrix_norm(A,2) cest max(SVL(A)) cest dire la plus grande racine
carre desP
valeurs propres de trn(A)*A.
Soit x = k (xk ek )
On a :
l2norm(x)=sqrt(scalar_product(x,x))
qP
2
0n note < x, x >=
k xk =scalar_product(x,x)
l2norm(f(x))=sqrt(scalar_product(A*x,A*x))
On a : < Ax, Ax >=< x, (A)t Ax > donc
l2norm(f(x))=sqrt(scalar_product(x,trn(A)*A*x))
La matrice M = trn(A) A est symtrique donc diagonalisable et ses valeurs
propres k sont relles.
Il existe une matrice B diagonale et P une matrice de passage orthogonale (i.e.
inv(P)=trn(P)) tels que :
B = tran(P ) M P i.e. M = trn(A) A = P B trn(P )
On a de plus :
M vk = k vk et
< Avk , Avk >=< vk , M vk >=< vk , k vk >= k < vk , vk >k
Comme < Avk , Avk > 0 on en dduit que les k sont positifs.
Donc l2norm(f(x))=sqrt(scalar_product(trn(P)*x,B*trn(P)*x))
Si y = trn(P ) x = (y0 ...yn1 ) on a :
< y, y >=<
P x, P trn(P )x >=< x, xP>
B y = k k yk et < y, B y >= k k yk2
Donc :
qP
2
l2norm(f(x))=
k k yk
Or puisque k > 0 on a : P
P
2
2
k k yk maxk (k ) k yk et
k existe
et
qP
qP
2 =< y, y >=< x, x >=
2
y
k k
k xk
Donc :
qP

2
l2norm(f(x)) maxk ( k )
k xk
Montrons que ce maximum est atteint.
Soit m = maxk (k ) et vm le vecteur propre associ.
On a alors :
l2norm(f(vm))=
sqrt(scalar_product(A
*vm,A*vm))

l2norm(f(vm))= m < vm , vm > = m l2norm(vm). Donc puisque

m est la plus grande racine carre des valeurs propres de trn(A)*A, on a :

512

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

m =max(SVL(A)).
Donc : matrix_norm(A,2)=max(SVL(A))

6.48.5

Norme : COND cond

COND ou cond a a deux arguments : une matrice A inversible et 1 ou 2 ou inf et


par dfaut 1.
COND renvoie le nombre de condition de cette matrice A cest dire :
|||A|| |||A1 ||| o ||| ||| dsigne la norme triple dune matrice inversible qui est subordonne l1 (resp l2 ou l ) si il ny a pas de second argument ou si le second
argument est 1 (resp 2 ou inf) On a donc :
COND(A) ou cond(A) ou cond(A,1) renvoie le nombre de condition de A
pour la norme l1 ,
COND(A,2) ou cond(A,2) renvoie le nombre de condition de A pour la norme
l2 .
COND(A,inf) ou cond(A,inf) renvoie le nombre de condition de A pour la
norme l .
La norme triple de la matrice A subordonne l1 est colnorm qui est :
max(sum(abs(A[j,k]),j=0..size(A)-1)$(k=0..size(A)-1))
i.e. le maximum des sommes des valeurs absolues des lments situs sur les
colonnes de la matrice.
COND(A) ou cond(A) ou cond(A,1) renvoie donc :
colnorm(A)*colnorm(inv(A)).
La norme triple de la matrice A subordonne l2 est max(SVL(A)) :
cest la plus grande valeur singulire de A i.e la plus grande valeur de la
racine carre des valeurs propres de A*trn(A).
COND(A,2) ou cond(A,2) renvoie donc :
max(SVL(A))*max(SVL(inv(A)))
La norme triple de la matrice A subordonne l est rownorm qui est :
max(sum(abs(A[j,k]),k=0..size(A)-1)$(j=0..size(A)-1))
i.e. le maximum des sommes des valeurs absolues des lments situs sur les
lignes de la matrice.
COND(A,inf) ou cond(A,inf) renvoie donc :
rownorm(A)*rownorm(inv(A)).
On tape :
COND([[1,2,3],[3,-9,6],[4,5,6]])
On obtient :
27.8518518519
En effet, si B:=[[1,2,3],[3,-9,6],[4,5,6]] on tape :
colnorm(B),colnorm(inv(B)),colnorm(B)*colnorm(inv(B))
On obtient :
16,47/27,752/27 et 752/27 ' 27.8518518519
On tape :
COND([[1,2,3],[3,-9,6],[4,5,6]],2)

6.49. RDUCTION DES MATRICES

513

On obtient :
14.807741389
En effet, si B:=[[1,2,3],[3,-9,6],[4,5,6]] on tape :
max(SVL(B)),max(SVL(inv(B))),max(SVL(B))*max(SVL(inv(B)))
On obtient :
11.2449175989,1.31683858585,14.807741389
On tape :
COND([[1,2,3],[3,-9,6],[4,5,6]],inf)
On obtient :
28
En effet, si B:=[[1,2,3],[3,-9,6],[4,5,6]] on tape :
rownorm(B),rownorm(inv(B)),rownorm(B)*rownorm(inv(B))
On obtient :
18,14/9,28

6.49

Rduction des matrices

6.49.1

Valeurs propres : eigenvals eigenvalues

eigenvals ou eigenvalues) a comme argument une matrice A dordre n.


eigenvals ou eigenvalues) renvoie une suite constitu par les n valeurs
propres de A.
Remarque : Si A est symbolique, on peut avoir en rponse des valeurs propres
numriques car il faut que Xcas puisse factoriser le polynme caractristique formellement !
On tape :
eigenvals([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
(2,2,2)
On tape :
eigenvals([[4,1,0],[1,2,-1],[2,1,0]])
On obtient :
(0.324869129433,4.21431974338,1.46081112719)

514

6.49.2

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Matrice de Jordan : egvl eigVl

egvl (ou eigVl) a comme argument une matrice A dordre n.


egvl (ou eigVl) renvoie la matrice de Jordan associe A.
Remarque : Si A est symbolique, on peut avoir en rponse des valeurs propres
numriques car il faut que Xcas puisse factoriser le polynme caractristique formellement !
On tape :
egvl([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[[2,1,0],[0,2,1],[0,0,2]]
On tape :
egvl([[4,1,0],[1,2,-1],[2,1,0]])
On obtient :

[[0.324869129433,0,0],[0,4.21431974338,0],[0,0,1.46081112719]]

6.49.3

Vecteurs propres : egv eigenvectors eigenvects eigVc

egv (ou eigenvectors eigenvects eigVc) a comme argument une matrice A dordre n.
egv (ou eigenvectors eigenvects eigVc) renvoie la matrice de passage dune matrice diagonalisable (les colonnes du rsultat sont les vecteurs propres
de la matrice rsultat).
On tape :
egv([[1,1,3],[1,3,1],[3,1,1]])
On obtient :
[[-1,1,1],[2,1,0],[-1,1,-1]]
On tape :
egv([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
"Not diagonalizable at eigenvalue 2"
En mode complexe on tape :
egv([[2,0,0],[0,2,-1],[2,1,2]])
On obtient :
[0,1,0],[-1,-2,-1],[i,0,-i]]

6.49. RDUCTION DES MATRICES

6.49.4

515

Matrice de Jordan rationnelle : rat_jordan

rat_jordan a comme argument une matrice A dordre n coefficients rationnels.


rat_jordan renvoie :
en mode Xcas, Mupad ou TI
une squencee compose de deux matrices : une matrice de changement de
base P , suivie de la matrice de Jordan J associe A si celle-ci est rationnelle ou de la matrice dont les blocs de Jordan sont remplacs par les matrices compagnons associes au facteur non rationnellement reductible du
polynme caractristique de A (cest la matrice la plus reduite coefficient
dans le corps de A, ou le corps complexifi de A si on est en mode complexe).
en mode Maple
la matrice de Jordan J associe A si celle-ci est rationnelle ou de la matrice
dont les blocs de Jordan sont remplacs par les matrices compagnons associes au facteur non rationnellement reductible du polynme caractristique
de A. On peut cependant obtenir la matrice de changement de base P , dans
une variable passe en second argument, par exemple
rat_jordan([[1,0,0],[1,2,-1],[0,0,1]],P)
On a :
J = P 1 AP avec J est coefficients rationnels.
Remarques
La syntaxe Maple est aussi valable dans les autres modes, par exemple, en
mode Xcas, on tape :
rat_jordan([[4,1,1],[1,4,1],[1,1,4]],P)
On obtient :
[[1,-1,1/2],[1,0,-1],[1,1,1/2]]
puis P renvoie :
[[6,0,0],[0,3,0],[0,0,3]]
,
Les coefficients de P et de J appartiennent au corps des coefficients de A.
Par exemple, en mode Xcas, on tape :
rat_jordan([[1,0,1],[0,2,-1],[1,-1,1]])
On obtient :
[[1,1,2],[0,0,-1],[0,1,2]],[[0,0,-1],[1,0,-3],[0,1,4]]
On tape (on met -pcar(...) car largument de companion doit tre un
polynme unitaire (cf 6.49.11)
companion(-pcar([[1,0,1],[0,2,-1],[1,-1,1]],x),x)
On obtient :
[[0,0,-1],[1,0,-3],[0,1,4]]
On tape :
rat_jordan([[1,0,0],[0,1,1],[1,1,-1]])
On obtient :
[[-1,0,0],[1,1,1],[0,0,1]],[[1,0,0],[0,0,2],[0,1,0]]

516

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On tape :
factor(pcar([[1,0,0],[0,1,1],[1,1,-1]],x))
On obtient :
-(x-1)*(x^2-2)
On tape :
companion((x^2-2),x)
On obtient :
[[0,2],[1,0]]
Lorsque A est symtrique et a des valeurs propres dordre multiple, Xcas
renvoie des vecteurs propres orthogonaux mais pas forcment norms i.e.
tran(P)*P est une matrice diagonale de diagonale le carr de la norme
des vecteurs propres.
On tape :
rat_jordan([[4,1,1],[1,4,1],[1,1,4]])
On obtient :

[[1,-1,1/2],[1,0,-1],[1,1,1/2]],[[6,0,0],[0,3,0],[0,0,3]]
On tape en mode Xcas, Mupad et TI :
rat_jordan([[1,0,0],[1,2,-1],[0,0,1]])
On obtient :
[[0,1,0],[1,0,1],[0,1,1]],[[2,0,0],[0,1,0],[0,0,1]]
On tape en mode Xcas, Mupad et TI :
rat_jordan([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[[[1,2,1],[0,1,0],[1,2,0]],[[2,1,0],[0,2,1],[0,0,2]]]
En mode complexe et en mode Xcas, Mupad et TI, on tape :
rat_jordan([[2,0,0],[0,2,-1],[2,1,2]])
On obtient :
[[1,0,0],[-2,-1,-1],[0,-i,i]],[[2,0,0],[0,2-i,0],[0,0,2+i]]
On tape en mode Maple :
rat_jordan([[1,0,0],[1,2,-1],[0,0,1]],P)
On obtient :
[[2,0,0],[0,1,0],[0,0,1]]
puis on tape :
P)
On obtient :
[[0,1,0],[1,0,1],[0,1,1]]

6.49. RDUCTION DES MATRICES

6.49.5

517

Matrice de passage et matrice de Jordan : jordan

jordan a comme argument une matrice A dordre n.


jordan renvoie
en mode Xcas (il faut tre en mode complexe cest dire avoir coch
Complexe dans la configuration de CAS lorsquil y a des valeurs propres
complexes), Mupad ou TI
une squencee compose de deux matrices : une matrice de changement de
base P de colonnes les vecteurs propres et caractristiques de A, suivie de
la matrice de Jordan J associe A dans la nouvelle base,
en mode Maple
la matrice de Jordan J associe A dans la nouvelle base. On peut cependant
obtenir la matrice de changement de base P , dans une variable passe en
second argument, par exemple
jordan([[1,0,0],[0,1,1],[1,1,-1]],P)
On a :
J = P 1 AP .
Remarques Pour rat_jordan :
La syntaxe Maple est aussi valable dans les autres modes, par exemple, en
mode Xcas, on tape :
rat_jordan([[4,1,1],[1,4,1],[1,1,4]],P)
On obtient :
[[1,-1,1/2],[1,0,-1],[1,1,1/2]]
puis P renvoie :
[[6,0,0],[0,3,0],[0,0,3]]
, On tape :
rat_jordan([[-1,1,0],[0,-1,1],[1,0,-1]])
On obtient :
[[1,1,-1],[1,0,-1],[1,-1,2]],[[0,0,0],[0,0,-3],[0,1,-3]]
On tape (en mode complexe) :
jordan([[-1,1,0],[0,-1,1],[1,0,-1]])
On obtient :
[[1,(-i)*sqrt(3)-1,(i)*sqrt(3)-1],[1,2,2],
[1,(i)*sqrt(3)-1, (-i)*sqrt(3)-1]], [[0,0,0],
[0,((i)*sqrt(3)-3)/2,0],[0,0,((-i)*sqrt(3)-3)/2]]
Lorsque A est symtrique et a des valeurs propres dordre multiple, Xcas
renvoie des vecteurs propres orthogonaux (pas forcment norms i.e. tran(P)*P)
et une matrice diagonale ayant pour diagonale le carr de la norme des vecteurs propres. par exemple :
rat_jordan([[4,1,1],[1,4,1],[1,1,4]])
renvoie :
[[1,-1,1/2],[1,0,-1],[1,1,1/2]],[[6,0,0],[0,3,0],[0,0,3]]
Pour avoir la matrice de Jordan de :

1 0 0
0 1 1
1 1 1

518

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

on tape en mode Xcas, Mupad et TI :


jordan([[1,0,0],[0,1,1],[1,1,-1]])
On obtient :

0
1
0
2 0
0

, 0 1
1
0
1
1

21 0 21
0 0 2

On tape en mode Maple :


jordan([[1,0,0],[0,1,1],[1,1,-1]])
On obtient :
[[1,0,0],[0,-(sqrt(2)),0],[0,0,sqrt(2)]]
On tape en mode Maple :
jordan([[1,0,0],[0,1,1],[1,1,-1]],P)
On obtient :
[[1,0,0],[0,-(sqrt(2)),0],[0,0,sqrt(2)]]
puis on tape :
P)
On obtient :
[[-1,0,0],[1,1,1],[0,-sqrt(2)-1,sqrt(2)-1]]
On tape en mode Xcas, Mupad et TI :
jordan([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[[[1,2,1],[0,1,0],[1,2,0]],[[2,1,0],[0,2,1],[0,0,2]]]
En mode complexe et en mode Xcas, Mupad et TI, on tape :
jordan([[2,0,0],[0,2,-1],[2,1,2]])
On obtient :
[[1,0,0],[-2,-1,-1],[0,i,-i]],[[2,0,0],[0,2+i,0],[0,0,2-i]]

6.49.6

Puissance n dune matrice carre : matpow

matpow lve une matrice carre la puissance n en la jordanisant On tape :


matpow([[1,2],[2,1]],n)
On obtient :
[[((-1)^n+3^n)/2,(-(-1)^n+3^n)/2],[(-(-1)^n+3^n)/2,((-1)^n+3^n)/2]]
On a en effet :
jordan([[1,2],[2,1]]) renvoie :
[[1,-1],[1,1]],[[3,0],[0,-1]]

6.49. RDUCTION DES MATRICES

6.49.7

519

Polynme caractristique : pcar charpoly

pcar (ou charpoly) a un (resp deux) argument(s).


pcar (ou charpoly) a comme argument une matrice A dordre n (resp une
matrice A dordre n et un nom de variable formelle).
pcar (ou charpoly) renvoie le polynme caractristique P de A crit selon la
liste de ses coefficients (resp le polynme caractristique P de A crit sous forme
symbolique en utilisant le nom de variable donne en argument).
Le polynme caractristique P de A est dfini par
P (x) = det(x.I A)
On tape :
pcar([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[1,-6,12,-8]
Donc le polynme caractristique de [[4,1,-2],[1,2,-1],[2,1,0]] est
x3 6x2 + 12x 8
On peut aussi avoir la forme symbolique en tapant :
normal(poly2symb([1,-6,12,-8]))).
On tape :
purge(X):;pcar([[4,1,-2],[1,2,-1],[2,1,0]],X)
On obtient :
X^3-6*X^2+12*X-8
On peut spcifier par un argument optionnel lalgorithme utilis pour faire ce calcul, parmi :
lagrange : calcul par interpolation de Lagrange, en donnant x les valeurs
comprises entre 0 et la dimension.
On tape :
pcar([[4,1,-2],[1,2,-1],[2,1,0]],lagrange)
On obtient :
x*((x-1)*(-x+5)-7)+8
et aprs simplification :
-x^3+6*x^2-12*x+8
hessenberg : calcul par rduction sous forme tri-diagonale puis formule
de rcurrence, efficace sur un corps fini.
On tape :
pcar([[4,1,-2],[1,2,-1],[2,1,0]],hessenberg)
On obtient :
[1,-6,12,-8]
fadeev : calcul simultan du polynme caractristique et de la comatrice
de xI A On tape :
pcar([[4,1,-2],[1,2,-1],[2,1,0]],fadeev)

520

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On obtient :

[1,-6,12,-8]
pmin : calcul du polynme minimal relatif un vecteur pris au hasard, cest
le polynme caractristique sil est de degr maximal.
On tape :
pcar([[4,1,-2],[1,2,-1],[2,1,0]],pmin)
On obtient :
[1,-6,12,-8]
Pour les matrices coefficients entiers, lalgorithme utilis par dfaut est modulaire, on calcule le polynme caractristique modulo plusieurs nombres premiers,
soit par le polynme minimal, soit par Hessenberg, et on reconstruit par les restes
chinois coefficient par coefficient. Le test darrt est probabiliste, lorsque le polynme reconstruit ne varie plus pour des nombres premiers dont le produit est
suprieur linverse de la valeur de proba_epsilon (que lon peut modifier
dans la configuration du cas). Si proba_epsilon est nul, le rsultat est dterministe (une majoration priori des coefficients est alors utilise). Dans tous les
cas, le temps de calcul est en O(n4 ln(n)), mais il est plus rapide avec la mthode
probabiliste.

6.49.8

Polynme caractristique dune matrice creuse de grande dimension : pcar_hessenberg

pcar_hessenberg a comme argument une matrice A dordre n.


pcar_hessenberg renvoie le polynme caractristique P de A calcul selon la
mthode de Hessenberg (lorsque les coefficients de A sont dans un corps fini ou
sont reprsentation finie) et dfinit par :
P (x) = (1)n . det(A x.I).
On tape :
pcar_hessenberg([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[1,-6,12,-8]
Donc le polynme caractristique de [[4,1,-2],[1,2,-1],[2,1,0]] est :
x3 6x2 + 12x 8.

6.49.9

Polynme minimal : pmin

pmin a un (resp deux) argument(s).


pmin a comme argument une matrice A dordre n (resp une matrice A dordre n
et un nom de variable formelle).
pmin renvoie le polynme minimal de A crit selon la liste de ses coefficients (resp
le polynme minimal P de A crit sous forme symbolique en utilisant le nom de
variable donne en argument).
Le polynme minimal P de A est le polynme de plus petit degr qui annule A
(P (A) = 0).
On tape :
pmin([[1,0],[0,1]])

6.49. RDUCTION DES MATRICES

521

On obtient :
[1,-1]
On tape :
pmin([[1,0],[0,1]],x)
On obtient :
x-1
Donc le polynme minimal de [[1,0],[0,1]] est x-1.
On tape :
pmin([[2,1,0],[0,2,0],[0,0,2]])
On obtient :
[1,-4,4]
On tape :
pmin([[2,1,0],[0,2,0],[0,0,2]],x)
On obtient :
x^2-4*x+4
Donc le polynme minimal de [[2,1,0],[0,2,0],[0,0,2]] est x2 4x + 4.

6.49.10

Comatrice : adjoint_matrix

La comatrice de A est une matrice B telle que A B = det(A) I.


adjoint_matrix a comme argument une matrice carre A dordre n.
adjoint_matrix renvoie une liste compose des coefficients du polynme
caractristique P de A, dune liste contenant les coefficients matriciels dun polynme Q tel que Q(x) soit la comatrice de A x I au signe prs si n est pair !
On a :
P (x) = (1)n det(A x I) et P (A) P (x) I = (A x I) Q(x)
En effet le polynme coefficients matriciels P (A) P (x) I est divisible par
A x I car il sannule pour x = A :
P (A) = 0, on a donc P (A) P (x) I = P (x) I = (A x I) Q(x).
Q(x) est donc la comatrice de A x I au signe prs si n est pair, puisque :
(A x I) Q(x) = P (x) I = (1)n+1 det(A x I).
On a alors Q(x) = I xn1 + ... + B0 o B0 = est la comatrice de A (au signe
prs si n est pair !) puisque Q(0) = B0 et A Q(0) = (1)n+1 det(A).
On tape :
adjoint_matrix([[4,1,-2],[1,2,-1],[2,1,0]])
On obtient :
[[1,-6,12,-8],[[[1,0,0],[0,1,0],[0,0,1]],[[-2,1,-2],
[1,-4,-1],[2,1,-6]],[[1,-2,3],[-2,4,2],[-3,-2,7]]]]

522

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Donc le polynme caractristique est :


x3 6 x2 + 12 x 8
Le dterminant de A est gal P (0) donc 8
La comatrice de A est gale Q(0) donc :
[[1, 2, 3], [2, 4, 2], [3, 2, 7]]
Linverse de A est donc :
1/8 [[1, 2, 3], [2, 4, 2], [3, 2, 7]]
La comatrice de A x I est donc :
[[x2 2x+1, x2, 2x+3], [x2, x2 4x+4, x+2], [2x3, x2, x2 6x+7]]
On tape :
adjoint_matrix([[4,1],[1,2]])
On obtient :
[[1,-6,7],[[[1,0],[0,1]],[[-2,1],[1,-4]]]]
Donc le polynme caractristique est :
x2 6 x + 7
Le dterminant de A est gal +P (0) donc 7
La comatrice de A est gale Q(0) donc :
[[2, 1], [1, 4]].
Linverse de A est donc :
1/7 [[2, 1], [1, 4]].
La comatrice de A x I est donc :
[[x 2, 1], [1, x 4]].

6.49.11

Matrice compagnon dun polynme : companion

companion a comme argument un polynme P unitaire et le nom de sa variable.


companion renvoie la matrice qui a pour polynme caractristique le polynme
P.
Si P (x) = xn + an1 xn1 + ... + a 1x + a0 , cette matrice est gale la
matrice unit dordre n 1 borde par [0, 0.., 0, a0 ] comme premire ligne, et
par [a0 , a1 , ...., an1 ] comme dernire colonne.
On tape :
companion(x^2+5x-7,x)
On obtient :
[[0,7],[1,-5]]
On tape :
companion(x^4+3x^3+2x^2+4x-1,x)
On obtient :
[[0,0,0,1],[1,0,0,-4],[0,1,0,-2],[0,0,1,-3]]

6.49. RDUCTION DES MATRICES

6.49.12

523

Rduction de Hessenberg dune matrice : hessenberg

hessenberg a comme premier argument une matrice A et comme deuxime


argument 0, -1 ou -2 ou n > 1 et n premier (par dfaut 0).
hessenberg renvoie la matrice P de passage et la matrice B semblable A dont
les coefficients sous-sous-diagonaux sont nuls. On dit que B est une matrice de
Hessenberg et on a B = P 1 AP ou B P 1 AP selon le
deuxime argument.
Avec un seul argument ou comme deuxime argument 0, les calculs sont
exacts.
On tape :
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]])
ou
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]],0)
On obtient :

3 8 5
5/2
2
1 0 0
0 0

0 1 0
0 0
2 1 1/2 (5)/4 1

0 1 1
2
0
0 0

, 0 2 1

0 1 1/2 1/4 1 0 0 2
3/2
2
0 0 0
13/8 7/2
0 1 1
1 0
On a en effet si :
A:=[[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]]
P,B:= hessenberg(A,0)
pcar(A)=pcar(B)=[1,-10,13,71,-50,-113]
inv(P)*A*P est gal B
Avec comme deuxime argument -1, les calculs sont approchs et la matrice
B est triangulaire.
On tape :
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]],-1)
On obtient (on donne le rsultat avec 2 digits) :

0.73 0.057 0.42 0.17 0.51


0.25 0.53
0.72 0.38 0.048

0.35 0.44 0.3


0.19
0.74

,
0.34
0.68
0.17 0.46
0.43
0.41
0.25
0.44
0.76 0.063

6.7 8.7e 15 2e 13 2.7e 14 1.4e 13


0.0

4.6
0
0
0

0.0

0.0
1.9
0
0

0.0

0.0
0.0
1.7
0
0.0
0.0
0.0
0.0
1.2

524

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On a en effet si :
A:=[[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]]
P,B:= hessenberg(A,-1)
inv(P)*A*P est gal B en calcul numrique.
Remarque
hessenberg(A,-1) est identique SCHUR(A) qui est une commande
Xcas compatible avec les calculatrices HP.
Avec comme deuxime argument -2, les calculs sont approchs et la matrice
P est orthogonale et la matrice B a ses coefficients sous-sous-diagonaux
nuls.
On tape :
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]],-2)
On obtient (on donne le rsultat avec 2 digits) :

1
0
0
0
0

0
0
0
0
0.5 0.75
0
0.43
0.5 0.45 0.71 0.21
0.5 0.15
0
0.85
0.5 0.45
0.71 0.21

3.0
4
0.0 1.6e 14 5.4e 14
4
2.2 0.83
0.0
0.0
0 0.83 0.75
1.7
1.4e 14
0
0
1.7
0.5
2
0
0
0
2
3.5

On a en effet si :
A:=[[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]]
P,B:= hessenberg(A,-2)
inv(P)*A*P est gal B et inv(P) est gal tr(P) en calcul numrique.
Avec comme deuxime argument n > 1 et n premier, les calculs sont modulo n et la matrice B est triangulaire.
On tape :
hessenberg([[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]],13)
On obtient

1
0
0
0
1
0
0 12
1
0 66
6
0 131 12

0
0
0
1
4

0
0
0
0
1

3 5 8 10
2

2 1
7 5 1

0 2
1 5 11

0 0
7 5 12
0 0
0
0
10

6.49. RDUCTION DES MATRICES

6.49.13

525

Forme normale de Hermite : ihermite

ihermite a comme argument une matrice coefficient dans Z.


ihermite renvoie les matrices U et B tels que U est inversible dans Z, B est
triangulaire suprieure et vrifie : B=U*A.
Pour faire cela on effectue la rduction sous forme chelonne (de type Gauss)
dune matrice dentiers en utilisant uniquement des oprations de lignes inversibles
dans les entiers, en dautres termes si A est la matrice originale, on calcule une
matrice U inversible dans Z et une matrice B triangulaire superieure telles que B =
U*A.
De plus les coefficients au-dessus de la diagonale de A sont en module inferieurs
au pivot de la colonne divis par 2. Puisque det(U) = 1, on passe aussi de B a
A uniquement avec des manipulations de ligne a coefficients entiers.
On tape :
A:=[[9,-36,30],[-36,192,-180],[30,-180,180]];
U,B:=ihermite(A)
On obtient :
[[9,-36,30],[-36,192,-180],[30,-180,180]],
[[13,9,7],[6,4,3],[20,15,12]],[[3,0,30],[0,12,0],[0,0,60]]
Application : Calcul dune Z-base dun noyau
Soit M la matrice dont on cherche le noyau.
Soit U,A:=ihermite(transpose(M)).
On a A=U*transpose(M) donc transpose(A)=M*transpose(U).
Les colonnes nulles de transpose(A) correspondent donc aux colonnes de
transpose(U) qui sont dans Ker(M). Ainsi, les lignes nulles de A correspondent aux lignes de U qui sont dans Ker(M).
Exemple
Si M:=[[1,4,7],[2,5,8],[3,6,9]]
U,A:=ihermite(tran(M)) renvoie :
U:=[[-3,1,0],[4,-1,0],[-1,2,-1]] et
A:=[[1,-1,-3],[0,3,6],[0,0,0]]
A[2]=[0,0,0] donc une base de Ker(M) est compose de U[2]=[-1,2,-1].
On vrifie que la bien M*U[2]=[0,0,0].

6.49.14

Forme normale de Smith : ismith

ismith a comme argument une matrice coefficient dans Z.


ismith renvoie les matrices U,B et V tels que U et V sont inversibles dans Z, B
est diagonale avec B[i,i] divise B[i+1,i+1] et on a B=U*A*V.
Les B[i,i] sappellent facteurs invariants et permettent entre autre de trouver la
structure des groupes abliens de type fini.
On tape :
A:=[[9,-36,30],[-36,192,-180],[30,-180,180]];
U,B,V:=ismith(A)
On obtient :

526

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


[[-3,0,1],[6,4,3],[20,15,12]],
[[3,0,0],[0,12,0],[0,0,60]],
[[1,24,-30],[0,1,0],[0,0,1]]

Les facteurs invariants sont 3, 12 et 60.

6.50

Les isomtries

6.50.1

Reconnaitre une isomtrie : isom

isom a comme argument la matrice dune application linaire en dimension 2 ou


3.
isom renvoie :
si lapplication linaire est une isomtrie directe,
la liste des lments caractristiques et +1
si lapplication linaire est une isomtrie indirecte,
la liste des lments caractristiques et -1
si lapplication linaire nest pas une isomtrie,
[0].
On tape :
isom([[0,0,1],[0,1,0],[1,0,0]])
On obtient :
[[1,0,-1],-1]
ce qui veut dire que cette isomtrie est une symtrie par rapport au plan x z = 0.
On tape :
isom(sqrt(2)/2*[[1,-1],[1,1]])
On obtient :
[pi/4,1]

cette isomtrie est donc une rotation plane dangle .


4
On tape :
isom([[0,0,1],[0,1,0],[0,0,1]])
On obtient :
[0]
ce qui veut dire que ce nest pas une isomtrie.

6.50. LES ISOMTRIES

6.50.2

527

Trouver la matrice dune isomtrie : mkisom

mkisom a comme argument :


En dimension 3, la liste des lments caractristiques (vecteur directeur de
laxe et angle de la rotation ou vecteur de la normale au plan de symtrie) et
+1 ou -1 (+1 pour les isomtries directes et -1 pour les indirectes).
En dimension 2, llment caractristique (un angle ou un vecteur) et +1 ou
-1 (+1 pour les isomtries directes et -1 pour les indirectes).
mkisom renvoie la matrice de lisomtrie dfinie par les arguments.
On tape :
mkisom([[-1,2,-1],pi],1)
On obtient la matrice dune rotation daxe [1, 2, 1] et dangle :
[[-2/3,-2/3,1/3],[-2/3,1/3,-2/3],[1/3,-2/3,-2/3]]
On tape :
mkisom([pi],-1)
On obtient la matrice dune symtrie par rapport O :
[[-1,0,0],[0,-1,0],[0,0,-1]]
On tape :
mkisom([1,1,1],-1)
On obtient la matrice dune symtrie par rapport au plan x + y + z = 0 :
[[1/3,-2/3,-2/3],[-2/3,1/3,-2/3],[-2/3,-2/3,1/3]]
On tape :
mkisom([[1,1,1],pi/3],-1)
On obtient la matrice produit dune rotation daxe [1, 1, 1] et dangle
symtrie par rapport au plan x + y + z = 0 :

et dune

[[0,-1,0],[0,0,-1],[-1,0,0]]
On tape :
mkisom(pi/2,1)
On obtient la matrice en dimension 2, de la rotation plane dangle

[[0,-1],[1,0]]
On tape :
mkisom([1,2],-1)
On obtient la matrice en dimension 2, de la symtrie plane par rapport la droite
dquation x + 2y = 0 :
[[3/5,-4/5],[-4/5,-3/5]]

528

6.51

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Factorisation des matrices

La factorisation des matrices renvoie en gnral des matrices numriques et


quelquefois des matrices symboliques.

6.51.1

Dcomposition de Cholesky : cholesky

cholesky a pour argument une matrice carre symtrique M definie positive.


cholesky renvoie une matrice symbolique (ou numrique) P triangulaire infrieure telle que :
tran(P)*P=M
On tape :
cholesky([[1,1],[1,5]])
On obtient :
[[1,0],[1,2]]
On tape :
cholesky([[3,1],[1,4]])
On obtient :
[[sqrt(3),0],[(sqrt(3))/3,(sqrt(33))/3]]
On tape :
cholesky([[1,1],[1,4]])
On obtient :
[[1,0],[1,sqrt(3)]]
Attention Si la matrice argument A nest pas une matrice symtrique, cholesky
ne renvoie pas derreur, mais cholesky utilise la matrice symtrique B associe
la forme quadratique q provenant de la forme bilinaire associe A.
On tape :
cholesky([[1,-1],[-1,4]])
ou :
cholesky([[1,-3],[1,4]])
On obtient :
[[1,0],[-1,sqrt(3)]]

6.51. FACTORISATION DES MATRICES

6.51.2

529

Dcomposition QR : qr

qr a comme argument une matrice carre numrique A dordre n.


qr factorise numriquement cette matrice sous la forme QR o Q est une matrice
orthogonale (t Q Q = I) et R est une matrice triangulaire suprieure.
qr(A) renvoie seulement R et on a Q=A*inv(R).
On tape :
qr([[3,5],[4,5]])
On obtient la matrice R :
[[-5,-7],[0,-1]]
On tape :
qr([[1,2],[3,4]])
On obtient la matrice R :
[[-3.16227766017,-4.42718872424],[0,-0.632455532034]]

6.51.3

Dcomposition QR (compatible TI) : QR

QR a comme argument une matrice carre numrique A dordre n et deux noms de


variables : var1 et var2.
QR factorise numriquement cette matrice sous la forme QR o Q est une matrice
orthogonale (t Q Q = I) et R est une matrice triangulaire suprieure.
QR(A) renvoie R, met Q dans var1 et met R dans var2.
On a Q=A*inv(R).
On tape :
QR([[3,5],[4,5]],Q,R)
On obtient la matrice R :
[[-5,-7],[0,-1]]

6.51.4

Dcomposition LQ (compatible HP) : LQ

LQ a comme argument une matrice rectangulaire numrique A dordre m n.


LQ(A) renvoie L, Q, P tel que P*A=L*Q avec : L une matrice triangulaire
infrieure dordre m n, Q une matrice orthogonale dordre n n (t Q Q = I)
et P une matrice de permutation dordre n n.
On tape :
L,Q,P:=LQ([[4,0,0],[8,-4,3]])
On obtient les 3 matrices L, Q, P :
[[4.0,0,0],[8.0,5.0,0]],[[1,0,0],[0,-0.8,0.6],[0,-0.6,-0.8]],[[1,0],[0,1]]
On tape : L*Q et on obtient P*A.
On tape :

530

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


L,Q,P:=LQ([[24,18],[30,24]])

On obtient :

[[30.0,0],[38.4,1.2]],[[0.8,0.6],[-0.6,0.8]],[[1,0],[0,1]]
On tape : L*Q et on obtient P*A.

6.51.5

Dcomposition LU : lu

lu a comme argument une matrice carre A dordre n (numrique ou symbolique).


lu(A) renvoie une permutation p de 0..n 1, une matrice triangulaire infrieure
L avec des 1 sur sa diagonale et une matrice triangulaire suprieure U .
Ces matrices sont telles que :
P A = L U , o P est la matrice de permutation associe p ( que lon
peut calculer avec P:=permu2mat(p)),
lquation A x = B quivaut :
LU x = P B = p(B) where p(B) = [bp(0) , bp(1) ..bp(n1) ],

B = [b0 , b1 ..bn1 ]

On peut aussi dfinir partir de p la matrice de permutation Pn par :


Pn [i, p(i)] = 1 et
Pn [i, j] = 0 si j 6= p(i).
Cest la matrice obtenue en permutant, selon la permutation p, les lignes de la
matrice unit.
On peut utiliser la fonction permu2mat : permu2mat(p) renvoie la matrice P
dordre n.
On tape :
(p,L,U):=lu([[3,5],[4,5]])
On obtient :
[1,0],[[1,0],[0.75,1]],[[4,5],[0,1.25]]
On a, en effet, n = 2 donc :
P [0, p(0)] = P2 [0, 1] = 1,

P [1, p(1)] = P2 [1, 0] = 1,

P = [[0, 1], [1, 0]]

Vrification :
On tape :
permu2mat(p)*A; L*U
On obtient :
[[4.0,5.0],[3.0,5.0]],[[4.0,5.0],[3.0,5.0]]
Il faut noter que la permutation est diffrente lorsque les donnes sont exactes (le
choix du pivot est plus simple). On tape :
lu([[1,2],[3,4]])

6.51. FACTORISATION DES MATRICES

531

On obtient :
[1,0],[[1,0],[3,1]],[[1,2],[0,-2]]
On tape :
lu([[1.0,2],[3,4]])
On obtient :
[1,0],[[1,0],[0.333333333333,1]],[[3,4],
[0,0.666666666667]]

6.51.6

Dcomposition LU (compatible TI) : LU

LU a comme argument une matrice carre numrique dordre n et trois noms de


variables : var1, var2 et var3.
LU(A,var1,var2,var3) renvoie P une matrice de permutation et met :
dans var1, L une matrice triangulaire infrieure avec des 1 sur sa diagonale,
dans var2, U une matrice triangulaire suprieure,
dans var3, la matrice de permutation P renvoye.
Ces matrices sont telles que :
lquation A x = B quivaut L U x = P B.
On tape :
LU([[3,5],[4,5]],L,U,P)
On obtient :
[[0,1],[1,0]]
On tape :
L
On obtient :
[[1,0],[0.75,1]]
On tape :
U
On obtient :
[[4,5],[0,1.25]]
On tape :
P
On obtient :
[[0,1],[1,0]]

532

6.51.7

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Valeurs singulires (compatible HP) : SVL svl

SVL ou svl a comme argument une matrice carre numrique dordre n.


SVL(A) renvoie les valeurs singulires de A.
Les valeurs singulires de A sont les racines carres positives des valeurs propres
de A trn(A). Ainsi lorsque A est symtrique, les valeurs singulires de A sont
les valeurs absolues de ses valeurs propres.
On tape :
SVL([[1,2],[3,4]])
ou
svl([[1,2],[3,4]])
On obtient :
[0.365966190626,5.46498570422]
On tape :
evalf(sqrt(eigenvals([[1,2],[3,4]]*[[1,3],[2,4]])))
On obtient :
[5.46498570422,0.365966190626]
On tape :
SVL([[1,4],[4,1]])
ou
svl([[1,4],[4,1]])
On obtient :
[5.0,3.0]
On tape :
abs(eigenvals([[1,4],[4,1]]))
On obtient :
[5,3]

6.51.8

Singular value decomposition : svd

svd (singular value decomposition) a comme argument une matrice carre numrique relle dordre n.
svd utilise la librairie lapack
svd(A) renvoie U une matrice orthogonale, s la diagonale dune matrice diagonale S constitue par les valeurs singulires de A et Q une matrice orthogonale
(t Q Q = I) tel que :
A = U.diag(s).tran(Q).
On tape :

6.51. FACTORISATION DES MATRICES

533

svd([[1,2],[3,4]])
On obtient :
[[-0.404553584834,-0.914514295677],[-0.914514295677,
0.404553584834]], [5.46498570422,0.365966190626],
[[-0.576048436766,0.81741556047],[-0.81741556047,
-0.576048436766]]
On tape :
(U,s,Q):=svd([[3,5],[4,5]])
On obtient :
[[-0.672988041811,-0.739653361771],[-0.739653361771,
0.672988041811]],[8.6409011028,0.578643354497],
[[-0.576048436766,0.81741556047],[-0.81741556047,
-0.576048436766]]
Vrifions :
On tape :
U*diag(s)*tran(Q)
On obtient :
[[3.0,5.0],[4.0,5.0]]

6.51.9

Singular value decomposition (compatible HP) : SVD

SVD (singular value decomposition) a comme argument une matrice carre numrique relle dordre n.
SVD(A) renvoie U une matrice orthogonale, s la diagonale dune matrice diagonale S =diag(s) constitue par les valeurs singulires de A et Q une matrice
orthogonale, ,(t Q Q = I) tel que :
A = U.diag(s).tran(Q).
On tape :
SVD([[1,2],[3,4]])
On obtient :

[[[0.914514295677,0.404553584834],[-0.404553584834,0.914514295677]],[0.365966
On tape :
(U,s,Q):=SVD([[3,5],[4,5]])
On obtient :

[[[0.739653361771,0.672988041811],[-0.672988041811,0.739653361771]],[0.578643
Vrifions :
On tape :
U*diag(s)*tran(Q)
On obtient :
[[3.0,5.0],[4.0,5.0]]

534

6.51.10

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

Recherche dune base de vecteurs courts dun rseau : lll

lll a comme argument une matrice inversible M coefficients entiers.


lll renvoie (S, A, L, O) :
S a comme lignes une base courte du reseau engendr par les lignes de M ,
A est la matrice de passage de la base courte la base dfinie par les lignes
de M (A M = S),
L est une matrice triangulaire infrieure dont les coefficients sont de module
plus petits que 1/2,
O est une matrice dont les lignes sont orthogonales et on a L O = S.
Si en dimension 2, un vecteur du rseau a comme coordonnes [a, b] dans la
base dfinie par M et a comme coordonnes [a1, b1] dans la base courte dfinie par
S cest dire si [a, b] M = [a1, b1] S, alors :
[a, b] = [a1, b1] A
[a1, b1] S = [a1, b1] A M = [a, b] M et
[a, b] M = [a, b] A1 S = [a1, b1] S
On tape :
(S,A,L,O):=lll([[2,1],[1,2]])
On obtient :
[[-1,1],[2,1]],[[-1,1],[1,0]],[[1,0],[1/-2,1]],[[-1,1],[3/2,3/2]]
Donc :
S=[[-1,1],[2,1]]
A=[[-1,1],[1,0]]
L=[[1,0],[1/-2,1]]
O=[[-1,1],[3/2,3/2]]
On a comme ancienne base : v1=[2,1], v2=[1,2] et
comme base courte : w1=[-1,1], w2=[2,1].
Puisque w1=-v1+v2 et w2=v1 on a
A:=[[-1,1],[1,0]], A*M==S et L*O==S.
On tape :
(S,A,L,O):=lll([[3,2,1],[1,2,3],[2,3,1]])
On obtient :
S=[[-1,1,0],[-1,-1,2],[3,2,1]]
A= [[-1,0,1],[0,1,-1],[1,0,0]]
L= [[1,0,0],[0,1,0],[(-1)/2,(-1)/2,1]]
O= [[-1,1,0],[-1,-1,2],[2,2,2]]
si on tape :
M:=[[3,2,1],[1,2,3],[2,3,1]]
On a :
A*M==S et L*O==S

6.52. LES FORMES QUADRATIQUES

6.52

Les formes quadratiques

6.52.1

Matrice dune forme quadratique : q2a

535

q2a a deux arguments : une forme quadratique q et le vecteur de composantes les


variables utilises.
q2a renvoie la matrice A associe q.
On tape :
q2a(2*x*y,[x,y])
On obtient :
[[0,1],[1,0]]

6.52.2

Transformer une matrice en une forme quadratique : a2q

a2q a deux arguments : une matrice symtrique A reprsentant une forme quadratique q et le vecteur de composantes les variables utilises.
a2q renvoie la forme quadratique q.
On tape :
a2q([[0,1],[1,0]],[x,y])
On obtient :
2*x*y
On tape :
a2q([[1,2],[2,4]],[x,y])
On obtient :
x^2+4*x*y+4*y^2

6.52.3

Mthode de Gauss : gauss

gauss a deux arguments : une forme quadratique q et le vecteur de composantes


les variables utilises.
gauss renvoie lcriture de q sous forme dune somme et diffrence de carrs.
On tape :
gauss(2*x*y,[x,y])
On obtient :
(y+x)^2/2+(-(y-x)^2)/2

536

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.52.4

Algorithme du gradient conjugu : conjugate_gradient

conjugate_gradient(A,y,x0,eps) met en uvre lalgorithme du gradient conjugu pour rsoudre A x = y eps prs, lorsque A est une matrice
symtrique dfinie positive et x0 une solution initiale approche optionnelle.
On tape :
conjugate_gradient([[2,1],[1,5]],[1,0])
On obtient :
[5/9,-1/9]
On tape :

conjugate_gradient([[2,1],[1,5]],[1,0],[0.55,-0.11],1e-2)
On obtient :
[0.555,-0.11]
On tape :

conjugate_gradient([[2,1],[1,5]],[1,0],[0.55,-0.11],1e-10)
On obtient :
[0.555555555556,-0.111111111111]

6.52.5

Procd de Gramschmidt : gramschmidt

gramschmidt a un ou deux paramtres :


une matrice vue comme une liste de vecteurs lignes, le produit scalaire tant
le produit scalaire canonique, ou
un vecteur contenant la base dun espace vectoriel et une fonction qui dfinit
un produit scalaire.
gramschmidt donne une base orthonormale par rapport ce produit scalaire.
On tape :
normal(gramschmidt([[1,1,1],[0,0,1],[0,1,0]]))
Ou on tape :
normal(gramschmidt([[1,1,1],[0,0,1],[0,1,0]],dot))
On obtient :
[[(sqrt(3))/3,(sqrt(3))/3,(sqrt(3))/3],
[(-(sqrt(6)))/6,(-(sqrt(6)))/6,(sqrt(6))/3],
[(-(sqrt(2)))/2,(sqrt(2))/2,0]]

6.52. LES FORMES QUADRATIQUES

537

Exemple
Pour les polynmes de degr <n, on considre le produit scalaire dfini par :
Z

P.Q =

P (x).Q(x)dx
1

On tape :
gramschmidt([1,1+x],(p,q)->integrate(p*q,x,-1,1))
Ou on crit la fonction p_scal, on tape :
p_scal(p,q):=integrate(p*q,x,-1,1)
et on tape :
gramschmidt([1,1+x],p_scal)
On obtient :
[1/(sqrt(2)),(1+x-1)/sqrt(2/3)]

6.52.6

Trac dune conique : conic conique

conique a comme argument lexpression dune conique.


conique trace la conique ayant pour quation largument gal zro.
On tape :
conique(2*x^2+2*x*y+2*y^2+6*x)
On obtient :
le trac de lellipse de centre -2+i et dquation
2*x^2+2*x*y+2*y^2+6*x=0
Remarque :
Utiliser conique_reduite pour avoir lquation paramtrique de la conique.

6.52.7

Rduction dune conique : conique_reduite


reduced_conic

conique_reduite a un ou deux arguments : lexpression dune conique et le


vecteur de composantes les variables utilises si il est diffrent de [x,y].
conique_reduite renvoie une liste dlments :
lorigine de la conique,
la matrice dun repre dans lequel la conique est rduite,
0 ou 1 pour savoir si la conique est dgnre ou pas,
lquation rduite de la conique dans ce repre,
un vecteur contenant son quation paramtrique ou ses quations paramtriques lorsque la conique est compose de plusieurs nappes.
On tape :
conique_reduite(2*x^2+2*x*y+2*y^2+5*x+3,[x,y])

538

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

On obtient :
[[-5/3,5/6],[[-1/(sqrt(2)),1/(sqrt(2))],[-1/(sqrt(2)),
-1/(sqrt(2))]],1,3*x^2+y^2+-7/6,[[(-10+5*i)/6+(1/(sqrt(2))+
(i)/(sqrt(2)))*((sqrt(14)*cos( t))/6+
((i)*sqrt(42)*sin(t))/6),t,0,2*pi,(2*pi)/60]]]
La conique nest pas dgnre et a pour quation rduite :
3x2 + y 2 7/6 = 0
dans le repre dorigine 5/3 + 5 i/6 et daxes parallles aux vecteurs (1, 1)
et (1, 1).
Son quation paramtrique est :

10 + 5 i (1 + i) ( 14 cos(t) + i 42 sin(t))

+
6
6
2
et pour le dessin, le paramtre t varie de 0 2 avec un pas tstep=2/60.
Remarque :
Lorsque la conique est dgnre en 1 ou 2 droite(s), chaque droite nest pas donn
par son quation paramtrique mais par la liste constitue par un vecteur normal
la droite et un point de la droite.
On tape :
conique_reduite(x^2-y^2+3*x+y+2)
On obtient :
[[(-3)/2,1/2],[[1,0],[0,1]],0,x^2-y^2,
[[(-1+2*i)/(1-i),(1+2*i)/(1-i)],
[(-1+2*i)/(1-i),(-1)/(1-i)]]]
On obtient :
(2*sqrt(5*23297^2*126757^*21302293^2))/62906903119301897
Soit :
2*sqrt(5)
On tape :
H1:=projection(D1,M)
longueur(M,F1)/longueur(M,H1)
On obtient :
(2^14*3*13*17*89*311*521*563*769*2609*
sqrt(2*3*49409^2*112249^2*126757^2*
21302293^2*568000439^2*6789838247809^2))/
(2^14*3^2*13*17*89*311*521*563*769*
2609*49409*112249*126757*21302293*568000439*6789838247809)
Soit :
(sqrt(6))/3

6.52. LES FORMES QUADRATIQUES

6.52.8

539

Trac dune quadrique : quadrique

quadrique a comme arguments lexpression dune quadrique.


quadrique trace la quadrique ayant pour quation largument gal zro.
On tape :
quadrique(7*x^2+4*y^2+4*z^2+4*x*y4*x*z-2*y*z-4*x+5*y+4*z-18)
On obtient :
le trac de lellipsode dquation
7*x^2+4*y^2+4*z^2+4*x*y-4*x*z-2*y*z-4*x+5*y+4*z-18=0
Remarque :
Utiliser quadrique_reduite pour avoir lquation paramtrique de la quadrique.

6.52.9

Rduction dune quadrique : quadrique_reduite


reduced_quadric

quadrique_reduite a un ou deux arguments : lexpression dune quadrique


et le vecteur de composantes les variables utilises si il est diffrent de [x,y,z].
quadrique_reduite renvoie une liste dlments :
lorigine,
la matrice dun repre dans lequel la quadrique est rduite,
0 ou 1 (0 si la quadrique est dgnre),
lquation rduite de la quadrique dans ce repre,
un vecteur contenant son quation paramtrique ou ses quations paramtriques si la quadrique est compose de plusieurs nappes.
Attention ! les quations paramtriques sont crites laide des variables u,v : ces
variables doivent donc tre libres (purge u,v avant dappeler quadrique_reduite).
On tape :
quadrique_reduite(7*x^2+4*y^2+4*z^2+
4*x*y-4*x*z-2*y*z-4*x+5*y+4*z-18)
On obtient une liste contenant :
Lorigine du repre (centre de symtrie de la quadrique) :
[11/27,(-26)/27,(-29)/54],
La matrice de passage :
[[(sqrt(6))/3,(sqrt(5))/5,(-(sqrt(30)))/15],
[(sqrt(6))/6,0,(sqrt(30))/6],
[(-(sqrt(6)))/6,(2*sqrt(5))/5,(sqrt(30))/30]],
1 donc la quadrique nest pas dgnre
lquation rduite de la quadrique dans ce repre :
0,9*x^2+3*y^2+3*z^2+(-602)/27,
lquation paramtrique de la quadrique (dans le premier repre), de paramtres [u,v] :

540

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

[[(sqrt(6)*sqrt(602/243)*sin(u)*cos(v))/3+
(sqrt(5)*sqrt(602/81)*sin(u)*sin(v))/5+
((-(sqrt(30)))*sqrt(602/81)*cos(u))/15+11/27,
(sqrt(6)*sqrt(602/243)*sin(u)*cos(v))/6+
(sqrt(30)*sqrt(602/81)*cos(u))/6+(-26)/27,
((-(sqrt(6)))*sqrt(602/243)*sin(u)*cos(v))/6+
(2*sqrt(5)*sqrt(602/81)*sin(u)*sin(v))/5+
(sqrt(30)*sqrt(602/81)*cos(u))/30+(-29)/54], u=(0
.. pi),v=(0 .. (2*pi)),ustep=(pi/20),
vstep=((2*pi)/20)]]
Donc la quadrique est un ellipsode eta pour quation :
9 x2 + 3 y 2 + 3 z 2 + (602)/27
dans le repre dorigine [11/27, (26)/27, (29)/54]
de matrice de passage P est :

6
3
6
6

5
5

2 5
5

30

15
30
6
30
30

Son quation paramtrique est :

q 602
q 602
q 602

sin(u)
cos(v)
sin(u)
sin(v)
6
5
30 81 cos(u) 11

243
81

+
x=

3
5
15
27
q
q

602
602
6 243 sin(u) cos(v)
30 81 cos(u)) 26
y
=
+

6
27

q 6
q

q 602

602
602

6 243 sin(u) cos(v) 2 5 81 sin(u) sin(v)


30 81 cos(u) 29

z=
+
+

6
5
30
54
Remarque :
Lorsque la quadrique est dgnre en 1 ou 2 plan(s), chaque plan nest pas donn
par son quation paramtrique mais par la liste constitue par un vecteur normal au
plan et un point du plan.
On tape :
quadrique_reduite(x^2-y^2+3*x+y+2)
On obtient :
[[(-3)/2,1/2,0],[[1,0,0],[0,1,0],[0,0,-1]],0,x^2-y^2,
[hyperplan([1,1,0],[(-3)/2,1/2,0]),
hyperplan([1,-1,0],[(-3)/2,1/2,0])]]

6.53. LES EXPRESSIONS DE PLUSIEURS VARIABLES

6.53

Les expressions de plusieurs variables

6.53.1

Le gradient : derive deriver diff grad

541

derive (ou diff ou grad) a deux paramtres : une expression F dependant de


n variables relles et un vecteur de dimension n indiquant le nom de ces variables.

F F
derive renvoie le gradient de F (Grad(F ) = [ F
x , y , z ] si n = 3).
Exemple
Dterminer le gradient de F (x, y, z) = 2x2 y xz 3 .
On tape :
derive(2*x^2*y-x*z^3,[x,y,z])
Ou on tape :
diff(2*x^2*y-x*z^3,[x,y,z])
Ou on tape :
grad(2*x^2*y-x*z^3,[x,y,z])
On obtient :
[2*2*x*y-z^3,2*x^2,-(x*3*z^2)]
On obtient aprs simplification avec normal(ans()) :
[4*x*y-z^3,2*x^2,-(3*x*z^2)]
Si on veut connaitre les points critiques de F (x, y, z) = 2x2 y xz 3 , il suffit de
taper :
solve(derive(2*x^2*y-x*z^3,[x,y,z]),[x,y,z])
On obtient :
[[0,y,0]]

6.53.2

Le Laplacien : laplacian

laplacian a deux paramtres : une expression F dependant de n variables


relles et un vecteur de dimension n indiquant le nom de ces variables.
2
2
2
laplacian renvoie le laplacien de F (2 (F ) = xF2 + yF2 + zF2 si n = 3).
Exemple
Dterminer le laplacien de F (x, y, z) = 2x2 y xz 3 .
On tape :
laplacian(2*x^2*y-x*z^3,[x,y,z])
On obtient :
4*y+-6*x*z

542

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.53.3

La matrice hessienne : hessian

hessian a deux paramtres : une expression F dependant de n variables relles


et un vecteur de dimension n indiquant le nom de ces variables.
hessian renvoie la hessienne de F qui est la matrice des drives dordre 2.
Exemple
Dterminer la hessienne de F (x, y, z) = 2x2 y xz 3 .
On tape :
hessian(2*x^2*y-x*z^3 , [x,y,z])
On obtient :
[[4*y,4*x,-(3*z^2)],[2*2*x,0,0],[-(3*z^2),0,x*3*2*z]]
Pour avoir la hessienne aux points critiques on tape tout dabord :
solve(derive(2*x^2*y-x*z^3,[x,y,z]),[x,y,z])
pour avoir les points critiques.
On obtient :
[[0,y,0]]
Puis, on calcule la hessienne en ces points, on tape :
subst([[4*y,4*x,-(3*z^2)],[2*2*x,0,0],
[-(3*z^2),0,6*x*z]],[x,y,z],[0,y,0])
On obtient :
[[4*y,4*0,-(3*0^2)],[4*0,0,0],[-(3*0^2),0,6*0*0]]
et aprs simplification :
[[4*y,0,0],[0,0,0],[0,0,0]]

6.53.4

La divergence : divergence

divergence a deux paramtres : une expression F dependant de n variables


relles et un vecteur de dimension n indiquant le nom de ces variables.
On a si n = 3 :
A B C
divergence([A,B,C],[x,y,z])=
+
+
x
y
z
On tape :
divergence([x*z,-y^2,2*x^y],[x,y,z])
On obtient :
z+-2*y

6.53. LES EXPRESSIONS DE PLUSIEURS VARIABLES

6.53.5

543

Le rotationnel : curl

curl a deux paramtres : une expression F dependant de 3 variables relles et un


vecteur de dimension 3 indiquant le nom de ces variables.
curl dsigne le rotationnel de F .
Attention, ici n = 3.
On a :
C
B A C B A
curl([A,B,C],[x,y,z])=[

].
y
z z
x x
y
On tape :
curl([x*z,-y^2,2*x^y],[x,y,z])
On obtient :
[2*x^y*log(x),x-2*y*x^(y-1),0]

6.53.6

Le potentiel : potential

potential a deux arguments : un vecteur V de Rn dpendant de n variables et


le vecteur constitu du nom de ces variables.

potential renvoie une fonction U telle que Grad(U ) = V si bien sr, cela est

possible ! On dit alors que V drive du potentiel U .


La solution gnrale est la somme dune solution particulire et dune constante.

On sait quun vecteur V est un gradient si et seulement si son rotationnel est nul :
autrement dit si curl(V)=0.
potential est la fonction rciproque de derive.
On tape :
potential([2*x*y+3,x^2-4*z,-4*y],[x,y,z])
On obtient :
2*y*x^2/2+3*x+(x^2-4*z-2*x^2/2)*y

6.53.7

Champ flux conservatif : vpotential

vpotential a deux arguments : un vecteur V de Rn dpendant de n variables


et le vecteur constitu du nom de ces variables.

vpotential renvoie un vecteur U tel que Rot( U ) = V si bien sr, cela est

possible ! On dit alors que V est un champ flux conservatif ou un champ solnodal.
La solution gnrale est la somme dune solution particulire et du gradient dune
fonction arbitraire, Xcas renvoie le vecteur solution particulire de premire composante nulle.

On sait quun vecteur V est un rotationnel si et seulement si sa divergence est


nulle : autrement dit si divergence(V)=0.
En lectro-magntisme on a :

V = B = le champ magntique et

U = A = le potentiel vecteur.
vpotential est la fonction rciproque de curl.
On tape :

544

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


vpotential([2*x*y+3,x^2-4*z,-2*y*z],[x,y,z])

On obtient :
[0,(-(2*y))*z*x,-x^3/3-(-(4*z))*x+3*y]

6.54

quations

6.54.1

crire une quation : equal

equal a comme paramtre les deux membres dune quation.


equal renvoie cette quation.
On tape :
equal(2x-1,3)
On obtient :
(2*x-1)=3
On peut bien sr crire directement (2*x-1)=3.

6.54.2

Transformer une quation en diffrence : equal2diff

equal2diff a comme paramtre une quation.


equal2diff renvoie la diffrence des deux membres de lquation.
On tape :
equal2diff(2x-1=3)
On obtient :
2*x-1-3

6.54.3

Transformer une quation en une liste : equal2list

equal2list a comme paramtre une quation.


equal2list renvoie la liste forme par les deux membres de lquation.
On tape :
equal2list(2x-1=3)
On obtient :
[2*x-1,3]

6.54. QUATIONS

6.54.4

545

Pour avoir le membre de gauche dune quation : left gauche


lhs

left ou lhs a comme paramtre une quation ou un intervalle.


left ou lhs renvoie le membre de gauche de lquation ou de la borne gauche
de lintervalle.
On tape :
left(2x-1=3)
Ou on tape :
lhs(2x-1=3)
On obtient :
2*x-1
On tape :
left(1..3)
Ou on tape :
lhs(1..3)
On obtient :
1

6.54.5

Pour avoir le membre de droite dune quation : right droit


rhs

right ou rhs a comme paramtre une quation ou un intervalle.


right ou rhs renvoie le membre de droite de lquationou de la borne droite de
lintervalle.
On tape :
right(2x-1=3)
Ou on tape :
rhs(2x-1=3)
On obtient :
3
On tape :
right(1..3)
Ou on tape :
rhs(1..3)
On obtient :
3

546

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.54.6

Rsolution dquations : solve resoudre

solve permet de rsoudre une quation ou un systme dquations polynmiales.


solve a 1 ou 2 arguments qui sont une expression xpr en x ou une expression
xpr dune variable var et le nom de cette variable var.
solve resout xpr = 0 linconnue tant x ou var Attention
La deuxime variable peut spcifier un intervalle par exemple x = a..b pour navoir
que les solutions dans lintervalle [a; b] mais dans ce cas les solutions seront numriques et solve est alors identique fsolve, par exemple :
solve(t^2-2,t=0..2) ou fsolve(t^2-2,t=0..2) renvoie [1.41421356237]
alors que solve(t^2-2,t) renvoie [-(sqrt(2)),sqrt(2)].
Rsolution dune quation
solve a comme arguments une quation entre deux expressions (ou une
expression et dans ce cas =0 est sous-entendu), et le nom dune variable (par
dfaut x).
solve rsout cette quation.
Rsolution dun systme dquations polynmiales
Soit solve a comme arguments deux vecteurs : le vecteur des quations
polynmiales et le vecteur contenant le nom des variables.
solve rsout ce systme dquations polynmiales.
Attention
Par dfaut, solve ne renvoie que les solutions relles : pour avoir les solutions
complexes il faut tre en mode complexe cest dire avoir coch Complexe dans
la configuration du cas.
De plus,
pour les quations comportant un dnominateur, solve ne tient pas compte
du dnominateur et renvoie les solutions du numrateur.
Par exemple solve(ln(abs(x-2))/ln(x)) renvoie [1,3] ou
solve((x^2-2x)/x) renvoie [0,2],
pour les quations trigonomtriques, solve ne renvoie que les solutions
principales : pour avoir toutes les solutions il faut avoir coch All_trig_sol
dans la configuration du cas.
Exemples :
Rsoudre x4 1 = 3 On tape :
solve(x^4-1=3)
On obtient en mode rel :
[sqrt(2),-(sqrt(2))]
On obtient en mode complexe :
[sqrt(2),-(sqrt(2)),(i)*sqrt(2),-((i)*sqrt(2))]
Rsoudre exp(x) = 2
On tape :
solve(exp(x)=2)
On obtient en mode rel :
[log(2)]
Rsoudre en x, y le systme x + y = 1, x y = 0 :
On tape :
solve([x+y=1,x-y],[x,y])

6.54. QUATIONS

547

On obtient :
[[1/2,1/2]]
Rsoudre en x, y le systme x2 + y = 2, x + y 2 = 2
On tape :
solve([x^2+y=2,x+y^2=2],[x,y])
On obtient :
[[-2,-2],[1,1],[(-sqrt(5)+1)/2,(1+sqrt(5))/2],
[(sqrt(5)+1)/2,(1-sqrt(5))/2]]
Rsoudre en x, y, z le systme x2 y 2 = 0, x2 z 2 = 0 :
On tape :
solve([x^2-y^2=0,x^2-z^2=0],[x,y,z])
On obtient :
[[x,x,x],[x,-x,-x],[x,-x,x],[x,x,-x]]
Rsoudre cos(2 x) = 1/2
On tape :
solve(cos(2*x)=1/2)
On obtient :
[pi/6,(-pi)/6]
On obtient en ayant coch All_trig_sol :
[(6*pi*n_0+pi)/6,(6*pi*n_0-pi)/6]
Remarque Pour pouvoir par exemple trouver lintersection dune droite (donne
par son quation paramtrique) et un plan on peut mettre les quations sous la
forme dune liste contenant une liste.
Exemple : Trouver lintersection de la droite D dquation paramtrique [y z =
0, z x = 0, x y = 0] et du plan P dquation x 1 + y + z = 0.
On tape
solve([[y-z=0,z-x=0,x-y=0],x-1+y+z=0],[x,y,z])
On obtient :
[[1/3,1/3,1/3]]
Remarque
Diffrence entre solve et csolve : En mode complexe solve renvoie le mme
rsultat que csolve (pour csolve que lon soit en mode complexe ou rel cela
importe peu). Ainsi, si on ne veut pas que le rsultat dpende du mode, pour avoir
les solutions complexes il est prfrable dutiliser csolve.
On tape en mode rel :
solve(re(r*exp(-(i)*t))-1,r)
On obtient :
[1/(cos(t))]
car en mode rel linconnue r est considre comme un nombre rel.
On tape en mode complexe :
solve(re(r*exp(-(i)*t))-1,r)
On obtient :

548

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
car en mode complexe, lexpression contient i donc linconnue r est considre
comme un nombre complexe. La solution complexe est :
x+(i)*1/(sin(t))*(- x*cos(t)+1) (la partie relle de r vaut
x qui est un nombre rel quelconque et la partie imaginaire de r est fonction de
x).
On tape en mode complexe ou rel :
csolve(re(r*exp(-(i)*t))-1,r)
On obtient :
[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
car avec csolve, linconnue r est toujours considre comme un nombre complexe.

6.54.7

Rsoudre des quations dans C : resoudre_dans_C csolve


cSolve

csolve ou cSolve ou resoudre_dans_C rsout une quation ou un systme


dquations polynmiales dans C sans avoir besoin dtre en mode complexe.
Rsolution dune quation
cSolve a comme arguments une quation entre deux expressions ou une
expression (=0 est alors sous-entendu), et le nom dune variable (par dfaut
x).
cSolve rsout cette quation dans C sans avoir besoin dtre en mode complexe.
Rsolution dun systme dquations polynmiales
cSolve a comme arguments deux vecteurs : le vecteur des quations du
systme et le vecteur du nom des variables.
cSolve rsout ce systme dquations polynmiales dans C sans avoir besoin dtre en mode complexe.
On tape :
cSolve(x^4-1=3)
On obtient :
[sqrt(2),-(sqrt(2)),(i)*sqrt(2),-((i)*sqrt(2))]
On tape :
cSolve([-x^2+y=2,x^2+y],[x,y])
On obtient :
[[i,1],[-i,1]]
On tape en mode complexe ou rel :
csolve(re(r*exp(-(i)*t))-1,r)
On obtient :
[ x+(i)*1/(sin(t))*(- x*cos(t)+1)]
car avec csolve, linconnue r est toujours considre comme un nombre complexe.)

6.55. LES SYSTMES LINAIRES

6.55

549

Les systmes linaires

Dans tout ce paragraphe, on appelle "matrice augmente" du systme A X =


B la matrice forme par la matrice A borde droite par le vecteur colonne B
("matrice augmente" du systme A X = B=border(A,tran(B))).

6.55.1

Matrice dun systme : syst2mat

syst2mat a comme argument un vecteur contenant un systme dquations linaires et un vecteur contenant les variables.
syst2mat crit le systme AX = B sous la forme dune matrice forme de A
borde droite par B.
On tape :
syst2mat([x+y,x-y-2],[x,y])
On obtient :
[[1,1,0],[1,-1,-2]]
On tape :
syst2mat([x+y=0,x-y=2],[x,y])
On obtient :
[[1,1,0],[1,-1,-2]]
Attention ! ! !
Il faut purger auparavant les variables (ici x et y).

6.55.2

Rduction de Gauss dune matrice : ref

ref permet de rsoudre un systme dquations linaires que lon crit sous forme
matricielle :
A*X=B
Le paramtre de ref est la "matrice augmente" du systme (celle forme par la
matrice A du systme et ayant comme dernier vecteur colonne le second membre
B).
Le rsultat est une matrice [A1,B1] : A1 a des zros au dessous de sa diagonale
et les solutions de :
A1*X=B1
sont les mmes que celles de :
A*X=B
ref peut travailler dans Z/pZ.
Par exemple, soit rsoudre le systme dans R et dans Z/5Z :

3x + y = 2
3x + 2y =
2
On tape pour rsoudre le systme dans R :

550

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


ref([[3,1,-2],[3,2,2]])

On obtient :
[[1,1/3,-2/3],[0,1,4]]
cela signifie donc que :
y = 4 et x = 2 sont solutions du systme. On tape pour rsoudre le systme dans
Z/5Z :
ref([[3,1,-2],[3,2,2]]%5)
On obtient :
[[1 % 5,2 % 5,1 % 5],[0 % 5,1 % 5,-1 % 5]]
cela signifie donc que :
y = 1%5 et x = 3%5 sont solutions du systme.
Remarque
Lorsque le nombre de colonnes est gal au nombre de lignes +1 ref ne divise pas
par le pivot de la derniere colonne, par exemple, on tape :
ref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],[1,0,0,1,-a4]])
On obtient :
[[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],[0,0,0,0,a1-a2+a3-a4]]
Ainsi on peut savoir que si a1-a2+a3-a4 nest pas nul, il ny a pas de solution.

6.55.3

Rduction de Gauss-Jordan : rref gaussjord

rref permet de rsoudre un systme dquations linaires que lon crit sous
forme matricielle (voir aussi 6.33.17) :
A*X=B
rref a un ou deux paramtres.
Si rref na quun paramtre, ce paramtre est la "matrice augmente" du
systme (celle forme par la matrice A du systme et ayant comme dernier
vecteur colonne le second membre B).
Le rsultat est une matrice [A1,B1] : [A1,B1] a des zros de part et
dautre de sa diagonale et des 1 sur sa diagonale et les solutions de :
A1*X=B1
sont les mmes que celles de :
A*X=B
rref peut travailler dans Z/pZ.
Par exemple, soit rsoudre le systme dans R et dans Z/5Z :

3x + y = 2
3x + 2y =
2
On tape pour rsoudre le systme dans R :

6.55. LES SYSTMES LINAIRES

551

rref([[3,1,-2],[3,2,2]])
On obtient :
[[1,0,-2],[0,1,4]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme.
On tape pour rsoudre le systme dans Z/5Z :
rref([[3,1,-2],[3,2,2]]%5)
On obtient :
[[1 % 5,0,-2 % 5],[0,1 % 5,-1 % 5]]
cela signifie donc que :
x = 2%5 et y = 1%5 sont solutions du systme.
Si rref a deux paramtres, le deuxime paramtre est un entier k qui permet de ne faire Gauss-Jordan que sur les k premires colonnes ou est loption
conserver_pivot ou keep_pivot.
On tape :
rref([[3,1,-2,1],[3,2,2,2]],1)
On obtient :
[[3,1,-2,1],[0,1,4,1]]
Loption conserver_pivot ou keep_pivot permet de ne pas diviser
par les pivots, cela pour viter de diviser par des pivots nuls.
par exemple, pour rsoudre le systme dans R et dans Z/2Z :

z1 + z2 = a 1

z2 + z3 = a 2
z + z4 = a 3

3
z4 + z1 = a 4
On tape pour rsoudre le systme dans R :
A:=syst2mat([z1+z2=a1,z2+z3=a2,z3+z4=a3,z4+z1=a4],
[z1,z2,z3,z4])
puis,
rref(A,keep_pivot)
ou bien, on tape directement :
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a4]],keep_pivot)
On obtient :
[[a1-a2+a3-a4,0,0,a1-a2+a3-a4,0],
[0,a1-a2+a3-a4,0,-a1+a2-a3+a4,0],
[0,0,a1-a2+a3-a4,a1-a2+a3-a4,0],
[0,0,0,0,a1-a2+a3-a4]]
Remarque
Lorsque le nombre de colonnes est gal au nombre de lignes +1 rref ne
divise pas par le pivot de la derniere colonne, par exemple, pour rsoudre le
systme :

z1 + z2 = a 1

z2 + z3 = a 2
z
+ z4 = a 3

3
z4 + z1 = a 4
On tape :

552

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


A:=syst2mat([z1+z2=a1,z2+z3=a2,z3+z4=a3,z4+z1=a4],
[z1,z2,z3,z4])
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a4]])
On obtient :
[[1,0,0,1,0],[0,1,0,-1,0],[0,0,1,1,0],
[0,0,0,0,a1-a2+a3-a4]]
Ainsi on peut savoir que si a1-a2+a3-a4 nest pas nul, il ny a pas de
solution. Puis, on tape :
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a4]],3)
On obtient :
[[1,0,0,1,-a1+a2-a3],[0,1,0,-1,-a2+a3],[0,0,1,1,-a3],
[0,0,0,0,1]]
ou encore si on remplace a4 par a1-a2+a3, on tape :
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a1+a2-a3]])
On obtient :
[[1,0,0,1,-a1+a2-a3],[0,1,0,-1,-a2+a3],[0,0,1,1,-a3],
[0,0,0,0,0]]
On peut aussi taper :
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a4]],3,keep_pivot)
On obtient tout de suite :
[[1,0,0,1,-a1+a2-a3],[0,1,0,-1,-a2+a3],[0,0,1,1,-a3],
[0,0,0,0,a1-a2+a3-a4]]
Donc, les solutions lorsque a1-a2+a3-a4=0 sont :
z1=a1-a2+a3-z4, z2=a2-a3+z4, z3=a3-z4, z4=z4.
On tape pour rsoudre le systme dans Z/2Z :
rref([[1,1,0,0,-a1],[0,1,1,0,-a2],[0,0,1,1,-a3],
[1,0,0,1,-a4]]%2,3,keep_pivot)
On obtient :
[[1 % 2,0,0,1 % 2,(1 % 2)*a1+(1 % 2)*a2+(1 % 2)*a3],
[0,1 % 2,0,1 % 2,(1 % 2)*a2+(1 % 2)*a3],[0,0,1 % 2,1
% 2,(1 % 2)*a3],
[0,0,0,0,(1 % 2)*a1+(1 % 2)*a2+(1 % 2)*a3+(1 % 2)*a4]]
Donc lorsque (a1+a2+a3+a4=0%2), les solutions dans Z/2Z sont :
z1=a1+a2+a3+z4%2, z2=a2+a3+z4%2, z3=a3+z4%2, z4=(1 %
2)*z4.
rref permet aussi de rsoudre plusieurs systmes dquations linaires qui
ne diffrent que par leur second membre. On crit alors les second membres
comme les colonnes dune matrice.
On tape :
rref([[3,1,-2,1],[3,2,2,2]])
On obtient :

6.55. LES SYSTMES LINAIRES

553

[[1,0,-2,0],[0,1,4,1]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme

3x + y = 2
3x + 2y =
2
et que x = 0 et y = 1 sont solutions du systme

3x + y = 1
3x + 2y = 2

6.55.4

Rsolution de A*X=B : simult

simult permet de rsoudre un systme dquations linaires (resp plusieurs systmes dquations linaires qui ne diffrent que par leur second membre).
On crit le (rep les) systme(s) sous forme matricielle (voir aussi 6.33.17) :
A*X=b (resp A*X=B)
Les paramtres de simult sont la matrice A du systme et le vecteur colonne (i.e.
une matrice dune colonne) b form par le second membre du systme rsoudre
(resp la matrice B dont les colonnes sont les vecteurs b des second membres des
systmes rsoudre).
Le rsultat est un vecteur colonne solution du systme (resp une matrice dont les
colonnes sont les solutions des diffrents systmes).
Par exemple, soit rsoudre le systme :

3x + y = 2
3x + 2y =
2
On tape :
simult([[3,1],[3,2]],[[-2],[2]])
On obtient :
[[-2],[4]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme.
On tape :
simult([[3,1],[3,2]],[[-2,1],[2,2]])
On obtient :
[[-2,0],[4,1]]
cela signifie donc que :
x = 2 et y = 4 sont solutions du systme

3x + y = 2
3x + 2y =
2
et que x = 0 et y = 1 sont solutions du systme

3x + y = 1
3x + 2y = 2

554

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.55.5

tape de la rduction de Gauss-Jordan dune matrice : pivot

pivot a trois arguments : une matrice de n lignes et p colonnes et deux entiers l


et c vrifiant : 0 l < n et 0 c < p.
pivot(A,l,c) renvoie la matrice obtenue en crant des zros dans la colonne
c de A, avec la mthode de Gauss-Jordan, en utilisant comme pivot llment
A[l,c].
On tape :
pivot([[1,2],[3,4],[5,6]],1,1)
On obtient :
[[-2,0],[3,4],[2,0]]
On tape :
pivot([[1,2],[3,4],[5,6]],0,1)
On obtient :
[[1,2],[2,0],[4,0]]

6.55.6

Rsoudre un systme linaire : linsolve


resoudre_systeme_lineaire

linsolve permet de rsoudre un systme dquations linaires o chaque quation est de la forme Xpr = 0 o Xpr est une expression.
linsolve a comme paramtres la liste des quations et la liste des variables.
linsolve renvoie une liste qui est solution du systme dquations.
linsolve permet de rsoudre aussi un systme dquations linaires dans Z/nZ.
On tape :
linsolve([2*x+y+z=1,x+y+2*z=1,x+2*y+z=4],[x,y,z])
On obtient :
[1/-2,5/2,1/-2]
donc

1
5
1
x = ,y = ,z =
2
2
2

sont solutions du systme :

2x + y + z = 1
x + y + 2z = 1

x + 2y + z = 4
On tape :
linsolve([2*x+y+z-1,x+y+2*z-1,x+2*y+z-4]%3,[x,y,z])
On obtient :
[1 % 3,1 % 3,1 % 3]

6.55. LES SYSTMES LINAIRES

555

donc
x = 1%3, y = 1%3, z = 1%3
sont solutions du systme :

(2x + y + z 1) %3 = 0
(x + y + 2z 1) %3 = 0

(x + 2y + z 4) %3 = 0

6.55.7

Norme minimale dun systme linaire : LSQ

LSQ a pour arguments une matrice A et un vecteur (rep une matrice) B qui reprsentent le (resp les) systme(s) linaire(s) A*X=B si B est un vecteur (resp une
matrice).
LSQ(A,B) calcule la norme minimale selon la mthode des moindres carrs du
systme linaire A*X=B sur- ou sous-dtermin cest pour estimer la solution dun
systme linaire A*X=B (si B est un vecteur) ou des systmes linaires A*X=B (si
B est une matrice) pour :
un systme sur-dtermin (on a plus de lignes que de colonnes)
si B est un vecteur : on cherche X de norme euclidienne minimum qui
minimise la norme euclidienne de (AX-B).
si B est une matrice : on cherche Xj de norme euclidienne minimum parmi
les solutions qui minimise la norme euclidienne de (AXj-Bj)
un systme sous determin (en gnral on a plus de colonnes que de lignes)
On cherche X qui minimise la norme
qP de Frobenius de (AX-B) (la norme de
2
Frobenius dune matrice M est
j,k |M (j, k)| ).
un systme exactement dtermin (le nombre de colonnes est gal au nombre
de lignes et A est inversible).
On utilise inv(A)*B pour avoir X qui produit des rsultats faux en calcul
approch si la matrice est mal conditionne (quations indpendantes proche
lune de lautre)
On tape :
LSQ([[1,2],[3,4]],[5,11])
On obtient :
[[1],[2]]
En effet si X:=[[1],[2]], on a [[1,2],[3,4]]*X=[[5],[11]] On tape :
LSQ([[1,2],[3,4]],[7,9])
On obtient :
[[-5],[6]]
En effet si X:=[[-5],[6]], on a [[1,2],[3,4]]*X=[[7],[9]] On tape :
LSQ([[1,2],[3,4]],[[5,7],[11,9]])
On obtient :

556

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


[[1,-5],[2,6]]

En effet si X:=[[1,-5],[2,6]], on a [[1,2],[3,4]]*X=[[5,7],[11,9]]


On tape :
LSQ([[1,2],[3,4],[3,6]],[5,11,13])
On obtient :
[[11/5],[11/10]]
En effet puisquelinsolve([[1,2],[3,4],[3,6]]*[x,y]-[5,11,13],[x,y])
renvoie [], on cherche la norme minimum de C dfinit par :
C:= [[1,2],[3,4],[3,6]]*[x,y]-[5,11,13].
On a :
norm(C) renvoie :
sqrt(19*x^2+64*x*y-154*x+56*y^2-264*y+315)
gauss(19*x^2+64*x*y-154*x*z+56*y^2-264*y*z+315*z^2,[x,y,z])
renvoie :
((19*x+32*y-77*z)^2)/19+((40/19*y+(-44)/19*z)^2)/(40/19)+(2*z^2)/5
linsolve([19*x+32*y-77=0,40/19*y+(-44)/19=0],[x,y]) renvoie :
[11/5,11/10]
On tape :
LSQ([[1,2],[3,4],[3,6]],[[5,-1],[11,-1],[13,-3]]
On obtient :
[[11/5,1],[11/10,-1]]
En effet linsolve([[1,2],[3,4],[3,6]]*[x,y]-[-1,-1,-3],[x,y])
renvoie : [1,-1]
On tape :
LSQ([[3,4]],[12])
On obtient :
[[36/25],[48/25]]
En effet si d:=droite(3x+4y-12) et si M:=projection(d,point(0))
alors coordonnees(M) renvoie :
[36/25,48/25]

6.55.8

Rsolution dune rcurrence linaire : reverse_rsolve

reverse_rsolve a comme paramtre un vecteur v = [v0 ...v2n1 ] de longueur


paire gale 2n.
reverse_rsolve permet de rsoudre une rcurrence linaire de degr infrieur
n
xn vn+k + ... + x0 vk = 0
o les xj sont les n + 1 inconnues.
reverse_rsolve renvoie la liste x = [xn , ...x1 , x0 ] des coefficients xj (si xn 6=
0 alors xn = 1).

6.56. LES QUATIONS DIFFRENTIELLES

557

En dautres termes, reverse_rsolve rsout le systme dquations linaires


de n quations n + 1 inconnues :
xn vn + ... + x0 v0 = 0
...
xn vn+k + ... + x0 vk = 0
...
xn v2n1 + ... + x0 vn1 = 0
La matrice A du systme rsoudre a n lignes et n + 1 colonnes :
A = [[v0 , v1 ...vn ], [v1 , v2 , ...vn1 ], ..., [vn1 , vn ...v2n1 ]]
reverse_rsolve renvoie la liste x = [xn , ...x1 , x0 ] des coefficients xj (si xn 6=
0 alors xn = 1) et x est la solution dy systme A revlist(x).
Exemples
Trouver une suite vrifiant la rcurrence linaire de degr au plus 2 et dont
les premiers termes sont 1, -1, 3, 3.
On tape :
reverse_rsolve([1,-1,3,3])
On obtient :
[1,-3,-6]
Sans reverse_rsolve, on aurait du crire la matrice du systme rsoudre :
[[1, 1, 3], [1, 3, 3]]
puis utiliser la commande rref :
rref([[1,-1,3],[-1,3,3]])
de rponse [[1,0,6],[0,1,3]]
donc puisque x2 = 1, on a x0 = 6 et x1 = 3
et on a bien :
x0 x1 + 3x2 = 0 et x0 + 3x1 + 3x2 = 0
Trouver une suite vrifiant la rcurrence linaire de degr au plus 3 et dont
les premiers termes sont 1, -1, 3, 3,-1, 1.
On tape :
reverse_rsolve([1,-1,3,3,-1,1])
On obtient :
[1,(-1)/2,1/2,-1]
La matrice du systeme rsoudre est donc :
[[1,-1,3,3],[-1,3,3,-1],[3,3,-1,1]] On a si on utilise rref :
rref([[1,-1,3,3],[-1,3,3,-1],[3,3,-1,1]])
de rponse [1,0,0,1],[0,1,0,1/-2],[0,0,1,1/2]] donc puisque
x3 = 1, on a x0 = 1, x1 = 1/2 et x2 = 1/2

6.56

Les quations diffrentielles

Pour le calcul numrique de solutions dquations diffrentielles on se reportera


odesolve et pour la reprsentation graphique de solutions dquations diffrentielles on se reportera plotfield, plotode, interactive_plotode.

558

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

6.56.1

quations diffrentielles : desolve deSolve dsolve

desolve (ou deSolve) permet de rsoudre :


les quations diffrentielles linaires coefficients constants du premier ou
du deuxime ordre,
les quations diffrentielles linaires du premier ordre,
les quations diffrentielles du premier ordre incomplte en y,
les quations diffrentielles du premier ordre incomplte en x,
les quations diffrentielles du premier ordre variables spares,
les quations diffrentielles du premier ordre homognes (y 0 = F (y/x)),
les quations diffrentielles du premier ordre ayant un facteur intgrant,
les quations diffrentielles de Bernoulli (a(x)y 0 + b(x)y = c(x)y n ),
les quations diffrentielles de Clairaut (y = x y 0 + f (y 0 )).
les systmes diffrentiels linaires coefficients constants ([y 0 = [[1, 2], [2, 1]]
y + [x, x + 1], y(0) = [1, 2]])).
Les paramtres de desolve :
quand lquation diffrentielle est du premier ordre, que la variable est x et
que linconnue est y, les paramtres sont :
lquation diffrentielle, par exemple :
desolve(y+x*y=0)
ou
lquation diffrentielle suivie de la liste [x0 , y0 ] qui donne comme condition
initiale y(x0 ) = y0 , par exemple
desolve(y+x*y=0,[0,1])
ou
la liste forme par lquation diffrentielle et de la relation y(x0 ) = y0
qui donne la condition initiale et comme 2nd argument linconnue y, par
exemple
desolve([y+x*y=0,y(0)=1],y)
desolve([y+2*y+y,y(0)=1,y(0)=0],y])
quand la variable est x et linconnue nest pas y :
les paramtres sont : lquation diffrentielle (ou la liste forme par lquation diffrentielle et les conditions initiales) et linconnue y (ou z ou ..), par
exemple
desolve(z+x*z=0,z)
desolve([y+x*y=0,y(0)=1]);
desolve([y+x*y=0,y(0)=1],y)
desolve([z+x*z=0,z(0)=1],z)
desolve([y+2*y+y,y(0)=1,y(0)=0]);
desolve([y+2*y+y,y(0)=1,y(0)=0],y)
desolve([z+2*z+z,z(0)=1,z(0)=0],z)
Dans lquation diffrentielle y scrit y et y 0 scrit y 0 et y scrit y 00 car on
drive par rapport la variable x. Par exemple : desolve(y+2*y+y,y)
et desolve([y+2*y+y,y(0)=1,y(0)=0],y).
quand la variable nest pas x (par exemple t.) et linconnue est ou nest pas
y:
les paramtres sont : lquation diffrentielle (ou la liste forme par lqua-

6.56. LES QUATIONS DIFFRENTIELLES

559

tion diffrentielle et les conditions initiales), la variable t et linconnue z ou


linconnue z(t) (la variable est alors t et linconnue est y).
Dans lquation diffrentielle, y scrit y et y 0 scrit y 0 et y scrit y 00 car
on drive par rapport la variable que lon a spcifie ; on peut aussi crire
y sous la forme y(t) et y0 sous la forme diff(y(t),t), y 00 sous la forme
diff(y(t),t$2) si la la variable que lon a spcifie est t. Mais lcriture est moins conviviale !
Par exemple :
desolve(diff(y(t),t$2)+2*diff(y(t),t)+y(t),y(t)) ; ou
desolve(diff(y(t),t$2)+2*diff(y(t),t)+y(t),t,y) ; ou
desolve(y+2y+y,t,y) ; ou
desolve(y+2y+y,y(t))
et
desolve([y+2*y+y,y(0)=1,y(0)=0],t,y) ou
desolve([y+2*y+y,y(0)=1,y(0)=0],y(t)) ou
desolve([z+2*z+z,z(0)=1,z(0)=0],u,z) ou
desolve([z+2*z+z,z(0)=1,z(0)=0],z(u)).
Lorsquil ny a pas de conditions initiales (ou une seule condition initiale
pour une quation du second ordre), desolve renvoie la solution crite
avec des constantes dintgration : c_0, c_1 o y(0)=c_0 et y(0)=c_1
ou renvoie une liste des solutions.
quand on a un systme diffrentiel linaire coefficients constants les paramtres sont :
si la variable est x et que linconnue est y, les paramtres sont le systme
diffrentiel donn sous forme matricielle, par exemple :
desolve(y=[[1,2],[2,1]]*y+[x,x+1])
ou
la liste forme par le systme diffrentiel donn sous forme matricielle et
de la relation qui donne la condition initiale (par y(x0 ) = [a0 , a1 ]).
par exemple :
desolve([y=[[1,2],[2,1]]*y+[x,x+1],y(0)=[1,2]])
si la variable nest pas x (par exemple t) es paramtres sont le systme
diffrentiel, la variable t et linconnue z ou linconnue z(t) par exemple :
desolve(z=[[1,2],[2,1]]*z+[t,t+1],t,z) ou
desolve(z=[[1,2],[2,1]]*z+[t,t+1],z(t))
et
desolve([z=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)
ou
desolve([z=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))
Exemples
Exemples de rsolution dune quation diffrentielle linaire coefficients
constants du deuxime ordre.
1. Rsoudre :
y 00 + y = cos(x)

560

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


On tape (en tapant deux fois prime pour y) :
desolve(y+y=cos(x),y)
ou encore :
desolve(diff(diff(y))+y=cos(x),y)
On trouve :
c_0*cos(x)+(x+2*c_1)*sin(x)/2
c_0, c_1 sont les constantes dintgration : y(0)=c_0 et y(0)=c_1.
ou bien si la variable nest pas x mais t, on tape :
desolve(derive(derive(y(t),t),t)+y(t)=cos(t),t,y)
ou encore
desolve(derive(derive(y(t),t),t)+y(t)=cos(t),[t,y])
On trouve alors :
c_0*cos(t)+(t+2*c_1)/2*sin(t)
c_0, c_1 sont les constantes dintgration : y(0)=c_0 et y(0)=c_1.
2. Rsoudre :
y 00 + y = cos(x) y(0) = 1
On crit, si veut les solutions vrifiant y(0) = 1 :
desolve([y+y=cos(x),y(0)=1],y)
On obtient
[cos(x)+(x+2*c_1)/2*sin(x)]
les composantes de ce vecteur sont solutions (ici on a une seule composante car on obtient une seule solution dpendant de la constante
c_1).
3. Rsoudre :
y 00 + y = cos(x) (y(0))2 = 1
On veut les solutions vrifiant (y(0))2 = 1, on tape alors :
desolve([y+y=cos(x),y(0)^2=1],y)
On obtient
[-cos(x)+(x+2*c_1)/2*sin(x),
cos(x)+(x+2*c_1)/2*sin(x)]
chaque composantes de cette liste est une solution, on a donc deux
solutions dpendant de la constante c_1 qui correspondent y(0) = 1
et y(0) = 1.
4. Rsoudre :
y 00 + y = cos(x) (y(0))2 = 1 y 0 (0) = 1
On veut les solutions vrifiant (y(0))2 = 1 et y 0 (0) = 1, on tape alors :

6.56. LES QUATIONS DIFFRENTIELLES

561

desolve([y+y=cos(x),y(0)^2=1,y(0)=1],y)
On obtient :
[-cos(x)+(x+2)/2*sin(x),cos(x)+(x+2)/2*sin(x)]
chaque composante de cette liste est une solution.On a donc deux solutions.
5. Rsoudre :
y 00 + 2y 0 + y = 0
On tape alors :
desolve(y+2*y+y=0,y)
On obtient les solutions dpendant de 2 constantes dintgration c_0
et c_1 :
(x*c_0+x*c_1+c_0)*exp(-x)
6. Rsoudre :
y 00 6y 0 + 9y = xe3x
On tape alors :
desolve(y-6*y+9*y=x*exp(3*x),y)
On obtient :
(x^3+(-(18*x))*c_0+6*x*c_1+6*c_0)*1/6*exp(3*x)
la solution dpend de 2 constantes dintgration c_0 et c_1.
Exemples de rsolution dune quation diffrentielle linaire du premier
ordre.
1. Rsoudre :
xy 0 + y 3x2 = 0
On tape alors :
desolve(x*y+y-3*x^2,y)
Ou on tape :
desolve(x*y+y-3*x^2)
On obtient :
(c_0+x^3)/x
2. Rsoudre :
y 0 + x y = 0, y(0) = 1
On tape alors :
desolve([y+x*y=0, 0,1])
Ou on tape :
desolve([y+x*y=0, y(0)=1],y)
Ou on tape :
desolve((y+x*y=0) && (y(0)=1),[x,y])

562

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Ou on tape :
desolve((y+x*y=0) && (y(0)=1),x,y)
Ou on tape :
desolve((y+x*y=0) && (y(0)=1),y)
On obtient :
[exp(-x^2)/2)]
3. Rsoudre :
x(x2 1)y 0 + 2y = 0
On tape alors :
desolve(x*(x^2-1)*y+2*y=0)
Ou on tape :
desolve(x*(x^2-1)*y+2*y=0,y)
On obtient :
(c_0)/((x^2-1)/(x^2))
4. Rsoudre :
x(x2 1)y 0 + 2y = x2
On tape alors :
desolve(x*(x^2-1)*y+2*y=x^2)
Ou on tape :
desolve(x*(x^2-1)*y+2*y=x^2,y)
On obtient :
(c_0*x^2+x^2*ln(x))/(x^2-1)
Si la variable est t et non x, par exemple :
t(t2 1)y 0 (t) + 2y(t) = t2
On tape :
desolve(t*(t^2-1)*diff(y(t),t)+2*y(t)=(t^2),y(t))
On obtient :
(c_0*t^2+t^2*ln(t))/(t^2-1)
5. Rsoudre :
x(x2 1)y 0 + 2y = x2 , y(2) = 0
On tape alors :
desolve(x*(x^2-1)*y+2*y=x^2,[2,0])
Ou on tape :
desolve([x*(x^2-1)*y+2*y=x^2,y(2)=0],y)

6.56. LES QUATIONS DIFFRENTIELLES

563

On obtient :
[(-ln(2)*x^2+x^2*ln(x))/(x^2-1)]
6. Rsoudre :
p
p
1 + x2 y 0 x y = 1 + x2
On tape alors :
desolve(y*sqrt(1+x^2)-x-y-sqrt(1+x^2))
Ou on tape :
desolve(y*sqrt(1+x^2)-x-y-sqrt(1+x^2),y)
On obtient :
(-c_0+ln(sqrt(x^2+1)-x))/(x-sqrt(x^2+1))
Exemples de rsolution dune quation diffrentielle variables spares.
1. Rsoudre :

y0 = 2 y

On tape alors :
desolve(y=2*sqrt(y))
Ou on tape :
desolve(y=2*sqrt(y),y)
On obtient :
[x^2+-2*x*c_0+c_0^2]
2. Rsoudre :
xy 0 ln(x) y(3 ln(x) + 1) = 0
On tape alors :
desolve(x*y*ln(x)-(3*ln(x)+1)*y)
Ou on tape :
desolve(x*y*ln(x)-(3*ln(x)+1)*y,y)
On obtient :
c_0*x^3*ln(x)
Exemples de rsolution dune quation diffrentielle de Bernoulli du premier ordre, de type a(x)y 0 + b(x)y = c(x)y n avec n=constante relle.
Ces quations se rsolvent en divisant par y n , car on se ramne une quation linaire en u = 1/y n1 .
1. Rsoudre :
xy 0 + 2y + xy 2 = 0
On tape alors :
desolve(x*y+2*y+x*y^2)
Ou on tape :

564

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


desolve(x*y+2*y+x*y^2,y)
On obtient :
[(-1/x+c_0))*x^2]
2. Rsoudre :
xy 0 2y = xy 3
On tape alors :
desolve(x*y-2*y-x*y^3)
Ou on tape :
desolve(x*y-2*y-x*y^3,y)
On obtient :
[((-2*x^5/5+c_0)/x^4)^(1/-2),
-((-2*x^5/5+c_0)/x^4)(1/-2)]
3. Rsoudre :
x2 y 0 2y = xe( 4/x)y 3
On tape alors :
desolve(x^2*y-2*y-x*exp(4/x)*y^3,y)
On obtient :
[((-2*ln(x)+c_0)*exp(4*/x))^(1/-2),
-((-2*ln(x)+c_0)*exp(4/x))^(1/-2))]
Exemples de rsolution dune quation diffrentielle homogne du premier
ordre qui se rsout en posant y = t x.
1. Rsoudre :
3x3 y 0 = y(3x2 y 2 )
On tape alors :
desolve(3*x^3*y=((3*x^2-y^2)*y))
Ou on tape :
desolve(3*x^3*y=((3*x^2-y^2)*y),y)
On obtient :
[0,pnt[c_0*exp((3/(2* t^2)),
t*c_0*exp((3/(2* t^2))]]
donc les solutions sont y = 0 et la famille de courbes dquation paramtrique x = c0 exp(3/(2t2 )), y = t c0 exp(3/(2t2 )) (le paramtre
est not t dans la rponse).
2. Rsoudre :
xy 0 = y +

p
x2 + y 2

On tape alors :
desolve(x*y=y+sqrt(x^2+y^2))

6.56. LES QUATIONS DIFFRENTIELLES

565

Ou on tape :
desolve(x*y=y+sqrt(x^2+y^2),y)
On obtient :
[(-i)*x,(i)*x,pnt[c_0/(sqrt( t^2+1)- t),(
t*c_0)/(sqrt( t^2+1)- t)]]
donc les solutions sont :
y = ix, y = ix
et la famille de courbes dquation paramtrique
p
p
x = c0 /( t2 + 1 t), y = t c0 /( t2 + 1 t)
(le paramtre est not t dans la rponse.
Exemples de rsolution dune quation diffrentielle du premier ordre ayant
un facteur intgrant.
1. Rsoudre :
yy 0 + x
On tape alors :
desolve(y*y+x)
Ou on tape :
desolve(y*y+x,y)
On obtient :
[sqrt(-2*c_0-x^2),-(sqrt(-2*c_0-x^2))]
dans cet exemple, xdx + ydy est une diffrentielle totale, et le facteur
intgrant est 1.
2. Rsoudre :
2xyy 0 + x2 y 2 + a2 = 0
On tape alors :
desolve(2*x*y*y+x^2-y^2+a^2)
Ou on tape :
desolve(2*x*y*y+x^2-y^2+a^2,y)
On obtient :
[sqrt(a^2-x^2-c_1*x),-(sqrt(a^2-x^2-c_1*x))]
dans cet exemple le facteur intgrant est 1/x2 .
Exemple de rsolution dune quation diffrentielle du premier ordre incomplte en x.
Rsoudre :
(y + y 0 )4 + y 0 + 3y = 0

566

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Ce genre dquations nest pas rsoluble directement par Xcas, nous allons
expliquer ce quil faut faire pour laider rsoudre de telles quations. On
doit trouver pour rsoudre F (y, y 0 ) = 0, une reprsentation paramtrique
de F (u, v) = 0, par exemple, u = f (t), v = g(t) puis, poser y = f (t) et
dy/dx = y 0 = g(t).
On a donc dy/dt = f 0 (t) = y 0 dx/dt = g(t) dx/dt.
On trouve alors, comme solution la courbe dquation paramtrique x(t), y(t) =
f (t), o x(t) est obtenu en rsolvant lquation diffrentielle g(t)dx =
f 0 (t)dt.
Ici on peut poser y + y 0 = t ce qui donne :
y = t 8 t4 et y 0 = dy/dx = 3 t + 8 t4 et donc dy/dt = 1 32 t3
donc
(3 t + 8 t4 ) dx = (1 32 t3 )dt.
On tape alors :
desolve((3*t+8*t^4)*diff(x(t),t)=(-1-32*t^3),x(t))
On obtient :
(9*c_0 -11*ln(8*t^3+3)-ln(t^3))/9
on a donc comme solution la courbe dquation :
x(t) = 11 1/9 ln(8 t3 + 3) + 1/ 9 ln(t3 ) + c0 ,

y(t) = t 8 t4

Exemples de rsolution dune quation diffrentielle de Clairaut du premier


ordre, de type y = x y 0 + f (y 0 ) avec f continument drivable ; cest
un cas particulier de lquation diffrentielle de Lagrange, en hommage au

mathmaticien
Alexis Clairaut.
On pose dy/dx = y 0 = t et on remplace lquation diffrentielle y =
x y 0 + f (y 0 ) par le systme paramtrique :
y = x t + f (t) et dy = tdx
ce systme est quivalent au systme obtenu en liminant dy :
y = x t + f (t) et (x + f 0 (t))dt = 0
car dy = tdx + xdt + f 0 (t)dt = tdx
On a alors deux types de solutions :
celles qui vrifient y = x t + f (t) et dt = 0
donc t = m = cste et y = mx + f (m)
y = mx + f (m) est lquation des droites Dm . Ces droites sont appeles
les solutions gnrales de lquation.
celles qui vrifient y = x t + f (t) et x + f 0 (t) = 0
cest dire la courbe dquation paramtrique :
x = f 0 (t) et y = tf 0 (t) + f (t) cette solution est appele solution
singulire.
La courbe reprsentative de cette solution est lenveloppe de la famille des
droites Dm .
En effet si y = mx + f (m), lenveloppe de ces droites est lensemble des
points de coordonnes x, y qui vrifient :
y = mx + f (m) et 0 = x + f 0 (m) lorsque m R
qui sont les 2 quations qui definissent la solution singulire/
Des solutions hybrides peuvent tre obtenues par raccordement de ces
diffrentes courbes solutions, dautant plus simplement quil sagit dune

6.56. LES QUATIONS DIFFRENTIELLES

567

famille de droites et de sa courbe enveloppe.


Exemple
1. Rsoudre :
xy 0 + y 03 y) = 0
On tape alors :
desolve(x*y+y^3-y,y)
On obtient :
[c_0*x+c_0^3,[-3* t^2,- t*3* t^2+
t^3]]
On tape dans un niveau de gomtrie 2d :
supposons(m=[-0.7,-5,5,0.1]);
droite(y=m*x+m^3);
plotparam(-3*t^2+i*(-2*t^3))
On obtient :

en faisant bouger le curseur m on voit que les droites enveloppe la


courbe dquation paramtrique x = 3 t2 , y = 2 t3
2. Rsoudre :
y xy 0 =

p
a2 + b2 y 02 = 0

On tape alors :
desolve(y-x*y-sqrt(a^2+b^2*y^2),y)
On obtient :
[c_0*x+sqrt(a^2+b^2*c_0^2), [-b^2*2*
t*(sqrt(a^2+b^2* t^2))^-1/2,- t*b^2*2*
t*(sqrt(a^2+b^2* t^2))^-1/2+sqrt(a^2+b^2*
t^2)]]

568

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


Rsoudre le systme diffrentiel : u0 (t) = u(t) + 2v(t) + t
v 0 (t) = 2u(t) + v(t) + t + 1
Puis trouver les solutions de ce sytme qui vrifie u(0 = 1, v(0) = 2 On
tape :
desolve(y=[[1,2],[2,1]]*y+[x,x+1])
On obtient
[[(9*exp(-x)+5*exp(3*x)+9*c_0*exp(-x)+9*c_0*exp(3*x)9*c_1*exp(-x)+9*c_1*exp(3*x)-6*x-14)/18,
(-9*exp(-x)+5*exp(3*x)-9*c_0*exp(-x)+
9*c_0*exp(3*x)+9*c_1*exp(-x)+9*c_1*exp(3*x)-6*x+4)/18]]
cela donne les expressions de u(x) et v(x).
Ou on tape :
desolve(y=[[1,2],[2,1]]*y+[t,t+1],t,y)
ou on tape :
desolve(z=[[1,2],[2,1]]*z+[t,t+1],t,z)
ou on tape :
desolve(z=[[1,2],[2,1]]*z+[t,t+1],z(t))
On obtient
[[(9*exp(-t)+5*exp(3*t)+9*c_0*exp(-t)+9*c_0*exp(3*t)9*c_1*exp(-t)+9*c_1*exp(3*t)-6*t-14)/18,
(-9*exp(-t)+5*exp(3*t)-9*c_0*exp(-t)+
9*c_0*exp(3*t)+9*c_1*exp(-t)+9*c_1*exp(3*t)-6*t+4)/18]]
cela donne les expressions de u(t) et v(t).
Puis, on tape :
desolve([y=[[1,2],[2,1]]*y+[x,x+1],y(0)=[1,2]])
On obtient
[[(16*exp(3*x)-3*x-7)/9,(16*exp(3*x)-3*x+2)/9]]
cela donne les expressions de u(x) et v(x) tels que u(0) = 1 et v(0) = 2.
Ou on tape :
desolve([z=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)
ou on tape :
desolve([z=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))
On obtient
[[(16*exp(3*t)-3*t-7)/9,(16*exp(3*t)-3*t+2)/9]]
cela donne les expressions de u(t) et v(t) tels que u(0) = 1 et v(0) = 2.

6.56.2

Transforme de Laplace et transforme de Laplace inverse :


laplace ilaplace invlaplace

laplace et ilaplace (ou invlaplace) ont 1, 2 ou 3 arguments :


lexpression que lon transforme et ventuellement le nom de 2 variables.
Lexpression est une expression de la variable courante (ici x) ou lexpression que
lon transforme est une expression de la variable donne comme deuxime argument.

6.56. LES QUATIONS DIFFRENTIELLES

569

laplace est la transforme de Laplace de lexpression donne comme argument


et ilaplace (ou invlaplace) est la transforme de Laplace inverse de lexpression donne comme argument. Le rsultat de laplace et ilaplace (ou
invlaplace) est une expression de variable le troisime argument ou par dfaut
le second argument ou par dfaut x.
Attention le second argument est le nom de la variable du premier argument et est
ausi le nom de la variable du rsultat lorsquil ny a pas de 3-ime argument, par
exemple :laplace(sin(x),t) renvoie sin(x)/t
On utilise la transforme de Laplace (laplace) et la transforme de Laplace
inverse (ilaplace ou invlaplace) pour rsoudre des quations diffrentielles
linaires coefficients constants, par exemple :
y00 + p.y0 + q.y = f (x)
y(0) = a y0(0) = b
En notant L la transforme de Laplace, on a les relations suivantes :
Z +
L(y)(x) =
ex.u y(u)du
0 Z
1
L1 (g)(x) =
ez.x g(z)dz
2i C
o C est une courbe ferme contenant les ples de g.
laplace :
On tape :
laplace(sin(x))
ici on ne prcise pas la variable, alors lexpression que lon transforme Lexpression
(ici sin(x)) est une expression de la variable courante (ici x) et la transforme sera
aussi une fonction de la variable x.
On obtient :
1/(x^2+1)
Ou on tape :
laplace(sin(t),t)
ici on prcise le nom de la variable de la fonction que lon transforme (ici t) et ce
nom de variable sera utilis pour la transforme de Laplace.
On obtient :
1/(t^2+1)
Ou on tape :
laplace(sin(t),t,s)
ici on prcise le nom de la variable de la fonction que lon transforme (ici t) et le
nom de la variable que lon dsire avoir pour la transforme de Laplace (ici s).
On obtient :

570

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


1/(s^2+1)

ilaplace ou invlaplace :
On tape :
ilaplace(1/(x^2+1))
On obtient :
sin(x)
On tape :
ilaplace(1/(t^2+1),t)
On obtient :
sin(t)
On tape :
ilaplace(1/(t^2+1),t,x)
On obtient :
sin(x)
On utilise les proprits suivantes :
L(y 0 )(x) = y(0) + x.L(y)(x)
L(y 00 )(x) = y 0 (0) + x.L(y 0 )(x)
= y 0 (0) x.y(0) + x2 .L(y)(x)
On a donc si y00(x) + p.y0(x) + q.y(x) = f (x) :
L(f )(x) = L(y 00 + p.y 0 + q.y)(x)
= y 0 (0) x.y(0) + x2 .L(y)(x) p.y(0) + p.x.L(y)(x)) + q.L(y)(x)
= (x2 + p.x + q).L(y)(x) y 0 (0) (x + p).y(0)
soit, si a = y(0) et b = y 0 (0) :
Laplace(f )(x) = (x2 + p.x + q).Laplace(y)(x) (x + p).a b
La solution est alors :
y(x) = L1 ((L(f )(x) + (x + p).a + b)/(x2 + p.x + q))
Exemple :
Rsoudre :
y00 6.y0 + 9.y = x.e3.x ,
Ici, p = 6, q = 9.
On tape :

y(0) = c_0,

y0(0) = c_1

6.57. TRANSFORME EN Z ET TRANSFORME EN Z INVERSE

571

laplace(x*exp(3*x))
On obtient :
1/(x^ 2-6*x+9)
On tape :
ilaplace((1/(x^2-6*x+9)+(x-6)*c_0+c_1)/(x^2-6*x+9))
On obtient
(216*x^3-3888*x*c_0+1296*x*c_1+1296*c_0)*exp(3*x)/1296
aprs simplification et factorisation (commande factor) la solution y scrit :
(-18*c_0*x+6*c_0+x^3+6*x*c_1)*exp(3*x)/6
On peut bien sr taper directement :
desolve(y-6*y+9*y=x*exp(3*x),y)
On obtient bien :
exp(3*x)*(-18*c_0*x+6*c_0+x^3+6*x*c_1)/6

6.57

Transforme en z et transforme en z inverse

6.57.1

Transforme en z dune suite, la fonction ztrans : ztrans

ztrans a un ou trois arguments :


une suite donne par son terme gnral ax : la variable utilise pour dfinir
le terme gnral est x et x sera aussi le nom de la variable utilise dans la
fonction renvoye par ztrans
une suite donne par son terme gnral an , le nom de la variable utilise
pour dfinir ce terme gnral (ici n) et le nom de la variable utilise dans la
fonction renvoye par ztrans (par exemple z).
ztrans calcule la transforme en z de la suite donne en argument.
On a par dfinition :
si f (x) = ztrans(ax ) on a
inf
X
an
f (x) =
xn
n=0

si f (z) = ztrans(an , n, z) on a
f (z) =

inf
X
an
n=0

zn

On tape :
ztrans(1)
On obtient :

572

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL


x/(x-1)

OnP
a en effet :
1
= inf
n=0 xn =
On tape :

1
1 x1

x
x1

ztrans(1,n,z)
On obtient :
z/(z-1)
On a en effet :
1 + z1 + z12 + z13 +

1
z4

+ .. =

Pinf

1
n=0 z n

On tape :

1
1 z1

z
(z1)

ztrans(x)
On obtient :
x/(x^2-2*x+1)
On tape :
ztrans(n,n,z)
On obtient :
z/(z^2-2*z+1)
Pinf 1
1
z1 =
zn
Pn=1
inf
n
1
1
0
= ( (z1) ) = n=1 z n1
(z1)2
P
inf n
z
Donc (z1)
2 =
n=1 z n

On a en effet :

6.57.2

Transforme en z inverse dune fraction rationnelle, la fonction


invztrans : invztrans

invztrans a un ou trois arguments :


une fraction rationnelle donne par son expression en utilisant la variable x
et x sera aussi le nom de la variable utilise dans la fonction renvoye par,
ztrans,
trois arguments une fraction rationnelle donne par son expression, le nom
de la variable utilise pour dfinir cette expression (paz exemple la variable
z), et le nom de la variable utilise dans la fonction renvoye par invztrans
(par exemple n).
invztrans calcule la transforme en z inverse de la fraction rationnelle donne
en argument.
On a par dfinition :
si invztrans(Rx ) = ax on a
inf
X
an
Rx =
xn
n=0

6.58. AUTRES FONCTIONS

573

si an = invztrans(Rz , z, n) on a
Rz =

inf
X
an
n=0

zn

On tape :
invztrans(x/(x-1))
On obtient :
1
On tape :
invztrans(z/(z-1),z,n)
On obtient :
1
On a en effet :

z
(z1)

1
1 z1

=1+

1
z

1
z2

1
z3

1
z4

+ .. =

Pinf

1
n=0 z n

On tape :

invztrans(x/(x-1)^2)
On obtient :
x
On tape :
invztrans(z/(z-1)^2,z,n)
On obtient :
n

6.58

Autres fonctions

6.58.1

Ngliger les petites valeurs : epsilon2zero

epsilon2zero a comme paramtre une expression de x.


epsilon2zero renvoie lexpression o les valeurs plus petites que epsilon
ont t remplaces par zro dans lexpression non value.
La valeur de epsilon peut tre chang dans la configuration du cas (par dfaut
epsilon=1e-10).
On tape :
epsilon2zero(1e-13+x)
On obtient (avec epsilon=1e-10) :
0+x
On tape :

574

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

epsilon2zero((1e-13+x)*100000)
On obtient (avec epsilon=1e-10) :
(0+x)*100000
On tape :
epsilon2zero(0.001+x)
On obtient (avec epsilon=0.0001) :
0.001+x

6.58.2

Liste des variables : lname indets

lname (ou indets) a comme paramtre une expression.


lname (ou indets) renvoie un vecteur de composantes le nom des variables
symboliques utilises dans cette expression.
On tape :
lname(x*y*sin(x))
On obtient :
[x,y]
On tape :
a:=2;assume(b>0);assume(c=3);
lname(a*x^2+b*x+c)
On obtient :
[x,b,c]

6.58.3

Liste des variables et des expressions : lvar

lvar a comme paramtre une expression.


lvar renvoie un vecteur de composantes les noms de variables et des expressions
dont cette expression dpend rationnellement.
On tape :
lvar(x*y*sin(x)^2+ln(x)*cos(y))
On obtient :
[x,y,sin(x)]
On tape :
lvar(x*y*sin(x)^2)
On obtient :
[x,y,sin(x),ln(x),cos(y)]
On tape :
lvar(y+x*sqrt(z)+y*sin(x))
On obtient :
[y,x,sqrt(z),sin(x)]

6.58. AUTRES FONCTIONS

6.58.4

575

Liste des variables et des expressions algbriques : algvar

algvar a comme paramtre une expression.


algvar renvoie un vecteur de composantes le nom des variables symboliques, par
ordre dextension algebriques, utilises dans cette expression.
On tape :
algvar(y+x*sqrt(z))
On obtient :
[[y,x],[z]]
On tape :
algvar(y*sqrt(x)*sqrt(z))
On obtient :
[[y],[z],[x]]
On tape :
algvar(y*sqrt(x*z))
On obtient :
[[y],[x,z]]
On tape :
algvar(y+x*sqrt(z)+y*sin(x))
On obtient :
[[x,y,sin(x)],[z]]

6.58.5

Test de la prsence dune variable dans une expression : has

has a comme paramtre une expression et le nom dune variable.


has renvoie 1, ou 0, selon que la variable est prsente, ou non prsente, dans
lexpression.
On tape :
has(x*y*sin(x),y)
On obtient :
1
On tape :
has(x*y*sin(x),z)
On obtient :
0

576

6.58.6

CHAPITRE 6. LES FONCTIONS DE CALCUL FORMEL

valuation numrique : evalf

evalf a comme paramtre une expression ou une matrice.


evalf renvoie la valeur numrique de lexpression ou de la matrice.
On tape :
evalf(sqrt(2))
On obtient :
1.41421356237
On tape :
evalf([[1,sqrt(2)],[0,1]])
On obtient :
[[1.0,1.41421356237],[0.0,1.0]]

6.58.7

Approximation rationnelle : float2rational exact

float2rational (ou exact) a comme paramtre une expression numrique


relle.
float2rational donne une approximation rationnelle de tous les nombres
dcimaux r contenus dans lexpression moins de epsilon cest dire |r
float2rational(r)| <  o  est dfinit par epsilon dans la configuration du cas (menu Cfg , ou commande cas_setup).
On tape :
float2rational(1.5)
On obtient :
3/2
On tape :
float2rational(1.414)
On obtient :
707/500
On tape :
float2rational(0.156381102937*2)
On obtient :
5144/16447
On tape :
float2rational(1.41421356237)
On obtient :
114243/80782
On tape :
float2rational(1.41421356237^2)
On obtient :
2

Chapitre 7

Les fonctions de statistique


7.1

Les fonctions de Xcas de statistique 1 variable

On va dcrire les diffrentes fonctions statistiques sur un exemple :


avec la liste A:=[0,1,2,3,4,5,6,7,8,9,10,11]
- en prenant comme srie statistique deffectif 1 la liste A, ou
- en prenant comme srie statistique la liste A avec comme effectifs encore la liste
A.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
On pourra se reporter aussi 6.42 lorsque les arguments sont des listes et 6.45.37
lorsque les arguments sont des matrices.

7.1.1

La moyenne : mean moyenne

mean calcule la moyenne numrique des lments dune liste (ou de chaque colonne dune matrice).
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
mean(A)
On obtient :
11/2
En effet (0+1+...+11)=66 et 66/12=11/2
On tape :
mean([[1,2],[3,4]])
On obtient :
[2,3]
En effet (1+3)/2=2 et (2+4)/2=3.
mean calcule la moyenne numrique des lments dune liste (respectivement de
chaque colonne dune matrice) pondre par une liste (respectivement matrice) de
mme taille donne comme deuxime argument.
On tape :
577

578

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


A:=[0,1,2,3,4,5,6,7,8,9,10,11]
mean(A,A)

On obtient :
23/3
En effet : 1*1+2*2+..11*11=23*12*11/6=23*2*11 et 1+2+..11=66 donc :
mean(A,A)=23*2*11/66=23/3
On tape :
mean([[1,2],[3,4]],[[1,2],[3,4]])
On obtient :
[5/2,10/3]
En effet : (1*1+3*3)/(1+3)=5/2 et (2*2+4*4)/(2+4)=10/3

7.1.2

Lcart-type : stddev ecart_type

stddev calcule lcart-type numrique des lments dune liste (ou de chaque
colonne dune matrice).
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
stddev(A)
On obtient :
sqrt(143/12)
On tape :
stddev([[1,2],[3,4]])
On obtient :
[1,1]
stddev calcule lcart-type numrique des lments dune liste pondre par une
autre liste donne comme deuxime argument.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
stddev(A,A)
On obtient :
sqrt(65/9)

7.1. LES FONCTIONS DE XCAS DE STATISTIQUE 1 VARIABLE

7.1.3

579

Lcart-type de la population : ecart_type_population stddevp


stdDev

stddevp (ou stdDev) a comme argument une (ou deux) liste(s) :


stddevp(l) calcule une estimation lcart-type numrique de la population dont
est issu lchantillon dcrit par les lments de la liste l, de longueur n, donne en
argument (size(l)=n et n doit tre grand). On a :
stddevp(l)^2=n/(n-1)* stddev(l)^2.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
stddevp(A)
On obtient :
sqrt(13)
En effet : n=size(A)=12 et 12/11*stddev(A)^2=12/11*143/12=13.
On tape :
stddevp([[1,2],[3,4]])
On obtient :
[sqrt(2),sqrt(2)]

stddevp(l1,l2) calcule lcart-type numrique de la population dont est issu


lchantillon dcrit par les lments dune liste l1 pondre par une autre liste l2
donne comme deuxime argument.
On a :
stddevp(l1,l2)^2=n/(n-1)* stddev(l1,l2)^2 si n est la taille de
lchantillon cest dire si n est la somme de la liste l2 (sum(l2)=n).
On tape :
stddevp(A,A)
On obtient :
sqrt(22/3)
22
66 65
En effet sum(A)=66 et
=

Remarque stddev est lcart type


3
65
9
aprs division par n (taille de lchantillon) alors que stddevp et son synonyme stdDev (nom de commande TI) est divis par n-1 et donne lestimateur
non biais de lcart-type dune population partir de lcart-type calcul avec un
chantillon (la division par n-1 permet de supprimer le biais).
Pour la variance nous ne donnons quune commande (division par n), mais il est
trs facile de dfinir une "variance dchantillon" en prenant le carr de lcart-type
stddevp.

580

7.1.4

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

La variance : variance

variance calcule la variance numrique des lments dune liste.


On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
variance(A)
On obtient :
143/12
variance calcule la variance numrique des lments dune liste pondre par
une autre liste donne comme deuxime argument.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
variance(A,A)
On obtient :
65/9
On tape :
variance([[1,2],[3,4]])
On obtient :
[1,1]

7.1.5

La mdiane : median

median calcule la mdiane des lments dune liste.


On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
median(A)
On obtient :
5.0
median calcule la mdiane numrique des lments dune liste pondre par une
autre liste donne comme deuxime argument.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
median(A,A)
On obtient :
8
On a en effet : 1 + 2 + 3 + ...7 = 28 et 9 + 10 + 11 = 30 il y a donc 28 lments
avant 8 et 30 lments aprs 8.

7.1. LES FONCTIONS DE XCAS DE STATISTIQUE 1 VARIABLE

7.1.6

581

Diffrentes valeurs statistiques : quartiles

quartiles renvoie la matrice colonne forme par : le minimum, le premier quartile, la mdiane, le troisime quartile et le maximum des lments dune liste.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quartiles(A)
On obtient :
[[0.0],[2.0],[5.0],[8.0],[11.0]]
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quartiles(A,A)
On obtient :
[1,6,8,10,11]

7.1.7

Le premier quartile : quartile1

quartile1 renvoie le premier quartile des lments dune liste.


On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quartile1(A)
On obtient le premier quartile de A :
2.0
quartile1 calcule le premier quartile des lments dune liste pondre par une
autre liste donne comme deuxime argument.
On tape :
quartile1(A,A)
On obtient le premier quartile de A pondere par A :
6

582

7.1.8

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Le troisime quartile : quartile3

quartile3 renvoie le troisime quartile des lments dune liste.


On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quartile3(A)
On obtient le troisime quartile de A :
8.0
quartile3 calcule le troisime quartile des lments dune liste pondre par
une autre liste donne comme deuxime argument.
On tape :
quartile3(A,A)
On obtient le premier quartile de A pondere par A :
10

7.1.9

Les dciles : quantile

quantile(L,p) o L est la srie statistique et p un rel de [0,1[, indique la


valeur du caractre partir de laquelle la frquence cumule de L atteint ou dpasse
p.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
quantile(A,0.1)
On obtient le premier dcile :
1.0
On tape :
quantile(A,0.25)
On obtient le premier quartile :
2.0
On tape :
quantile(A,0.5)
On obtient la mdiane :
5.0
On tape :
quantile(A,0.75)

7.1. LES FONCTIONS DE XCAS DE STATISTIQUE 1 VARIABLE

583

On obtient le troisime quartile :


8.0
On tape :
quantile(A,0.9)
On obtient le neuvime dcile :
10.0
quantile(l1,l2,p) calcule le quantile spcifi par le dernier argument des
lments de la liste l1 pondre par la liste l2.
On tape :
quantile(A,A,0.25)
On obtient le premier quartile de la liste A pondre par A :
6

7.1.10

Le regroupement en classes : classes

classes permet de raliser un regroupement en classes.


Les paramtres peuvent tre :
- un vecteur ou une matrice colonne, le dbut de la classe et la taille des intervalles
de la classe (que lon suppose de mme taille).
On tape :
classes([0,0.5,1,1.5,2,2.5,3,3.5,4],0,2)
On obtient :
[[0.0 .. 2.0,4],[2.0 .. 4.0,4],[4.0 .. 6.0,1]]
- un vecteur ou une matrice colonne, le dbut de la classe, la liste des centres des
intervalles de la classe.
On tape :
classes([0,0.5,1,1.5,2,2.5,3,3.5,4],0,[1,3,5])
On obtient :
[[0.0 .. 2.0,4],[2.0 .. 4.0,4],[4.0 .. 6.0,1]]
- un vecteur ou une matrice colonne, la liste des intervalles de la classe.
On tape :
classes([0,0.5,1,1.5,2,2.5,3,3.5,4],[0..2,2..4,4..6])
On obtient :
[[0.0 .. 2.0,4],[2.0 .. 4.0,4],[4.0 .. 6.0,1]]

584

7.1.11

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Regroupement de termes : accumulate_head_tail

accumulate_head_tail permet de regrouper les premiers termes et les derniers termes dune liste en les remplacant par leur somme.
Les paramtres sont la liste, le nombre de termes que lon regroupe au dbut de la
liste et le nombre de termes lon regroupe en fin de la liste.
On tape :
accumulate_head_tail([0,1,1,0,2,2,3,3,4,3,1,1],4,2)
On obtient :
[2,2,2,3,3,4,3,2]

7.1.12

La boite moustaches : boxwhisker moustache

boxwhisker ou moustache permet de visualiser diffrentes valeurs indiquant


la rpartition des valeurs dune liste.
On tape :
moustache(A)
La fentre graphique souvre automatiquement et on obtient ( condition davoir
dfini correctement la configuration du graphique avec le menu Cfg), une boite
rectangulaire dont la longueur est un trait allant du premier quartile Q1 au troisime quartile Q3 , et sur laquelle un trait vertical indique la valeur de la mdiane
et do deux traits dbordent : lun va de la valeur minimum Q1 et lautre de Q3
la valeur maximum. Sur ces deux moustaches on trouvent deux traits verticaux
indiquant la valeur du premier et du neuvime dcile.

7.1.13

Lhistogramme : histogram histogramme

histogram trace lhistogramme des donnes de data, on peut prciser une liste
deffectifs, ou un nombre nc de classes ou le mimimum classmin des classes et la
largeur classsize des classes.
histogram permet de visualiser la fonction densit des frquences : on met en
abscisse les classes et en ordonne la densit des frquences (si on a des valeurs
discrtes elles sont considres comme tant le centre de la classe). Lhistogramme
est donc un graphique en escalier dans lequel les frquences des diffrentes classes
sont reprsentes par les aires des diffrents rectangles situs sous les diffrents
paliers.
On rappelle que, si leffectif de la classe [aj1 ; aj ] est nj , la frquence de la classe
[aj1 ; aj ] est fj = nj /N (si N est leffectif total) et la densit de frquence de la
classe [aj1 ; aj ] est fj /(aj aj1 ).
On tape :
histogram([[1.5..1.65,50],[1.65..1.7,20],[1.7..1.8,30]])
La fentre graphique souvre automatiquement et on obtient lhistogramme de la
srie [[1.5..1.65,50],[1.65..1.7,20],[1.7..1.8,30]], condition davoir dfini correctement la configuration du graphique.

7.1. LES FONCTIONS DE XCAS DE STATISTIQUE 1 VARIABLE

585

Largument de histogram peut aussi tre une liste de valeurs discrtes, dans
ce cas, les classes commencent une valeur (class_min) et sont toutes de mme
largeur (class_size) soit dfinies par dfaut ( 0 et 1, valeurs modifiables dans
la configuration graphique) ou passes en second et troisime arguments.
On tape :
histogram([0,1,2,1,1,2,1,2,3,3])
alors class_min=0 et class_size=1 et les valeurs 0,1,2,3 ne sont donc pas
centres.
Mais si on tape :
histogram([0,1,2,1,1,2,1,2,3,3],-0.5,1)
alors class_min=-0.5 et class_size=1 et les valeurs 0,1,2,3 sont donc
centres.
et cela renvoie la mme chose que :
histogram([[0,1],[1,4],[2,3],[3,2]])
On tape :
histogram(seq(rand(1000),k,0,100),0,100)
Ici on a choisi class_min=0 et class_size=100.

7.1.14

Les frquences : frequencies frequences

frequencies ou frequences a comme argument une liste.


frequencies ou frequences renvoie les frquences des lments de cette
liste.
On tape :
frequences([1,2,1,1,2,1,2,4,3,3])
On obtient :
[[1,0.4],[2,0.3],[3,0.2],[4,0.1]]
On tape pour simuler le lanc dune pice de monnaie :
frequences([rand(2)$(k=1..100)])
On obtient par exemple :
[[0,0.6],[1,0.4]]
On tape :
frequences([rand(2)$(k=1..1000)])
On obtient par exemple :
[[0,0.506],[1,0.494]]
On tape :

586

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


frequences([rand(2)$(k=1..10000)])

On obtient par exemple :


[[0,0.4952],[1,0.5048]]
On tape pour simuler le lanc dun d cubique non pip :
frequences([(rand(6)+1)$(k=1..100)])
On obtient par exemple :

[[1,0.13],[2,0.13],[3,0.18],[4,0.13],[5,0.19],[6,0.24]]
On tape :
frequences([(rand(6)+1)$(k=1..1000)])
On obtient par exemple :

[[1,0.19],[2,0.155],[3,0.167],[4,0.156],[5,0.183],[6,0.149]]
On tape :
frequences([(rand(6)+1)$(k=1..10000)])
On obtient par exemple :

[[1,0.1648],[2,0.1703],[3,0.1667],[4,0.1671],[5,0.1727],[6,0.1584]]]

7.1.15

Les frquences cumules : cumulated_frequencies frequences_cumule

cumulated_frequencies ou frequences_cumulees a comme argument


une liste ou une matrice ayant 2 colonnes ou plus de 2 colonnes.
Lorsque cumulated_frequencies a comme argument une liste, cumulated_frequencies
renvoie le diagramme des frquences cumules des valeurs de cette liste.
On tape :
cumulated_frequencies([1,2,1,1,2,1,2,4,3,3])
On obtient :
le diagramme des frquences cumules des valeurs de
cette liste i.e.
polygone_ouvert(0,1+i*0.4,2+i*0.7,3+i*0.9,4+i)
Lorsque cumulated_frequencies a comme argument une matrice ayant 2
colonnes :
la premire colonne reprsente les diffrentes valeurs prises, soit sous forme
discrtes bj (les bj sont quirparties selon class_size dfini avec la
configuration graphique) soit sous fome dintervalles aj1 ..aj ,

7.1. LES FONCTIONS DE XCAS DE STATISTIQUE 1 VARIABLE

587

la deuxime colonne reprsente soit les effectifs nj , soit les frquences fj


des valeurs bj ou des classes aj1 ..aj .
Lorsque cumulated_frequencies a comme argument une matrice ayant plus
de 2colonnes, cest que lon veut comparer plusieus effectis correspondant plusieurs sries de mmes valeurs.
Les lignes sont alors :
[aj1 ..aj , nj ] ou [aj1 ..aj , fj ] ou [aj1 ..aj , n1j , n2j ] ou [aj1 ..aj , f 1j , f 2j ] ou
[bj , nj ] ou [bj , fj ] etc...
cumulated_frequencies permet de visualiser le diagramme des frquences
cumules : ce sont les segments de droites qui joignent les points dabscisse aj et
dordonne f1 + .. + fj (aj est la borne suprieure dune classe, fj est la frquence
de la classe [aj1 ; aj ] et donc f1 + .. + fj est la frquence cumule de aj )
Si on a des valeurs discrtes elles sont considres comme tant le centre de la
classe.
On tape :
cumulated_frequencies([[1.5..1.65,50],
[1.65..1.7,20],[1.7..1.8,30]])
Ou on tape :
cumulated_frequencies([[1.5..1.65,0.5],
[1.65..1.7,0.2],[1.7..1.8,0.3]])
La fentre graphique souvre automatiquement et on obtient le diagramme cumulatif des frquences de :
[[1.5..1.65,50],[1.65..1.7,20],[1.7..1.8,30]]
condition davoir dfini correctement la configuration du graphique (menu Cfg).
On tape :
cumulated_frequencies([[1.5..1.65,50,30],
[1.65..1.7,20,50],[1.7..1.8,30,20]])
On tape :
cumulated_frequencies([[1.5..1.65,0.5,0.3],
[1.65..1.7,0.2,0.5],[1.7..1.8,0.3,0.2]])
La fentre graphique souvre automatiquement et on obtient les diagrammes cumulatifs des frquences, avec des couleurs diffrentes, de :
[[1.5..1.65,50],[1.65..1.7,20],[1.7..1.8,30]] et de
[[1.5..1.65,30],[1.65..1.7,50],[1.7..1.8,20]]
condition davoir dfini correctement la configuration du graphique (menu Cfg).
Remarque
Pour avoir les frquences cumules dune liste de valeurs, on peut aussi transformer
cette liste en une matrice ayant 2 colonnes (valeurs,effectifs) avec la commande
classes :

588

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

On tape :
L:=[(rand(6)+1)$(k=1..100)]
CL1:=classes(L)
On obtient :
[[1.0..2.0,15],[2.0..3.0,22],[3.0..4.0,23],[4.0..5.0,17],
[5.0..6.0,8],[6.0..7.0,15]]
Ou on tape :
L:=[(rand(6)+1)$(k=1..100)]
CL2:=classes(L,0.5,1)
On obtient :
[[0.5..1.5,15],[1.5..2.5,22],[2.5..3.5,23],[3.5..4.5,17],
[4.5..5.5,8],[5.5..6.5,15]]
On tape :
cumulated_frequencies(CL1)
On obtient :
le graphe des frquences cumules de CL1 allant de 1 7
Ou on tape :
cumulated_frequencies(CL2)
On obtient :
le graphe des frquences cumules de CL2 allant de 0.5
6.5 et sera donc dcal par rapport au prcdent

7.1.16

Dessiner un diagramme en batons : diagramme_batons

diagramme_batons permet de dessiner un diagramme en batons dune srie statistique 1 variable.


diagramme_batons a comme argument une matrice 2 colonnes contenant en
1re colonne les noms et en 2me colonne les valeurs.
On tape :

diagramme_batons([["France",6],["Allemagne",12],["Suisse",5]])

La fentre graphique souvre automatiquement et on obtient le dessin de 3 rectangles de mme largeur et de hauteur respective 6,12,5. On peut faire plusieurs
diagrammes en batons sur le mme graphique.
On tape :

diagramme_batons([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])

On obtient :

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

7.1.17

589

Dessiner un diagramme en camembert : camembert

camembert permet de dessiner un diagramme en camembert dune srie statistique 1 variable.


camembert a comme argument une matrice 2 colonnes contenant en 1re colonne les noms et en 2me colonne les valeurs.
On tape :
camembert([["France",6],["Allemagne",12],["Suisse",5]])
La fentre graphique souvre automatiquement et on obtient le dessin dun camembert coup selon 3 parts colores avec comme lgende :
France 26,09% , Allemagne 52.17% , Suisse 21.74%
On peut faire plusieurs camemberts sur le mme graphique.
On tape :
camembert([[2,"xyz","abc"],["A",2,5],["B",5,6],["C",7,7]])
On obtient :

7.2

Les fonctions statistiques 2 variables

On continue utiliser la liste A dans les exemples.


On tape :

590

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


A:=[0,1,2,3,4,5,6,7,8,9,10,11]

7.2.1

La covariance : covariance

La covariance de deux variables alatoires X et Y est :

cov(X, Y ) = E((X X)(Y


Y )).
covariance a diffrentes sortes darguments :
- quand les effectifs sont gaux 1,
covariance a pour argument deux listes de mme longueur ou une matrice ayant
deux colonnes.
covariance calcule la covariance numrique des deux listes ou deux colonnes
de cette matrice.
On tape :
covariance([1,2,3,4],[1,4,9,16])
On obtient :
25/4
On tape :
covariance([[1,1],[2,4],[3,9],[4,16]])
On obtient :
25/4
Car on a :
1/4*(1+8+27+64)-75/4=25/4
On tape (on a A:=[0,1,2,3,4,5,6,7,8,9,10,11]) :
covariance(A,A^2)
On obtient :
1573/12
- quand les effectifs sont diffrents de 1 :
- si les couples a[j], b[j] ont pour effectif n[j] (j = 0..p1), covariance a pour
argument trois listes a, b, n de mme longueur p, ou une matrice de trois colonnes
a, b, n et de p lignes [a[j], b[j], n[j]].
covariance calcule la covariance numrique des deux premires listes pondres par la liste donne comme dernier argument ou des deux colonnes de cette
matrice pondres par la troisime colonne.
On tape :
covariance([1,2,3,4],[1,4,9,16],[3,1,5,2])
Ou on tape :
covariance([[1,1,3],[2,4,1],[3,9,5],[4,16,2]])
On obtient :

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

591

662/121
- si les couples a[j], b[k] ont pour effectif N [j, k] (j = 0..p 1, k = 0..q 1),
covariance a pour argument deux listes a, b de longueurs respectives p et q et
une matrice N de p lignes et q colonnes ou encore,
afin de pouvoir crire les donnes de faon plaisante dans le tableur, covariance
peut aussi avoir deux arguments, une matrice M et -1.
M est alors un tableau deux entres gal :

a\b
b[0]
...
b[q 1]
a[0]
N [0, 0]
...
N [0, q 1]

M =

...
...
...
...
a[p 1] N [p 1, 0] ... N [p 1, q 1]
covariance(a,b,N) ou covariance(M,-1) calcule la covariance numrique des couples a[j], b[k] pondrs par Nj,k .
On tape :
covariance([1,2,3,4],[1,4,9,16],[[3,0,0,0],
[0,1,0,0],[0,0,5,0],[0,0,0,2]])
On obtient :
662/121
On tape :
covariance([[b\a,1,2,3,4],[1,3,0,0,0],
[4,0,1,0,0],[9,0,0,5,0],[16,0,0,0,2]],-1)
On obtient :
662/121

7.2.2

La corrlation : correlation

Le coefficient de corrlation linaire de deux variables alatoires X et Y est


cov(X, Y )
o (X) (resp (Y )) dsigne lcart-type de X (respY ).
=
(X)(Y )
correlation a les mmes arguments que covariance.
Quand les effectifs sont gaux 1,
correlation a pour argument deux listes de mme longueur ou une matrice
ayant deux colonnes.
On tape :
correlation([1,2,3,4],[1,4,9,16])
On obtient :
100/(4*sqrt(645))
On tape :

592

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


correlation([[1,1],[2,4],[3,9],[4,16]])

On obtient :
100/(4*sqrt(645))
On tape (on a A:=[0,1,2,3,4,5,6,7,8,9,10,11]) :
correlation(A,A^2)
On obtient :
18876/(572*sqrt(1173))
Quand les effectifs sont diffrents de 1 :
- si les couples a[j], b[j] ont pour effectif n[j] (j = 0..p 1), correlation
a pour argument trois listes a, b, n de mme longueur p, ou une matrice de trois
colonnes a, b, n et de p lignes [a[j], b[j], n[j]].
correlation calcule la corrlation numrique des deux premires listes qui
sont pondres par la liste donne comme dernier argument ou calcule la corrlation numrique des deux colonnes de cette matrice qui sont pondres par la
troisime colonne.
On tape :
correlation([1,2,3,4],[1,4,9,16],[3,1,5,2])
Ou on tape :
correlation([[1,1,3],[2,4,1],[3,9,5],[4,16,2]])
On obtient :
662/(180*sqrt(14))
- si les couples a[j], b[k] ont pour effectif N [j, k] (j = 0..p 1, k = 0..q 1),
correlation a pour argument deux listes a, b de longueurs respectives p et q et
une matrice N de p lignes et q colonnes ou encore,
afin de pouvoir crire les donnes de faon plaisante dans le tableur, correlation
peut aussi avoir pour argument, une matrice M et -1.
M est alors un tableau deux entres gal :

a\b
b[0]
...
b[q 1]
a[0]
N [0, 0]
...
N [0, q 1]

M =

...
...
...
...
a[p 1] N [p 1, 0] ... N [p 1, q 1]
correlation(a,b,N) ou correlation(M,-1) calcule la corrlation numrique des couples a[j], b[k] pondrs par Nj,k .
On tape :
correlation([1,2,3,4],[1,4,9,16],[[3,0,0,0],[0,1,0,0],
[0,0,5,0],[0,0,0,2]])
On obtient :

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

593

662/(180*sqrt(14))
On tape :
correlation([["b\a",1,2,3,4],[1,3,0,0,0],
[4,0,1,0,0],[9,0,0,5,0],[16,0,0,0,2]],-1)
On obtient :
662/(180*sqrt(14))

7.2.3

Covariance et corrlation : covariance_correlation

covariance_correlation a les mmes arguments que covariance : si


les effectifs sont gaux 1, covariance_correlation a pour argument deux
listes de mme longueur ou une matrice ayant deux colonnes reprsentant deux
variables alatoires X et Y et sinon covariance_correlation a pour argument trois listes de mme longueur ou une matrice ayant trois colonnes reprsentant deux variables alatoires X et Y et la pondration de leurs effectifs ou encore
une matrice M et -1, o M donne la pondration de X (la premire colonne de M
sans M [0, 0]) et de Y (la premire ligne de M sans M [0, 0]).
covariance_correlation renvoie la liste de la covariance cov(X, Y ) et du
coefficient de corrlation linaire des deux variables alatoires X et Y .
cov(X,Y )
On a = (X)(Y
) o (X) (resp (Y )) dsigne lcart-type de X (respY ).
On tape :
covariance_correlation([[1,1],[2,4],[3,9],[4,16]])
On obtient :
[25/4,100/(4*sqrt(645))]
On tape (on a A:=[0,1,2,3,4,5,6,7,8,9,10,11]) :
covariance_correlation(A,A^2)
On obtient :
[1573/12,18876/(572*sqrt(1173))]
On tape :
covariance_correlation([1,2,3,4],[1,4,9,16],[3,1,5,2])
Ou on tape :
covariance_correlation([[1,1,3],[2,4,1],[3,9,5],[4,16,2]])
On obtient :
[662/121,662/(180*sqrt(14))]
On tape :

594

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


covariance_correlation([1,2,3,4],[1,4,9,16],
[[3,0,0,0],[0,1,0,0],[0,0,5,0],[0,0,0,2]])

On obtient :
[662/121,662/(180*sqrt(14))]
On tape :
covariance_correlation([["b\a",1,2,3,4],[1,3,0,0,0],
[4,0,1,0,0],[9,0,0,5,0],[16,0,0,0,2]],-1)
On obtient :
[662/121,662/(180*sqrt(14))]

7.2.4

Le nuage de points : scatterplot nuage_points

scatterplot ou nuage_points a pour arguments deux listes ou une matrice


ayant deux colonnes.
scatterplot ou nuage_points permet de visualiser le nuage de points dfini par largument.
On tape :
scatterplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape :
scatterplot([0,1,2,3,4],[0,1,4,9,16])
La fentre graphique souvre automatiquement et on obtient le dessin des 5 points
((0,0),...(4,16)), condition davoir dfini correctement la configuration du graphique (menu Cfg).

7.2.5

Ligne polygonale : polygonplot ligne_polygonale

polygonplot a pour arguments deux listes ou une matrice ayant deux colonnes.
polygonplot permet de visualiser les segments de droites reliant les diffrents
points du nuage de points dfinis par largument et ordonns selon les abscisses
croissantes. Si vous voulez que les points soient relis dans lordre donns il faut
utiliser listplot
On tape :
polygonplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape car les points seront ordonns selon les abscisses croissantes :
polygonplot([[2,4],[0,0],[3,9],[1,1],[4,16]])
Ou on tape :
polygonplot([0,1,2,3,4],[0,1,4,9,16])
La fentre graphique souvre automatiquement et on obtient le dessin des 4 segments reliant les 5 points ((0,0),...(4,16)), condition davoir dfini correctement
la configuration du graphique (menu Cfg).

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

7.2.6

595

Ligne polygonale : listplot plotlist

listplot ou plotlist a pour argument une liste l ou une matrice ayant deux
colonnes.
listplot ou plotlist permet de visualiser les segments reliant le nuage de
points ayant pour abscisse [0,1,2...n] et pour ordonne l ou pour coordonnes une ligne de la matrice. listplot ou plotlist relie par des segments de
droites, les diffrents points du nuage, mais sans rordonner les points contrairement polygonplot qui rordonne les points selon leur abscisse puis les relie.
On tape :
listplot([0,1,4,9,16])
Ou on tape :
listplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
La fentre graphique souvre automatiquement et on obtient condition davoir
dfini correctement la configuration du graphique (menu Cfg) :
le dessin des 5 points ((0,0),(1,1),...(4,16)) relis
par 4 segments
On tape si A est une matrice ayant 5 lignes et 2 colonnes :
A:=[[0,0],[1,1],[5,4],[3,9],[4,16]]
listplot(A[0..4,0..1])
La fentre graphique souvre automatiquement et on obtient :
les 5 points relis par 4 segments
Bien voir la diffrence entre :
listplot([[0,0],[1,1],[5,4],[3,9],[4,16]])
polygonplot([[0,0],[1,1],[5,4],[3,9],[4,16]])
Attention
listplot([0,1,2,3,4],[0,1,4,9,16]) ou
listplot([[0,1,2,3,4],[0,1,4,9,16]]) nest pas valide !

7.2.7

Ligne polygonale et nuage de points : polygonscatterplot


ligne_polygonale_pointee

polygonscatterplot ou ligne_polygonale_pointee a pour arguments


deux listes ou une matrice ayant deux colonnes.
polygonscatterplot ou ligne_polygonale_pointee permet de visualiser le nuage de points dfini par largument, en reliant par des segments de
droites, les diffrents points du nuage en les ordonnant selon les abscisses croissantes.
On tape :

596

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

polygonscatterplot([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape :
polygonscatterplot([0,1,2,3,4],[0,1,4,9,16])
La fentre graphique souvre automatiquement et on obtient le dessin des 5 points
((0,0),...(4,16)) relis par 4 segments, condition davoir dfini correctement la
configuration du graphique (menu Cfg).

7.2.8

Interpolation linaire : linear_interpolate

tant donn une matrice 2 lignes donnant les coordonnes de points : apres
avoir ordonn les abcisses de ces points, ces points dfinissent une ligne polygonale. On veut avoir les coordonnes des points de cette ligne pour des points dfinis
de maniere rgulire.
linear_interpolate a 4 arguments, une matrice A 2 lignes donnant les coordonnes des points dune ligne polygonale, la valeur minimum des x (xmin), la
valeur maximum des x (xmax) et le pas (xstep).
linear_interpolate renvoie les coordonnes des points de la ligne polygonale pour x variant de xmin xmax avec un pas gal xstep.
Remarque on doit avoir xmin et xmax dans lintervalle [min(A[0]);max(A[0])].
On tape :
linear_interpolate([[1,2,6,9],[3,4,6,12]],1,9,1)
On obtient :

[[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0],[3.0,4.0,4.5,5.0,5.5,6.0,8.0,10
On tape :
linear_interpolate([[1,2,6,9],[3,4,6,12]],2,7,1)
On obtient :
[[2.0,3.0,4.0,5.0,6.0,7.0],[4.0,4.5,5.0,5.5,6.0,8.0]]
On tape :
linear_interpolate([[1,2,9,6],[3,4,6,12]],1,9,1)
On obtient :

[[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0],[3.0,4.0,6.0,8.0,10.0,12.0,10.0

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

7.2.9

597

Rgression linaire : linear_regression

Pour approcher les donnes par la droite des moindres carrs ayant pour quation y = mx + b, on utilise linear_regression qui renvoie le couple (m, b).
Si les donnes sont xi , yi avec i = 1..n, on a :
)
m = cov(X,Y
(X)2

et b = Y mX
car la somme des carrs des distances di = |yi mxi bi | est minimale pour ces
valeurs et ce minimum (qui est donc lerreur quadratique moyenne verticale) vaut
cov(X,Y
(1 2 )(Y )2 o r est le coefficient de corrlation ( = (X)(Y
) ).
linear_regression a les mmes arguments que covariance.
On tape :
linear_regression([[0,0],[1,1],[2,4],[3,9],[4,16]])
Ou on tape :
linear_regression([0,1,2,3,4],[0,1,4,9,16])
On obtient :
4,-2
cest donc la fonction linaire dquation y = 4x 2 qui approche au mieux les
donnes.
On tape :
X:=[0,1,2,3,4,5,6,7,8,9,10]
Y:=[7.3,9.53,12.47,16.3,21.24,27.73,36.22,
47.31,61.78,80.68,105]
Z:=log(Y)
linear_regression(X,Z)
On obtient :
0.266729219953,1.98904252589
cest donc la fonction linaire dquation z = ln(y) = 0.267x + 1.99 qui approche
au mieux les donnes.

7.2.10

Graphe de la rgression linaire :


linear_regression_plot

Pour dessiner la droite des moindres carrs y = mx + b, droite qui approche


au mieux les donnes, on utilise linear_regression_plot.
linear_regression_plot a les mmes arguments que covariance.
On tape :
linear_regression_plot([1,2,3,4],[1,4,9,16],[3,1,5,2])

598

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

On obtient :
Le graphe de la droite dquation y = 331 x/70 22/5
car cest la fonction linaire dquation y = 331 x/70 22/5 qui approche au
mieux les donnes. Remarque On remarquera que lquation de la courbe represente ainsi que la valeur du coefficient de corrlation des donnes sont crits en
bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.

7.2.11

Rgression exponentielle : exponential_regression

Pour approcher les donnes par une fonction exponnentielle dquation y =


bemx = bax , on utilise exponential_regression qui renvoie le couple
(a, b).
exponential_regression a les mmes arguments que covariance.
On tape :
evalf(exponential_regression([[1,1],[2,4],[3,9],[4,16]]))
Ou on tape :
evalf(exponential_regression([1,2,3,4],[1,4,9,16]))
On obtient :
2.49146187923,0.5
cest donc la fonction exponentielle dquation y = 0.5 (2.49146187923)x qui
approche au mieux les donnes.
On tape :
X:=[0,1,2,3,4,5,6,7,8,9,10]
Y:=[7.3,9.53,12.47,16.3,21.24,27.73,36.22,47.31,
61.78,80.68,105]
exponential_regression(X,Y)
On obtient :
1.30568684451,7.30853268031
cest donc la fonction exponentielle dquation y = 7.3 (1.3)x qui approche au
mieux les donnes. On vrifie en tapant :
e^[linear_regression(X,ln(Y))]
On obtient :
1.30568684451,7.30853268031

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

7.2.12

599

Graphe de la rgression exponentielle :


exponential_regression_plot

Pour dessiner la fonction exponnentielle dquation y = b exp(mx) = bax qui


approche au mieux les donnes, on utilise exponential_regression_plot.
exponential_regression_plot a les mmes arguments que covariance.
On tape :

exponential_regression_plot([0,1,2,3,4,5,6,7,8,9,10],[7.3,
9.53,12.47,16.3,21.24,27.73,36.22,47.31,61.78,80.68,105])
On obtient :
Le graphe de la fonction expopnentielle dquation
y = 7.30853268031 (1.30568684451)x
car cest la fonction expopnentielle dquation :
y = 7.30853268031 (1.30568684451)x qui approche au mieux les donnes. Remarque On remarquera que lquation de la courbe represente ainsi que la valeur
du coefficient de corrlation de X, ln(Y ) (si les donnes sont X, Y )) sont crits en
bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.

7.2.13

Rgression logarithmique : logarithmic_regression

Pour approcher les donnes par une fonction logarithmique dquation y =


m ln(x)+b, on utilise logarithmic_regression qui renvoie le couple (m, b).
logarithmic_regression a les mmes arguments que covariance.
On tape :

evalf(logarithmic_regression([[1,1],[2,4],[3,9],[4,16]]))
Ou on tape :
evalf(logarithmic_regression([1,2,3,4],[1,4,9,16]))
On obtient :
10.1506450002,-0.564824055818
cest donc la fonction logarithmique dquation y = 10.15 ln(x) 0.565 qui approche au mieux les donnes.
On tape :
X:=[1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8]
Y:=[1.6,2.15,2.65,3.12,3.56,3.99,4.4,4.8,5.18,
5.58,5.92,6.27,6.62,7.06,7.3]

600

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


logarithmic_regression(X,Y)

On obtient :
2.83870854646,0.843078064152
cest donc la fonction logarithmique dquation y = 0.84 ln(x) + 2.84 qui approche au mieux les donnes .
On vrifie en tapant :

linear_regression(ln(X),Y)
On obtient :
2.83870854646,0.843078064152
et le coefficient de corrlation est :
correlation(ln(X),Y)
On obtient :
0.977939822434
On peut aussi taper pour chercher une meilleur approximation :
logarithmic_regression(X,log(Y))
On obtient :
0.732351031846,0.467599676658
cest donc la fonction logarithmique dquation z = ln(y) = 0.73 ln(x) + 0.47 qui
approche au mieux les donnes.
On vrifie en tapant :

linear_regression(ln(X),ln(Y))
On obtient :
0.732351031846,0.467599676658
et le coefficient de corrlation est :
correlation(ln(X),ln(Y))
On obtient :
0.999969474543

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

7.2.14

601

Graphe de la rgression logarithmique :


logarithmic_regression_plot

Pour dessiner le graphe de la fonction logarithmique dquation y = m ln x+b


qui approche au mieux les donnes, on utilise logarithmic_regression_plot.
logarithmic_regression_plot a les mmes arguments que covariance.
On tape :

logarithmic_regression_plot([[1.0,1],[2,4],[3,9],[4,16]])
On obtient :
Le graphe de la fonction logarithme dquation
y = 10.1506450002 ln(x) 0.564824055818
car cest la fonction logarithme dquation :
y = 10.1506450002 ln(x) 0.564824055818
qui approche au mieux les donnes.
Remarque On remarquera que lquation de la courbe represente ainsi que la
valeur du coefficient de corrlation de ln(X), ln(Y ) (si les donnes sont X, Y ))
sont crits en bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.

7.2.15

Rgression polynmiale : polynomial_regression

Pour approcher les donnes par une fonction polynmiale de degr n dquation y = a0 xn + .. + an , on utilise, en mettant le degr n comme dernier paramtre,
polynomial_regression qui renvoie la liste [an , ..a0 ].
polynomial_regression a les mmes premiers arguments que covariance,
le dernier argument tant le degr du polynme renvoy.
On tape :
polynomial_regression([[1,1],[2,4],[3,9],[4,16]],3)
Ou on tape :
polynomial_regression([1,2,3,4],[1,4,9,16],3)
On obtient :
[0,1,0,0]
cest donc la fonction polynomiale dquation y = 0 x3 + x2 + 0 x + 0 = x2
qui approche au mieux les donnes. Remarque On remarquera que lquation de
la courbe represente ainsi que la valeur du coefficient de corrlation des donnes
sont crits en bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.

602

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

7.2.16

Graphe de la rgression polynomiale :


polynomial_regression_plot

Pour approcher les donnes par le grahe dune fonction polynmiale de degr
n dquation y = a0 xn +..+an , on utilise polynomial_regression_plot.
polynomial_regression_plot a les mmes premiers arguments que covariance,
le dernier argument tant le degr du polynme renvoy.
On tape :
polynomial_regression_plot([[1.0,1],[2,4],[3,9],[4,16]],3)
On obtient :
Le graphe de la fonction polynmiale de degr n
dquation y = x2
car cest la fonction polynmiale dquation y = 1 x2 qui approche au mieux les
donnes.

7.2.17

Rgression puissance : power_regression

Pour approcher les donnes par une fonction puissance dquation y = bxm ,
on utilise power_regression qui renvoie le couple (m, b).
power_regression a les mmes arguments que covariance.
On tape :
evalf(power_regression([[1,1],[2,4],[3,9],[4,16]]))
Ou on tape :
evalf(power_regression([1,2,3,4],[1,4,9,16]))
On obtient :
(2.0,1.0)
donc y = x2 est la fonction puissance qui approche au mieux les donnes.
On tape :
X:=[1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8]
Y:=[1.6,2.15,2.65,3.12,3.56,3.99,4.4,4.8,5.18,
5.58,5.92,6.27,6.62,7.06,7.3]
power_regression(X,Y)
On obtient :
0.732351031846,1.59615829535
cest donc la fonction puissance dquation y = 1.6 x0.73 qui approche au mieux
les donnes.
On vrifie en tapant :

7.2. LES FONCTIONS STATISTIQUES 2 VARIABLES

603

linear_regression(ln(X),ln(Y))
On obtient :
0.732351031846,0.467599676658
On a bien :
e^0.467599676658=1.59615829535
donc
ln(y) = ln(1.59615829535) + ln(x) 0.732351031846
ln(y) = 0.467599676659+ln(x)0.732351031846. et le coefficient de corrlation
est :
correlation(ln(X),ln(Y))
On obtient :
0.999969474543

7.2.18

Graphe de la rgression puissance :


power_regression_plot

Pour approcher les donnes par le graphe dune fonction puissance dquation
y = bxm , on utilise power_regression_plot.
power_regression_plot a les mmes arguments que covariance.
On tape :
power_regression_plot([[1.0,1],[2,4],[3,9],[4,16]])
On obtient :
Le graphe de la fonction puissance dquation y = 1 x2
car cest la fonction puissance dquation y = 1 x2 qui approche au mieux les
donnes. Remarque On remarquera que lquation de la courbe represente ainsi
que la valeur du coefficient de corrlation des donnes sont crits en bleu.
Si on veut avoir lquation et/ou le coefficient de corrlation sur le dessin il faut
rajouter comme dernier argument, loption equation et/ou correlation.

7.2.19

Rgression logistique : logistic_regression

Les courbes logistiques sont des courbes dont lquation y = y(x) sont solutions dune quation diffrentielle de la forme :
y 0 /y = a y + b et y0 = y(x0 ) avec a < 0 et b > 0.
Les solutions sont de la forme : y(x) = C/(1 + exp((x x0 k) avec
C = b/a, = b et y0 = (b/a)/(1 + exp(b k) soit
k = 1/b (ln(((a y0 + b)/(a y0)))) Pour vrifier, on peut taper :
normal(desolve(y/y=a*y+b)
On obtient :

604

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


(-b*exp(-(b*c_0-b*x)))/(a*exp(-(b*c_0-b*x))-1)

Puis on peut taper :


normal(desolve([y/y=a*y+b,y(x0)=y0],y)
On obtient :

[(-b*exp(b*x-b*x0+ln(y0/(a*y0+b))))/(a*exp(b*x-b*x0+ln(y0/(a*y0+b)))-1
On a donc : c0 = x0 ln(y0 /(a y0 + b))/b Donc, en multipliant le numrateur et
dnominateur de y(x) par exp(b c_0 b x) on a :
y(x) = (b/(exp(b c_0 b x) a exp((b c_0 b x)) 1) soit y(x) =
b/(a exp(b (x c0 ))) = (b/(a (1 exp(b (x c0 ))/a))
On a 1/a = exp(ln(a)) car a < 0 donc y(x) = (b/a) (1/(1 + exp(b
(x c0 ) ln(a))) qui est bien la forme annonce.
Lorsque on connait les valeurs de f 0 en x = x0 , x0 +1....x0 +n, on cherche une
fonction logistique y(x) tel que y 0 (x) approche au mieux les diffrentes valeurs de
f 0 (x).
logistic_regression a comme paramtres :
une liste L qui contient les valeurs de y 0 pour x = x0 , x0 + 1....x0 + n,
la valeur de x0 de x0
la valeur y0 de y(x0 ) lorsquon la connait sinon Xcas arrive lestimer...
logistic_regression(L,x0,y0 renvoie les fonctions y(x) et y(x), la
constante C, y1M et xM avec y1M est la valeur y(xM) qui est le maximum de y 0
obtenu en x = xM , et enfin le coefficient de correlation linaire R de Y = y 0 /y en
fonction de y avec la droite Y = a y + b.
partir de la liste L, Xcas calcule la liste Ly en utilisant la formule y(t + 1)
y(t) = y 0 (t), donc, on a Ly=[y0,y0+y0,y0+y0+y1,....]. Puis Xcas
fait une rgression linaire de L/Ly en fonction de Ly pour avoir les valeurs de
a et b (y 0 /y = a y + b et y0 = y(x0 )) puis touve la solution de cette quation
diffrentielle On tape :
logistic_regression([0.0,1.0,2.0,3.0,4.0],0,1)
On obtient avec crit en bleu la signification des valeurs renvoyes :

[(-17.77)/(1+exp(-0.496893925384*x+2.82232341488+3.14159265359*i)),
(-2.48542227469)/(1+cosh(-0.496893925384*x+2.82232341488+3.14159265359
-17.77,-1.24271113735,5.67993141131+6.32246138079*i,
0.307024935856]
On tape :
evalf(logistic_regression([1,2,4,6,8,7,5],0,2))
Ou on tape :
logistic_regression(evalf([1,2,4,6,8,7,5]),0,2.0))
On obtient :

7.3. LES FONCTIONS ALATOIRES DE XCAS

605

[64.8358166583/(1.0+exp(-0.551746244591*x+2.95837880348)),
14.4915280084/(1.0+cosh(-0.551746244591*x+2.95837880348)),
64.8358166583,7.24576400418,5.36184674112,-0.81176431297]
Pour retouver la valeur -0.81176431297 du coefficient de corrlation, on tape :
L:=[1,2,4,6,8,7,5];
y0:=2.0;
Ly:=makelist(y0,1,size(L))+cumSum(L)
On obtient : [3,5,9,15,23,30,35]
puis
correlation(L/Ly,Ly) qui renvoie
-0.81176431297

7.2.20

Graphe de la rgression logistique :


logistic_regression_plot

Lorsque on connait les valeurs de f 0 (x) en x = x0 , x0 +1....x0 +n, pour tracer


le graphe de la derive y 0 (x) dune fonction logistique y(x), solution de lquation
y 0 /y = a y + b (a < 0 et b > 0) vrifiant y0 = y(x0 ) et tel que y 0 (x) approche au
mieux les diffrentes valeurs de f 0 (x), on utilise logistic_regression_plot.
logistic_regression_plot a les mmes arguments que logistic_regression.
On tape :
logistic_regression_plot([1,2,4,6,8,7,5],0,2.0)
On obtient avec crit en bleu les valeurs renvoyes par :
Le graphe de la fonction solution de y 0 /y = a y + b avec
y 0 (0) = 1, y 0 (1) = 2, y 0 (3) = 4...y 0 (6) = 5, y(0) = 2
car cest la fonction logistique qui approche au mieux les donnes. Remarque On
remarquera que lquation de la courbe represente ainsi que la valeur du coefficient de corrlation des donnes sont crits en bleu.
Si on veut avoir lquation et/ou le carr du coefficient de corrlation sur le dessin il
faut rajouter comme dernier argument, loption equation et/ou correlation.
Par exemple, logistic_regression_plot([1,2,4,6,8,7,5],0,2.0,correlation)
et R2=0.658961299812 sinscrit sur le graphe.

7.3
7.3.1

Les fonctions alatoires de Xcas


Pour initialiser les nombres alatoires : srand randseed RandSeed

srand (ou randseed ou RandSeed) sert initialiser la suite des nommbres


alatoires que lon obtient avec rand() ou avec randnorm().
RandSeed a toujours un argument entier, alors que randseed ou srand peut
ne pas avoir darguments (dans ce cas le gnrateur alatoire est intialis avec lhorloge du systme).
Ainsi, srand(n) (ou randseed(n) ou RandSeed(n)) avec n entier sert
initialiser la suite des nommbres alatoires pour que lon puisse obtenir la mme

606

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

suite alatoire avec rand() ou avec randnorm().


On tape :
srand
On obtient par exemple :
1054990506
On tape :
srand(121054990506)
On obtient :
121054990506
Ou on tape :
RandSeed(10549905061234)
On obtient par exemple :
10549905061234

7.3.2

Tirage quirparti rand alea hasard

Tirage quirparti sur [0, 1[ : rand() alea() hasard


rand() renvoie au hasard, de faon quiprobable, un nombre rel de [0, 1[.
On tape :
rand()
ou on tape
alea()
ou on tape (attention hasard nutilise pas de () et est utilis pour le langage de
la tortue)
hasard
On obtient par exemple :
0.912569261115
Pour avoir, au hasard, de faon quiprobable, un nombre de [0; 1[, on peut aussi
utiliser (voir le paragraphe suivant) :
rand(0,1)
On obtient :
0.391549611697

7.3. LES FONCTIONS ALATOIRES DE XCAS

607

Tirage alatoire quirparti sur lintervalle [a ;b[ : rand(a,b) hasard(a,b)


rand(a..b)() hasard(a..b)()
Si a et b sont des rels rand(a,b) dsigne un nombre dcimal alatoire
compris dans lintervalle [a; b[.
Donc, rand(a,b) ou (hasard(a,b)) renvoie au hasard, et de faon quiprobable, un nombre dcimal de [a; b[.
Pour avoir, au hasard et de faon quiprobable, un nombre dcimal de [0; 1[, on
tape :
rand(0,1)
On obtient :
0.391549611697
ou on tape (attention hasard utilise des () qui englobent hasard et sesparamtres
et hasard est utilis pour le langage de la tortue)
(hasard 0,1)
On obtient par exemple :
0.912569261115
Pour avoir, au hasard et de faon quiprobable, un nombre dcimal de [0; 0.5[, on
tape :
rand(0,0.5)
On obtient :
0.303484437987
Pour avoir, au hasard et de faon quiprobable, un nombre dcimal de ] 0.5; 0],
on tape :
rand(0,-0.5)
ou on tape :
rand(-0.5,0)
On obtient par exemple :
-0.20047219703
Si a et b sont des rels rand(a..b) ou alea(a..b) ou hasard(a..b)
dsigne une fonction qui est un gnrateur de nombres alatoires compris dans
lintervalle [a; b[.
Donc, rand(a..b)() renvoie au hasard, et de faon quiprobable, un nombre
dcimal de [a; b[.
Pour avoir, au hasard et de faon quiprobable, un nombre dcimal de [0; 1[, on
tape :
rand(0..1)()

608

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

On obtient :
0.391549611697
Pour avoir, au hasard et de faon quiprobable, plusieurs nombres alatoires dcimaux compris dans lintervalle [1; 2[, on tape :
r:=rand(1..2)
puis il suffit de taper r().
On tape :
r()
On obtient :
1.14160255529
Tirage alatoire dentiers quirpartis sur [0, .., n[ : rand(n) alea(n) hasard(n)
Si n est un entier relatif rand(n) ou hasard(n) renvoie au hasard, et de
faon quiprobable, un entier de [0, 1, .., n[ (ou de ]n, ..1, 0] si n est negatif).
On tape :
rand(2)
Ou on tape :
alea(2)
Ou on tape :
hasard(2)
ou
hasard 2
On obtient :
1
ou on obtient :
0
On tape :
rand(-2)
Ou on tape :
hasard(-2)
On obtient :
-1

7.3. LES FONCTIONS ALATOIRES DE XCAS

609

ou on obtient :
0
On tape pour avoir un entier alatoire entre 6 et 10, bornes comprises :
6+rand(11-6)
Ou on tape :
6+hasard(11-6)
On obtient par exemple :
8

7.3.3

Tirage alatoire sans remise de p objets parmi n : rand alea


hasard

rand a dans ce cas, soit 2, soit 3 arguments.


Si rand a 2 arguments : les arguments sont un entier p et une liste L alors rand(p,L)
renvoie, au hasard, p lments de la liste L.
Si rand a 3 arguments : les arguments sont trois entiers p,min,max alors rand(p,min,max)
renvoie, au hasard, p entiers de [min,..,max] On tape :
rand(3,["r","r","r","r","v","v","v"])
On obtient :
["r","r","v"]
On tape :
rand(2,1,10)
On obtient :
[3,7]
On tape :
rand(2,4,10)
On obtient :
[5,7]

610

7.3.4

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Tirage selon une loi binomiale : randbinomial

randbinomial(n,p) renvoie au hasard des nombres entiers rpartis selon la


loi binomiale B(n, p) de moyenne n*p et dcart type sqrt(n*p*(1-p)).
randbinomial(n,p) a pour valeur le nombre de succs dans une suite de n
tirages indpendants lorsque pour chaque tirage, un succs est de probabilit p.
On tape :
randbinomial(10,0.6)
On obtient par exemple :
4
ou on obtient par exemple :
8
On tape :
randbinomial(100,0.4)
On obtient par exemple :
43

7.3.5

Tirage selon une loi multinomiale : randmultinomial

randmultinomial(P) renvoie un index ou randmultinomial(P,K) renvoie un lment de la liste K, alatoirement distribu selon la loi multinomiale de
probabilits donne par la liste P.
On tape :
randmultinomial([1/2,1/3,1/6]
On obtient par exemple :
1
Ce qui correspond lindice de lobjet obtenu avec la probabilit 1/3.
On tape :
randmultinomial([1/2,1/3,1/6],["R","V","B"])
On obtient par exemple :
"R"

7.3. LES FONCTIONS ALATOIRES DE XCAS

7.3.6

611

Tirage selon une loi de Poisson : randpoisson

randpoisson() renvoie au hasard des nombres


entiers rpartisselon la loi de

Poisson P () de moyenne et dcart type .


On a :
k
Proba(X k)=exp() k! .
On tape :
randpoisson(10.6)
On obtient par exemple :
8
ou on obtient par exemple :
17
On tape :
randpoisson(2.4)
On obtient par exemple :
1

7.3.7

Tirage selon une loi normale : randnorm randNorm

randnorm(m,sigma) ou randNorm(m,sigma) renvoie au hasard des nombres


rpartis selon la loi normale de moyenne m et dcart type sigma.
On tape :
randnorm(0,1)
On obtient par exemple :
0.549605372982
ou on obtient par exemple :
-0.58946494465
On tape :
randnorm(2,1)
On obtient par exemple :
2.54178274488

612

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

7.3.8

Tirage selon une loi exponentielle : randexp

randexp(a) renvoie au hasard des nombres rpartis selon la loi exponentielle de


paramtre a positif.
La densit de probabilit
est proportionnelle exp(a t) et on a :
Rt
Proba(X t)=a 0 exp(a u)du.
On tape :
randexp(1)
On obtient par exemple :
0.310153677284
ou on obtient par exemple :
0.776007926195

7.3.9

Matrice alatoire : ranm randmatrix randMat

ranm (ou randmatrix ou randMat) (voir aussi 6.26.32 et 6.44.3) peut


avoir comme argument :
un entier s, dans ce cas ranm renvoie une liste de longueur s dont les lments sont des entiers pris au hasard de faon quiprobable dans :
[-99,-98,...,98,99].
On tape :
ranm(5)
On obtient par exemple :
[-40,27,4,-1,94]
deux entiers n,p, dans ce cas ranm renvoie une matrice de n lignes et p
colonnes dont les lments sont des entiers pris au hasard de faon quiprobable dans [-99,-98,...,98,99].
On tape :
ranm(2,3)
On obtient par exemple :
[[-32,53,-44],[10,-4,25]]
deux entiers n,p et un entier relatif a, dans ce cas ranm renvoie une matrice
de n lignes et p colonnes dont les lments sont des entiers pris au hasard de
faon quiprobable dans [0;a[ (ou ]a;0] si a est ngatif)
On tape :
ranm(2,3,10)
On obtient par exemple :
[[8,3,7],[7,9,1]]
deux entiers n,p et un intervalle a..b, dans ce cas ranm renvoie une matrice de n lignes et p colonnes dont les lments sont des rels pris au hasard
de faon quiprobable dans [a;b[.
On tape :
ranm(2,3,0..1)
On obtient par exemple :
[[0.840187716763,0.394382926635,0.783099223394],

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

613

[0.798440033104,0.911647357512,0.197551369201]]
deux entiers n,p et une fonction alatoire de Xcas quil faut quoter, dans
ce cas ranm renvoie une matrice de n lignes et p colonnes dont les lments
sont pris au hasard selon la fonction donne en troisime argument.
Les fonctions donnes en troisime argument qui doivent tre quoter, peuvent
tre :
rand(n)
binomial(n,p) ou binomial,n,p ourandbinomial(n,p)
multinomial(P,K) ou multinomial,P,K ou randmultinomial(P,K)
poisson() ou poisson, ou randpoisson()
normald(,) ou normald,, ou randnorm(,)
exp(a) ou exp,a ou randexp(a)
fisher(n,m) ou fisher,n,m ou randfisher(n,m)
On tape :
ranm(3,2,rand(3))
ou
ranm(3,2,3)
On obtient par exemple :
[[2,1],[0,0],[1,0]]
On tape :
ranm(1,2,randnorm(0,1))
On obtient par exemple :
[[1.37439065645,-1.33195982697]]

7.4
7.4.1

Densit, fonction de rpartition et leur inverse


Probabilit que X gale k lorsque X B(n, p) : binomial

La probabilit pour que X gale k lorsque X B(n, p) (k (0 k n) est nombre


de succs lors de n tirages indpendants (i.e.avec remise) de probabilit p) est gale
:
binomial(n,k,p)=comb(n,k)*p^k*(1-p)^(n-k).
Le troisime paramtre est gal par dfaut 1, on a donc dans ce cas :
binomial(n,k)=comb(n,k).
On tape :
binomial(10,2,0.4)
On obtient :
0.120932352
On tape :
binomial(4,2,0.5)
On obtient :
0.375

614

7.4.2

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Fonction de rpartition de la loi binomiale : binomial_cdf

Lorsquune variable alatoire X suit une loi binomiale B(n, p), on a :


binomial_cdf(n,p,x)=P roba(X x)=
binomial(n,0,p)+...+binomial(n,floor(x),p).
binomial_cdf(n,p,x,y)=P roba(x X y)=
binomial(n,ceil(x),p)+...+binomial(n,floor(y),p).
On tape :
binomial_cdf(4,0.5,2)
On obtient :
0.6875
On peut vrifier que :
binomial(4,0,0.5)+binomial(4,1,0.5)+binomial(4,2,0.5)
=0.6875
On tape :
binomial_cdf(2,0.3,1)
On obtient :
0.91
On tape :
binomial_cdf(2,0.3,1,2)
On obtient :
0.51

7.4.3

Fonction de rpartition inverse de la loi binomiale : binomial_icdf

Lorsquune variable alatoire X suit une loi binomiale B(n, p), si on a :


binomial_icdf(n,p,x)=h cest que
P roba(X h) = x=binomial_cdf(n,p,h).
On tape :
binomial_icdf(4,0.5,0.9)
On obtient :
3
On tape :
binomial_icdf(2,0.3,0.95)
On obtient :
2

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.4

615

Probabilit que X gale k lorsque X N egBin(n, p) : negbinomial

La loi binomiale ngative est une distribution de probabilit discrte. Elle dpend
de 2 paramtres : un entier n (le nombre de succs attendus) et un rel p de ]0, 1[
(la probabilit dun succs).
On la note N egBin(n, p).
Elle permet de dcrire la situation suivante : on fait une suite de tirages indpendants (avec pour chaque tirage, la probabilit p davoir un succs) jusqu obtenir
n succs. La variable alatoire reprsentant le nombre dchecs quil a fallut avant
davoir n succs, suit alors une loi binomiale ngative.
Cette loi est aussi connue sous le nom de loi de Pascal en lhonneur de Blaise Pascal et de loi de Polya, en lhonneur de George Plya.
negbinomial(n,p,k)=comb(n+k 1, k)pn (1p)k pour k = 0, 1, 2.. La
loi se gnralise pour deux paramtres r et p, o r peut prendre des valeurs relles
strictement positives. On a alors :
(r + k) r k
negbinomial(r,p)=
p q
k! (r)
Remarque
Si on dfinit comb(n,k) pour n < 0 par comb(n,k)=n*(n-1)*..*(n-k-1)/k!,
alors Si X N egBin(n, p) (n N et p [0; 1]) alors Proba(X = k) = pn (p 1)k comb(n, k)
ce qui justifie le nom de loi binomiale ngative et qui facilite le calcul de lesprance (gale n(1 p)/p) et de la variance (gale n(1 p)/p2 ).
On tape :
negbinomial(10,12,0.4)
On obtient :
0.0670901607617
On tape :
negbinomial(4,2,0.5)
On obtient :
0.15625
On tape :
negbinomial(1,2,0.4)
On obtient 0.62 0.4 soit :
0.144

7.4.5

Fonction de rpartition de la loi binomiale ngative : negbinomial_cdf

Lorsquune variable alatoire X suit une loi binomiale ngative N egBin(n, p), on
a:
negbinomial_cdf(n,p,x)=P roba(X x)=
negbinomial(n,0,p)+...+negbinomial(n,floor(x),p).
negbinomial_cdf(n,p,x,y)=P roba(x X y)=
negbinomial(n,ceil(x),p)+...+negbinomial(n,floor(y),p).
On tape :

616

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


negbinomial_cdf(4,0.5,2)

On obtient :
0.34375
On peut vrifier que :

negbinomial(4,0,0.5)+negbinomial(4,1,0.5)+negbinomial(4,2,0.5)
0.34375
On tape :
negbinomial_cdf(2,0.3,1)
On obtient :
0.216
On tape :
negbinomial_cdf(2,0.3,3)
On obtient :
0.47178

7.4.6

Fonction de rpartition inverse de la loi binomiale ngative :


negbinomial_icdf

Lorsquune variable alatoire X suit une loi binomiale ngative N egBin(n, p),
lorsquon a negbinomial_icdf(n,p,x)=h cest que
P roba(X h) = x=negbinomial_cdf(n,p,h).
On tape :
negbinomial_icdf(4,0.5,0.9)
On obtient :
8
On tape :
negbinomial_icdf(2,0.3,0.95)
On obtient :
12
Les programmes naifs pour calculer les fonctiond prcdentes

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

617

negbino(n,p,k):=comb(-n,k)*p^n*(p-1)^k;
negbin(n,p,k):=comb(n+k-1,k)*p^n*(1-p)^k;
negbi(n,p,k):=(n+k-1)!/k!/(n-1)!*p^n*(1-p)^k;
negbino_cdf(n,p,x):=sum(negbi(n,p,k),k=0..floor(x));
negbino_icdf(n,p,x):={
local k:=0;
tantque negbino_cd(n,p,k)<x faire
k:=k+1;
ftantque;
return k;
}:;

7.4.7

Probabilit que X gale [k0 , k1 ..kj ] + K lorsque X suit une loi


multinomiale de probabilit [p0 , p1 , ..pj ] = P : multinomial

La probabilit pour que X gale K = [k0 , k1 ..kj ] (avec k0 + .. + kj = n) lorsque


X suit une loi multinomiale de probabilit P = [p0 , p1 , ..pj ] (avec p0 +..+pj = 1)
est :
n!
k
multinomial(n, P, K) =
(pk00 pk11 ..pj j )
(k0 !k1 !..kj !)
Remarque multinomial(n,P,K) avec P = [p0 , p1 , ..pj ] et K = [k0 , k1 ..kj ]
k
renvoie (k0 !kn!
(pk00 pk11 ..pj j ) mme si p0 + .. + pj 6= 1 mais renvoie une erreur
1 !..kj !)
si k0 + .. + kj 6= n.
On tape :
multinomial(10,[0.2,0.3,0.5],[3,2,5])
On obtient :
0.0567
On vrifie :
10!/(3! 2! 5!) 0.23 0.32 0.55 = 0.0567.
Donc la probabilit dobtenir [3,2,5] (3 fois lobjet ayant la probabilit 0.2 dtre
tir, 2 fois lobjet ayant la probabilit 0.3 dtre tir et 5 fois lobjet ayant la probabilit 0.5 dtre tir) lors de 10 tirages dun objet parmi ces 3 objets est 0.0567.
On tape :
multinomial(4,[0.5,0.5],[2,2])
Ou on tape :
binomial(4,2,0.5)
On obtient :
0.375

618

7.4.8

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Probabilit pour que X gale k lorsque X P() : poisson

La densit de probabilit de la loi de Poisson de paramtre mu, cest dire de


moyenne mu et dcart-type mu est :
poisson(mu,k)= exp(-mu)*mu^k/k!=P roba(X = k) avec X P(mu).
On tape :
poisson(10.0,9)
On obtient :
0.125110035721

7.4.9

Fonction de rpartition de Poisson : poisson_cdf

Lorsquune variable alatoire X suit une loi de Poisson de paramtre mu, cest
dire de moyenne mu et dcart-type mu, on a :
P roba(X x)=poisson_cdf( mu,x) avec X P(mu). et
P roba(x1 X x2)=poisson_cdf(mu,x1,x2)=poisson_cdf(mu,x1)+...+poisson_c
cest dire :
poisson_cdf(mu,x1,x2)=poisson_cdf(mu,x2)-poisson_cdf(mu,x1-1)
poisson_cdf(mu,x) est la fonction de rpartition de la loi de Poisson de paramtre mu, On tape :
poisson_cdf(10.0,3)
On obtient :
0.0103360506759
On tape :
poisson_cdf(10.0,3,10)
On obtient :
0.572703699517

7.4.10

Fonction de rpartition inverse de Poisson : poisson_icdf

Lorsquune variable alatoire X suit une loi de Poisson de paramtre mu, cest
dire de moyenne mu et dcart-type mu, on a :
poisson_icdf(mu,t)= h quivaut
P roba(X h) =t= poisson_cdf(mu,h) avec X P(mu).
poisson_icdf(mu,t) est linverse de la fonction de rpartition de la loi de
Poisson de paramtre mu, On tape :
poisson_icdf(10.0,0.975)
On obtient :
0.125110035721

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.11

619

Densit de probabilit de la loi normale : loi_normale


normald

normald(x) ou loi_ normale(x) est la densit de probabilit de la


loi normale centre rduite (de moyenne 0 et dcart-type 1).
normald(x) ou loi_ normale(x) est gale :
1 x2
e 2
2
normald(, ,x) est la densit de probabilit de la loi normale de moyenne
et dcart-type ,
1 (x) 2
1
normald(, ,x), est gale e 2 ( )
2
On tape :
normald(1)
On obtient :
exp(-1/2)/sqrt(2*pi)
On tape :
normald(2,1,3)
On obtient :
exp(-1/2)/sqrt(2*pi)

7.4.12

Fonction de rpartition de la loi normale : normal_cdf normald_cdf

Lorsquune variable alatoire X suit une loi normale centre rduite, on a : P roba(X
x)= normal_cdf(x) et
P roba(x X y)= normal_cdf(x,y) et
Lorsquune variable alatoire X suit une loi normale de moyenne et dcart-type
, on a :
P roba(X x)= normal_cdf(, ,x).
P roba(x X y)= normal_cdf(, ,x,y).
On tape :
normal_cdf(1.96)
On obtient :
0.975002104852
On tape :
normal_cdf(0,1.96)
On obtient :
0.475002104852

620

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

car normal_cdf(0)=1/2 et 0.975002104852-0.5=0.475002104852


On tape :
normal_cdf(1,2,1.96)
On obtient :
0.684386303484
On tape :
normal_cdf(1,2,1.1,2.9)
On obtient :
0.309005067853

7.4.13

Fonction de rpartition inverse normale : normal_icdf normald_icdf

Lorsquune variable alatoire X suit une loi normale centre rduite, si on a normal_icdf(x)=h
cest que lon a :
P roba(X h)=x=normal_cdf(h).
Lorsquune variable alatoire X suit une loi normale de moyenne et dcart-type
, si on a normal_icdf(, ,x)=h cest que lon a :
P roba(X h)=x=normal_cdf(, ,h).
On tape :
normal_icdf(0.975)
On obtient :
1.95996398454
On tape :
normal_icdf(1,2,0.495)
On obtient :
0.974933060984
On tape :
normal_icdf(1,2,normal_cdf(1,2,0.975))
On obtient :
0.975
On tape :
normal_cdf(1,2,normal_icdf(1,2,0.495))
On obtient :
0.495

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.14

621

Complment 1 de la fonction de rpartition de la loi normale :


UTPN

Lorsquune variable alatoire X suit une loi normale centre rduite, on a : P roba(X >
x)= UTPN(x).
Lorsquune variable alatoire X suit une loi normale de moyenne et de variance
v, on a : P roba(X > x) = UTPN(,v,x).
On tape :
UTPN(1.96)
On obtient :
0.0249978951482
On tape :
UTPN(1,4,1.96)
On obtient :
0.315613696516
Attention
Les paramtres de UTPN sont la moyenne de X, la variance de X, et la valeur x,
alors que, pour normal_cdf les paramtres sont la moyenne de X, lcart-type
de X et la valeur x.
On tape :
UTPN(1.96)+normal_cdf(1.96)
On obtient :
1
On tape :
UTPN(1,4,1.96)+normal_cdf(1,2,1.96)
On obtient :
1

7.4.15

Densit de probabilit de la loi de Student : student studentd

student(n,x) est la densit de probabilit de la loi de Student ayant n degrs


de libert.

 n1
2
( n+1
)
x2
2
student(n,x), est gale : n
1+
n
( 2 ) n
R
o est dfinie pour x > 0 par (x) = 0 et tx1 dt
On tape :
student(2,3)
On obtient :

622

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


Gamma(3/2)*sqrt(11/2)^-1*2/(sqrt(2*pi)*11)

On tape :
evalf(student(2,3))
On obtient :
0.0274101222343

7.4.16

Fonction de rpartition de la loi de Student : student_cdf

Lorsquune variable alatoire X suit une loi de Student ayant n degrs de libert, on a :
P roba(X x)= student_cdf(n,x).
P roba(x X y)= student_cdf(n,x,y).
On tape :
student_cdf(5,2)
On obtient :
0.949030260585
On tape :
student_cdf(5,-2)
On obtient :
0.0509697394149
On tape :
student_cdf(5,-2,2)
On obtient :
0.89806052117
car 0.949030260585 0.0509697394149 = 0.89806052117

7.4.17

Fonction de rpartition inverse de Student : student_icdf

Lorsquune variable alatoire X suit une loi de Student ayant n degrs de libert,
si on a student_icdf(n,x)=h cest que :
P roba(X h)=x=student_cdf(n,h).
On tape :
student_icdf(5,0.95)
On obtient :
2.01504837333

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.18

623

Complment 1 de la fonction de rpartition de la loi de Student :


UTPT

Lorsquune variable alatoire X suit une loi de Student ayant n degrs de libert,
on a : P roba(X > x)= UTPT(n,x).
On tape :
UTPT(5,2)
On obtient :
0.0509697394149

7.4.19

Densit de probabilit de la loi du 2 : chisquare chisquared

chisquare(n,x) est la densit de probabilit de la loi du 2 ayant n degrs de


libert.
n
x
1
chisquare(n,x), est gale n n x 2 1 e 2 o est dfinie pour x > 0
2
2 ( 2 )
R
par (x) = 0 et tx1 dt
On tape :
chisquare(5,2)
On obtient :
sqrt(2)*2*exp(-1)/(Gamma(5/2)*sqrt(2)*2^2)
On tape :
evalf(chisquare(5,2))
On obtient :
0.138369165807

7.4.20

Fonction de rpartition de la loi du 2 : chisquare_cdf

Lorsquune variable alatoire X suit une loi du 2 ayant n degrs de libert, on a :


P roba(X x)= chisquare_cdf(n,x).
P roba(x X y)= chisquare_cdf(n,x,y).
On tape :
chisquare_cdf(5,11)
On obtient :
0.948620016517
On tape :
chisquare_cdf(3,11)
On obtient :
0.988274124422

624

7.4.21

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Fonction inverse de la fonction de rpartition de la loi du 2 :


chisquare_icdf

Lorsquune variable alatoire X suit une loi du 2 ayant n degrs de libert, si on


a chisquare_icdf(n,x)=h cest que :
P roba(X h)=x= chisquare_cdf(n,h).
On tape :
chisquare_icdf(5,0.95)
On obtient :
11.0704976935

7.4.22

Complment 1 de la fonction de rpartition de la loi du 2 :


UTPC

Lorsquune variable alatoire X suit une loi du 2 ayant n degrs de libert, on a :


P roba(X > x)= UTPC(n,x).
On tape :
UTPC(5,11)
On obtient :
0.0513799834831

7.4.23

Densit de probabilit de la loi de Fisher-Sndcor : fisher


fisherd snedecor snedecord

fisher(n1,n2,x) ou snedecor(n1,n2,x) est a densit de probabilit de


la loi de Fisher-Sndcor ayant n1,n2 degrs de libert.
fisher(n1,n2,x), vaut pour x 0 :

 n1n2
n1
2
n12
n1 2 ( n1+n2
n1
2 )
x 2
1 + ( )x
n1
n2
n2 ( 2 )( 2 )
n2
R
o est dfinie pour x > 0 par (x) = 0 et tx1 dt
On tape :
fisher(5,3,2.5)
Oo on tape :
snedecor(5,3,2.5)
On obtient :
0.10131184472
On tape :
fisher(4,2,1)
On obtient :

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

625

8/27
On tape :
fisher(4,2,1)
On obtient :
8/27

7.4.24

La fonction de rpartition de la loi de Fisher-Sndcor : fisher_cdf


snedecor_cdf

Lorsquune variable alatoire X suit une loi de Fisher-Sndcor ayant degrs de


libert n1, n2, on a :
P roba(X x)= fisher_cdf(n1,n2,x)=snedecor_cdf(n1,n2,x).
P roba(x X y)= fisher_cdf(n1,n2,x,y)=snedecor_cdf(n1,n2,x,y).
On tape :
fisher_cdf(5,3,9)
Ou on tape :
snedecor_cdf(5,3,9)
On obtient :
0.949898927032
On tape :
fisher_cdf(3,5,9)
On obtient :
0.981472898262

7.4.25

Inverse de la fonction de rpartition de la loi de Fisher-Sndcor :


fisher_icdf snedecor_icdf

Lorsquune variable alatoire X suit une loi de Fisher-Sndcor ayant comme degrs de libert n1, n2, si on a :
fisher_icdf(n1,n2,x)=h cest que :
P roba(X h)=x=fisher_cdf(n1,n2,h).
On tape :
fisher_icdf(5,3,0.95)
Ou on tape :
snedecor_icdf(5,3,0.95)
On obtient :
9.01345516752

626

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

On tape :
1/fisher_icdf(3,5,0.05)
On obtient :
9.01345516752
Remarque :
fisher_icdf(n1,n2,p)=1/fisher_icdf(n2,n1,1-p)

7.4.26

Complment 1 de la fonction de rpartition de la loi de FisherSndcor : UTPF

Lorsquune variable alatoire X suit une loi de Fisher-Sndcor ayant comme degrs de libert n1, n2, on a : P roba(X > x)= UTPF(n1,n2,x).
On tape :
UTPF(5,3,9)
On obtient :
0.050101072968

7.4.27

Densit de probabilit de la loi gamma : gammad

gammad a 3 paramtres : deux rels a, b strictement positifs et un rel x positif ou


nul.
gammad(a,b,x) renvoie la densit de probabilit de la loi gamma savoir :
x( a 1) exp(bx) ba /(a)
On tape :
gammad(2,1,3)
On obtient :
3/exp(3)
On tape :
gammad(2.2,1.5,0.8)
On obtient :
0.510330619114

7.4.28

Fonction de rpartition de la loi gamma : gammad_cdf

Lorsquune variable alatoire X suit une loi gamma de paramtre a et b, on a :


P roba(X x)= gammad_cdf(a,b,x).
P roba(x X y)= gammad_cdf(a,b,x,y).
On a :
gammad_cdf(a,b,x) est gale igamma(a,b*x,1) et
gammad_cdf(a,b,x,y) est gale igamma(a,b*y,1)-igamma(a,b*x,1)
On rappelle que :
Rx
igamma(a,x) est gale int(e^-t*t^(a-1),t=0..x) ( 0 et ta1 dt)
et que
igamma(a,x,1) est gale igamma(a,x)/Gamma(a) On tape :

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

627

gammad_cdf(2,1,0.53181160839)
On obtient :
0.1
On tape :
gammad_cdf(2,1,1.67834699002)
On obtient :
0.500000000001

7.4.29

Fonction de rpartition inverse de la loi gamma : gammad_icdf

Lorsquune variable alatoire X suit une loi gamma de paramtre a et b, si on a


gammad_icdf(a,b,x)=h cest que lon a :
P roba(X h)=x=gammad_cdf(a,b,h).
On tape :
gammad_icdf(2,1,0.5)
On obtient :
1.67834699002
On tape :
gammad_icdf(2,1,0.1)
On obtient :
0.53181160839

7.4.30

Densit de probabilit de la loi beta : betad

betad a 3 paramtres : deux rels a, b strictement positifs et un rel x de [0, 1].


betad(a,b,x) renvoie la densit de probabilit de la loi beta savoir :
(a + b) x( a 1) (1 x)( b 1)/((a) (b))
On tape :
betad(2,1,0.3)
On obtient :
0.6
On tape :
betad(2.2,1.5,0.8)
On obtient :
1.46143068876

628

7.4.31

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Fonction de rpartition de la loi beta : betad_cdf

Lorsquune variable alatoire X valeur dans [0,1] suit une loi beta de paramtre
a et b, on a :
P roba(X x)= betad_cdf(a,b,x) avec x [0, 1].
P roba(x X y)=betad_cdf(a,b,x,y) avec x [0, 1] et y [0, 1].
On a :
(a, b, x) (a + b)
betad_cdf(a,b,x) est gale
et
(a) (b)
betad_cdf(a,b,x,y) est gale :
(a + b) ((a, b, y) (a, b, x))
(b) (a)
On rappelle que lon a :
Beta(a,b) est gale int(t^(a-1)*(1-t)^(b-1),t=0..1) ,
Beta(a,b,p) est gale int(t^(a-1)*(1-t)^(b-1),t=0..p) ,
Beta(a,b,p,1) est gale =Beta(a,b,p)/Beta(a,b)
On tape :
betad_cdf(2,3,0.2)
On obtient :
0.1808
On tape :
betad_cdf(2,3,0.9)
On obtient :
0.9963

7.4.32

Fonction de rpartition inverse de la loi beta : betad_icdf

Lorsquune variable alatoire X suit une loi beta de paramtre a et b, si on a


betad_icdf(a,b,x)=h cest que lon a :
P roba(X h)=x=betad_cdf(a,b,h).
On tape :
betad_icdf(2,3,0.1808)
On obtient :
0.2
On tape :
betad_icdf(2,3,0.9963)
On obtient :
0.9

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.33

629

Densit de probabilit de la loi gomtrique : geometric

geometric a 2 paramtres : un rel p de ]0, 1[ et un entier n 1.


geometric(p,n) renvoie la densit de probabilit de la loi gomtrique savoir : (1 p)n1 p
On tape :
geometric(0.2,3)
On obtient :
0.128
On tape :
geometric(0.5,5)
On obtient :
0.03125

7.4.34

Fonction de rpartition de la loi gomtrique : geometric_cdf

Lorsquune variable alatoire X valeur dans N suit une loi gomtrique de paramtre p (0 < p < 1), on a :
P roba(X x)= geometric_cdf(p,x) avec x N .
P roba(x X y)=geometric_cdf(r,x,y) avec x N et y N .
On a :
geometric_cdf(p,x) est gale 1 (1 p)x et
geometric_cdf(p,x,y) est gale :
(1 p)x1 (1 p)y
On tape :
geometric_cdf(0.2,3)
On obtient :
0.488
On tape :
geometric_cdf(0.2,5)
On obtient :
0.67232
On tape :
geometric_cdf(0.2,3,5)
On obtient :
0.18432
On tape :

630

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


geometric_cdf(0.5,1)

On obtient :
0.5
On tape :
geometric_cdf(0.5,5)
On obtient :
0.96875
On tape :
geometric_cdf(0.5,1,5)
On obtient :
0.46875

7.4.35

Fonction de rpartition inverse de la loi gomtrique : geometric_icdf

Lorsquune variable alatoire X suit une loi gomtrique de paramtre p (0 < p <
1), si on a geometric_icdf(p,x)=h avec x [0, 1] cest que lon a :
P roba(X h)=x=geometric_cdf(p,h).
On tape :
geometric_icdf(0.2,0.488)
On obtient :
3
On tape :
geometric_icdf(0.5,0.5)
On obtient :
1

7.4.36

Densit de probabilit de la loi de Cauchy : cauchy cauchyd

cauchyd a 1 ou 3 paramtres : deux rels a, b strictement positifs (par dfaut


a = 0 et b = 1) et un rel x.
cauchyd(a,b,x) renvoie la densit de probabilit de la loi de Cauchy savoir :
1
cauchy(x)= 2
(x + 1) pi
b
cauchy(a,b,x)=
((x a)2 + b2 ) pi
On tape :
cauchyd(0.3)

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

631

Ou on tape :
cauchyd(0,1,0.3)
On obtient :
0.292027418517
On tape :
cauchyd(2,1,3)
On obtient :
1/(2*pi)
On tape :
cauchy(2.2,1.5,0.8)
On obtient :
0.113412073462

7.4.37

Fonction de rpartition de la loi de Cauchy : cauchy_cdf


cauchyd_cdf

Lorsquune variable alatoire X valeur dans R suit une loi de Cauchy de paramtre a et b, on a :
P roba(X x)= cauchy_cdf(a,b,x) avec x R.
P roba(x X y)=cauchy_cdf(a,b,x,y) avec x R et y R.
On a :
1 1
xa
cauchy_cdf(a,b,x) est gale + atan(
) et
2
b
cauchy_cdf(a,b,x,y) est gale :
1
ya
xa
(atan(
) atan(
))

b
b
On tape :
cauchy_cdf(2,3,1.4)
On obtient :
0.437167041811
On tape :
cauchy_cdf(2,3,-1.9)
On obtient :
0.20871440016
On tape :
cauchy_cdf(2,3,-1.9,1.4)
On obtient :
0.228452641651

632

7.4.38

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Fonction de rpartition inverse de la loi de Cauchy : cauchy_icdf


cauchyd_icdf

Lorsquune variable alatoire X suit une loi de Cauchy de paramtre a et b, si on a


cauchy_icdf(a,b,p)=h avec p [0, 1] cest que lon a :
P roba(X h)=p=cauchy_cdf(a,b,h).
On tape :
cauchy_icdf(2,3,0.23)
On obtient :
-1.40283204777
On tape :
cauchy_icdf(2,3,0.44)
On obtient :
1.42771939334

7.4.39

Densit de probabilit de la loi uniforme : uniform uniformd

uniformd a 3 paramtres : deux rels a, b strictement positifs et un rel x de


[a, b].
uniformd(a,b,x) renvoie la densit de probabilit de la loi uniforme savoir :
1
On tape :
uniform(a,b,x)= ba
uniform(2,5,4)
On obtient :
1/3
On tape :
uniform(2.2,3.5,2.8)
On obtient :
0.769230769231

7.4.40

Fonction de rpartition de la loi uniforme : uniform_cdf


uniformd_cdf

Lorsquune variable alatoire X valeur dans [a, b] suit une loi uniforme de paramtre a et b, on a :
P roba(X x)=uniform_cdf(a,b,x) avec x [a, b].
P roba(x X y)=uniform_cdf(a,b,x,y) avec x [0, 1] et y [0, 1].
On a :
xa
et
uniform_cdf(a,b,x) est gale :
ba
yx
uniform_cdf(a,b,x,y) est gale :
ba
On tape :

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

633

uniform_cdf(2,4,3.2)
On obtient :
0.6
On tape :
uniform_cdf(2,3,2.5)
On obtient :
0.5

7.4.41

Fonction de rpartition inverse de la loi uniforme : uniform_icdf


uniformd_icdf

Lorsquune variable alatoire X suit une loi uniforme de paramtre a et b, si on a


uniform_icdf(a,b,x)=h avec x [0, 1] cest que lon a :
P roba(X h)=x=uniform_cdf(a,b,h).
On tape :
uniform_icdf(2,3,0.5)
On obtient :
2.5
On tape :
uniform_icdf(2,3,0.9963)
On obtient :
2.9963

7.4.42

Densit de probabilit de la loi exponentielle : exponential


exponentiald

exponential ou exponentiald a 2 paramtres : un rel strictement positifs et un rel x positif ou nul.


exponentiald(lambda,x) renvoie la densit de probabilit de la loi exponentielle savoir :
exp(x) On tape :
exponential(2.1,3.5)
On obtient :
0.00134944395675
On tape :
exponential(2.1,0.5)
On obtient :
0.734869273133

634

7.4.43

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

Fonction de rpartition de la loi de exponentielle : exponential_cdf


exponentiald_cdf

Lorsquune variable alatoire X valeur dans R+ suit une loi exponentielle de


paramtre > 0 on a :
P roba(X x)= exponential_cdf(lambda,x) avec x 0.
P roba(x X y)=exponential_cdf(lambda,x,y) avec x 0 et y
0.
On a :
exponential_cdf(lambda,x) est gale 1 exp( x) et
exponential_cdf(lambda,x,y) est gale :
exp( x) exp( y)
On tape :
exponential_cdf(2.3,3.2)
On obtient :
0.99936380154
On tape :
exponential_cdf(2.3,0.9)
On obtient :
0.873814218295
On tape :
exponential_cdf(2.3,0.9,3.2)
On obtient :
0.125549583246

7.4.44

Fonction de rpartition inverse de la loi exponentielle : exponential_icdf


exponentiald_icdf

Lorsquune variable alatoire X suit une loi exponentielle de paramtre > 0, si


on a exponential_icdf(lambda,p)=h avec p [0, 1] cest que lon a :
P roba(X h)=p=exponential_cdf(lambda,h).
On tape :
exponential_icdf(2.3,0.87)
On obtient :
0.887052534142
On tape :
exponential_icdf(2.3,0.5)
On obtient :
0.301368339374

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.45

635

Densit de probabilit de la loi de Weibull : weibull weibulld

weibulld a 3 ou 4 paramtres : deux rels k, strictement positifs et 1 ou 2 rels


, x positif ou nul (par dfaut = 0).
weibull(k,lambda,theta,x) renvoie la densit de probabilit de la loi de
Weibull savoir :
k x k1
x k
(
)
exp((
) )

On tape :
weibull(2,1,3)
Ou on tape :
weibull(2,1,0,3)
On obtient :
6/exp(9)
On tape :
weibull(2.2,1.5,0.8)
On tape :
weibull(2.2,1.5,0.0,0.8)
On tape :
weibull(2.2,1.5,0.4,1.2)
On obtient :
0.536773868051

7.4.46

Fonction de rpartition de la loi de Weibull : weibull_cdf


weibulld_cdf

Lorsquune variable alatoire X valeur dans R+ suit une loi de Weibull de paramtres rels k, strictement positifs et positif ou nul (par dfaut = 0), on a :
P roba(X x)= weibull_cdf(k,lambda,theta,x) avec x R+ .
P roba(x X y)=weibull_cdf(k,lambda,theta,x,y) avec x R+
et y R+ .
On a :
x k
weibull_cdf(k,lambda,theta,x) est gale 1 exp((
) ) et

weibull_cdf(k,lambda,theta,x,y) est gale :


x k
y k
) ) exp((
) )
exp((

On tape :
weibull_cdf(2,3,5)
Ou on tape :
weibull_cdf(2,3,0,5)

636

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

On obtient :
1-exp(-25/9)
On tape :
weibull_cdf(2,3,1.9)
On obtient :
0.330424340391
On tape :
weibull_cdf(2.2,1.5,0.4,1.9)
On obtient :
0.632120558829
On tape :
weibull_cdf(2.2,1.5,0.4,1.2)
On obtient :
0.221853318885
On tape :
weibull_cdf(2.2,1.5,0.4,1.2,1.9)
On obtient :
0.410267239944

7.4.47

Fonction de rpartition inverse de la loi de Weibull : weibull_icdf


weibulld_icdf

Lorsquune variable alatoire X suit une loi de Weibull de paramtre rels k,


strictement positifs et positif ou nul (par dfaut = 0), si on a weibull_icdf(k,lambda,theta,
avec p [0, 1] cest que lon a :
P roba(X h)=p=weibull_cdf(k,lambda,theta,h).
On tape :
weibull_icdf(2,3.5,0.5)
On obtient :
2.91394113905
On tape :
weibull_icdf(2.2,1.5,0.4,0.632)
On obtient :
1.89977657604

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

7.4.48

637

Distribution de Kolmogorov-Smirnov : kolmogorovd

kolmogorovd(x) renvoie la distribution de Kolmogorov-Smirnov savoir :


12

+
X

(1)k1 exp(k 2 x2 )

k=1

On tape :
kolmogorovd(1.36)
On obtient :
0.950514123245

7.4.49

Test de Kolmogorov-Smirnov : kolmogorovt

kolmogorovt(l1,l2) renvoie le test de Kolmogorov-Smirnov dadquation


une loi de distribution continue, entre 2 chantillons l1 et l2 lorsque la loi est
inconnue, ou
kolmogorovt(l1,s) renvoie le test de Kolmogorov-Smirnov dadquation
une loi de distribution continue, entre un chantillon l1 et une loi s.
On tape :
kolmogorovt(randvector(100,normald,0,1),
randvector(100,normald,0,1))
On obtient :
[0.21,1.48492424049]
On tape :
kolmogorovt(randvector(100,normald,0,1),normald(0,1))
On obtient :
[0.0797807811891,0.797807811891]

7.4.50

Fonction gnratrice des moments dune loi de probabilit :


mgf

mgf a comme paramtres le nom dune loi de probabilit (parmi les lois : normale,
binomiale, Poisson, beta, gamma) et les paramtres de cette loi.
mgf renvoie la fonction gnratrice des moments de cette loi de probabilit.
On tape :
mgf(normald,1,0)
On obtient :
exp(t)
On tape :

638

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


mgf(poisson,5)

On obtient :
exp(5*(exp(t)-1))
On tape :
mgf(binomial,n,p)
On obtient :
(1-p+p*exp(t))^n

7.4.51

Distribution cumule pour une loi de probabilit : cdf

cdf a comme paramtre le nom dune loi de probabilit suivi des paramtres de
cette loi.
cdf renvoie la distribution cumule pour cette loi de probabilit. On tape :
cdf(binomial,10,0.5,4)
On obtient :
0.376953125
On tape :
cdf(normald,0.0,1.0,2.0)
On obtient :
0.977249868052
On tape :
cdf(betad,2,3,0.9963)
On obtient :
0.99999979795

7.4.52

Distribution cumule inverse pour une loi de probabilit : icdf

cdf a comme paramtre le nom dune loi de probabilit suivi des paramtres de
cette loi.
icdf renvoie la distribution cumule inverse pour cette loi de probabilit.
On tape :
icdf(binomial,10,0.5,0.6)
On obtient :
5
On tape :

7.4. DENSIT, FONCTION DE RPARTITION ET LEUR INVERSE

639

icdf(normald,0.0,0.5,0.975)
On obtient :
0.97998199227
On tape :
icdf(betad,2,3,0.9963)
On obtient :
0.9

7.4.53

Chaine de Markov : markov

markov(M) calcule des lments caractristiques dune matrice de transition dune


chaine de Markov M.
markov(M) renvoie la liste des suites dtats rcurrents positifs, la liste des probabilits stationnaires correspondantes, la liste des autres composantes fortement
connexes, la liste des probabilits de finir sur les tats rcurrents positifs.
On tape :
markov([[0,0,1/2,0,1/2],[0,0,1,0,0],[1/4,1/4,0,1/4,1/4],
[0,0,1/2,0,1/2],[0,0,0,0,1]])
On obtient :
[[4]],[[0,0,0,0,1]],[[3,1,2,0]],[[1],[1],[1],[1],[1]]

7.4.54

Gnration dune marche alatoire sur un graphe dtat : randmarkov

randmarkov(M,i0,n) gnre une suite de n tats (chaine de Markov) partant


de i0 dont les probabilites de transitions sont donnes par M (matrice stochastique)
ou
randmarkov(v,i0) gnre une matrice stochastique ayant p boucles rcurrentes v=[n1,...,np] et i0 tats transients
randmarkov(M,i0,n) renvoie la liste des tats qui a n+1 lments.
On tape :
randmarkov([[0,0,1/2,0,1/2],[0,0,1,0,0],[1/4,1/4,0,1/4,1/4],
[0,0,1/2,0,1/2],[0,0,0,0,1]],2,20)
On obtient par exemple :
[2,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
On tape :
randmarkov([1,2,1,3],4)
On obtient :
une matrice carre de dimension [11,11]
en effet 1 + 2 + 1 + 3 + 4 = 11

640

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

7.5
7.5.1

Les tests dhypothses


Gnralits

Concernant une variable alatoire X, on veut comparer la valeur effective dun


paramtre p une valeur attendue p0 . Il sagit de savoir si la valeur observe sur un
chantillon est vraisemblable avec p = p0
Test statistique : procdure conduisant au vu de lchantillon rejeter, avec un
certain risque derreur une hypothse que lon cherche tester appele H0 . La
procdure de test est fonde sur une opposition dhypothses et on note H1 lhypothse alternative.
Test bilatral : test pour lequel lhypothse H0 est rejete, si la statistique utilise
prend une valeur en dehors dun intervalle. Test unilatral droite : test pour lequel lhypothse H0 est rejete, si la statistique utilise prend une valeur infrieure
une valeur.
Test unilatral gauche : test pour lequel lhypothse H0 est rejete, si la statistique utilise prend une valeur suprieure une valeur.
Construction dun test :
- choix des hypothses H0 et H1 ,
- choix dune variable statistique S servant de variable de dcision
- dtermination de la rgion critique au seuil ,
- nonce de la rgle de dcision.
Utilisation du test :
- prlvement dun chantillon,
- au vu de la valeur observe de S, on rejete ou on accepte H0 .

7.5.2

normalt

normalt a pour arguments :


1. la liste [ns, ne] o ns est le nombre de succs lorsquon fait ne essais, ou la
liste [m, t] o m est la moyenne et t la taille de lchantillon, ou la liste des
donnes de lchantillon
2. la proportion de succs ou la moyenne de la population ou une liste de donnes dun chantillon tmoin
3. lcart-type (cet argument est optionnel si des donnes sont fournies, il est
dduit des donnes)
4. lhypothse alternative H1 != ou < ou >
5. le niveau de confiance, cet argument est optionnel (valeur par dfaut 0.05)
normalt ralise le test Z dhypothses pour une loi normale.
normalt renvoie 0 ou 1 et affiche un rsum du test.
Exemple 1 : on tape :
normalt([10,30],.5,.02,!=,0.1)
On obtient :
0

7.5. LES TESTS DHYPOTHSES

641

avec en vert le rsum du test :


*** TEST RESULT 0 ***
Summary Z-Test null hypothesis mu1=mu2, alt. hyp. mu1 !=mu2.
Test returns 0 if probability to observe data is less than 0.1
(null hyp. mu1=mu2 rejected with less than alpha probability error)
Test returns 1 otherwise (can not reject null hypothesis)
Data mean mu1=10, population mean mu2=0.5
alpha level 0.1, multiplier*stddev/sqrt(sample size)= 1.64485*0.02/5.47723
Le test a chou, il y a donc moins dune chance sur 10 que le nombre de succs
soit de 10 pour 30 essais avec une proportion attendue de 0.5 et un cart-type de
0.02, on rejette lhypothse H0.
Exemple 2 : on tape :
normalt([0.48,50],0.5,0.1,<)
On obtient :
1
avec en vert le rsum du test :
*** TEST RESULT 1 ***
Summary Z-Test null hypothesis mu1=mu2, alt. hyp. mu1<mu2.
Test returns 0 if probability to observe data is less than 0.05
(null hyp. mu1=mu2 rejected with less than alpha probability error)
Test returns 1 otherwise (caclass_minn not reject null hypothesis)
Data mean mu1=0.48, population mean mu2=0.5
alpha level 0.05, multiplier*stddev/sqrt(sample size)= 1.64485*0.1/7.07107
Ici le test russit, on ne peut pas exclure (au seuil de confiance 0.05) lobservation
dune proportion de 0.48 avec 50 essais pour une proportion thorique de 0.5 et un
cart-type de 0.1

7.5.3 studentt
studentt a pour arguments :
1. la liste [ns, ne] o ns est le nombre de succs lorsquon fait ne essais, ou la
liste [m, t] o m est la moyenne et t la taille de lchantillon, ou la liste des
donnes de lchantillon,
2. la proportion de succs ou la moyenne de la population ou une liste de donnes dun chantillon tmoin,
3. lcart-type (cet argument est optionnel si des donnes sont fournies, il est
dduit des donnes),
4. lhypothse alternative H1 != ou < ou >,
5. le niveau de confiance, cet argument est optionnel (valeur par dfaut 0.05)
studentt ralise le test Z dhypothses pour une loi de student. On utilise de
prfrence le test studentt plutt que normalt lorsque la taille de lchantillon
est petite.
studentt renvoie 0 ou 1 et affiche un rsum du test.
On tape :

642

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


studentt([10,20],.5,.02,!=,0.1)

On obtient :
0
avec en vert le rsum du test :
*** TEST RESULT 0 ***
Summary T-Test null hypothesis mu1=mu2, alt. hyp. mu1 !=mu2.
Test returns 0 if probability to observe data is less than 0.1
(null hyp. mu1=mu2 rejected with less than alpha probability error)
Test returns 1 otherwise (can not reject null hypothesis)
Data mean mu1=10, population mean mu2=0.5, degrees of freedom 20
alpha level 0.1, multiplier*stddev/sqrt(sample size)= 1.32534*0.02/4.47214
Le test a chou, il y a donc moins dune chance sur 10 que le nombre de succs
soit de 10 pour 20 essais avec une proportion attendue de 0.5 et un cart-type de
0.02, on rejette lhypothse H0.
On tape :
studentt([0.48,20],0.5,0.1,<)
On obtient :
1
avec en vert le rsum du test :
*** TEST RESULT 1 ***
Summary T-Test null hypothesis mu1=mu2, alt. hyp. mu1<mu2.
Test returns 0 if probability to observe data is less than 0.05
(null hyp. mu1=mu2 rejected with less than alpha probability error)
Test returns 1 otherwise (can not reject null hypothesis)
Data mean mu1=0.48, population mean mu2=0.5, degrees of freedom 20
alpha level 0.05, multiplier*stddev/sqrt(sample size)= 1.72472*0.1/4.47214. Ici le
test russit, on ne peut pas exclure (au seuil de confiance 0.05) lobservation dune
proportion de 0.48 avec 20 essais pour une proportion thorique de 0.5 et un carttype de 0.1

7.5.4

chisquaret

chisquaret a pour arguments :


la liste des donnes dun chantillon,
une loi de distribution ou la liste des donnes dun autre chantillon,
les paramtres de cette loi de distribution ou les paramtres : classes suivi
de class_min et de class_dim.
chisquaret est le test du Chi2 dadquation entre 2 (or n) chantillons ou entre
un chantillon et une loi de distribution (multinomiale ou donne par une fonction).
chisquaret renvoie la valeur d2 de la statistique D2 o :
k
X
(nj ej )2
D2 =
avec
ej
j=1

k est le nombre de classes de lchantillon, n1 ...nk les effectifs de chaque classe de


lchantillon et e1 ,..,ek sont les effectifs thoriques (si chaque valeur xj est obtenue
avec la probabilit thorique pj on a ej = npj ) On tape :

7.5. LES TESTS DHYPOTHSES

643

chisquaret([57,54])
On obtient :
0.0810810810811
avec en vert le rsum du test :
On suppose que les donnes sont des effectifs de classes, adquation la distribution uniforme.
Adquation dun chantillon une distribution discrte Rsultat du test du Chi2
0.0810810810811.
On rejette ladquation si suprieur chisquare_icdf(1,0.95) qui vaut
3.84145882069 or chisquare_icdf(1,1-alpha) si alpha !=5%.
On tape :
chisquaret([1,1,1,1,1,0,0,1,0,0,1,1,1,0,1,1,0,1,1,0,0,0,0],[.4,.6])
On obtient :
0.115942028986
avec en vert le rsum du test :
Adquation dun chantillon une distribution discrte
Rsultat du test du Chi2 0.115942028986,
On rejette ladquation si suprieur chisquare_icdf(1,0.95) qui vaut
3.84145882069 or chisquare_icdf(1,1-alpha) si alpha !=5%.
On tape :
chisquaret(ranv(1000,binomial,10,.5),binomial)
On obtient :
?
On tape :
chisquaret(ranv(1000,binomial,10,.5),binomial,11,.5)
On obtient :
?
On rgle dans la configuration graphique les valeurs de class_min et de class_dim
-2 et 0.25 et on tape :
L:=ranv(1000,normald,0,.2)
chisquaret(L,normald)
Ou on tape :
chisquaret(L,normald,classes,-2,.25)
On obtient par exemple :

644

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


3.7961112714

avec en vert le rsum du test :


Densit normale, estimation de la moyenne et de lecart-type par les donnes0.00109620704977
0.201224413347
Adquation dun chantillon normald_cdf(.00109620704977,0.201224413347),
rsultat du test du Chi2 3.7961112714,
On rejette ladquation si suprieur chisquare_icdf(4,0.95) qui vaut
9.48772903678 ou chisquare_icdf(4,1-alpha) si alpha !=5%.
Vrifions :
On tape :
size(classes(L))
Ou on tape :
size(classes(L,-2,.25))
On obtient par exemple :
6
On tape :
C:=classes(L)
Ou on tape :
C:=classes(L,-2,.25)
On obtient par exemple :
[[(-0.75) .. -0.5,3],[(-0.5) .. -0.25,113],[(-0.25) ..
0,382],[0 .. 0.25,393],[0.25 .. 0.5,102],[0.5 ..
0.75,7]]
On a bien : n = 3 + 113 + 382 + 393 + 102 + 7 = 1000
On compare cette distribution empirique L une distribution thorique deffectifs
e1 ,..,ek (si chaque valeur xj est obtenue avec la probabilit thorique pj on a ej =
npj ).
Calculons la valeur d2 de la statistique :
k
X
(nj ej )2
2
D =
ej
j=1

On estimer les paramtresq et partir de lchantillon ( par la moyenne m


n
de lchantillon et par s n1
o s est lcart-type de lchantillon et n vaut ici
1000) :
On tape :
mu:=mean(L);s:=stddev(L)
On obtient par exemple :
0.00109620704977,0.201123775974

7.5. LES TESTS DHYPOTHSES


On tape :
sigma:=s*sqrt(1000/999)
On obtient par exemple :
0.201224413347
On tape :
p1:=normal_cdf(mu,sigma,-0.75,-0.50)
On obtient :
0.00628817561212
On tape :
p2:=normal_cdf(mu,sigma,-0.5,-0.25)
On obtient :
0.0996616023075
On tape :
p3:=normal_cdf(mu,sigma,-0.25,0)
On obtient :
0.391782175726
On tape :
p4:=normal_cdf(mu,sigma,0,0.25)
On obtient :
0.394119790487
On tape :
p5:=normal_cdf(mu,sigma,0.25,0.5)
On obtient :
0.101472226962
On tape :
p6:=normal_cdf(mu,sigma,0.5,0.75)
On obtient :
0.00648235374944
On calcule la valeur d2 de la statistique D2 , on tape :
P:=[p1,p2,p3,p4,p5,p6]:;
sum((C[k,1]-P[k]*1000)^2/(P[k]*1000),k=0..5)
On obtient bien :
3.79611127141

645

646

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE

7.5.5

kolmogorovt

kolmogorovt a pour arguments :


la liste des donnes dun chantillon,
une loi de distribution ou la liste des donnes dun autre chantillon,
les paramtres de cette loi de distribution.
kolmogorovt est le test de Kolmogorov-Smirnov dadquation une loi de distribution continue, entre 2 chantillons l1 l2 (loi inconnue suppose continue) ou
entre 1 chantillon l1 et une loi continue.
kolmogorovt renvoie 3 valeurs prfixes, D est lap
valeur brute de la statistique,

K vaut D n o n est la taille de lchantillon (ou D n1 n2 /(n1 + n2 ) si on teste


ladquation de 2 chantillons de tailles n1 et n2 ), K tend vers la distribution de
Kolmogorov-Smirnov kolmogorovd lorsque n tend vers linfini, la 3ime valeur est 1-kolmogorovd(K) qui est dautant plus proche de 1 que ladquation
est bonne (on rejettera donc lhypothse nulle - qui est ladquation - lorsque cette
dernire valeur est proche de 0). Le menu Aide, Exemples, probas, kolmogorov
donne une illustration de ce test : on teste ladquation dun vecteur alatoire tir
selon une loi avec cette mme loi : on fait le calcul de la statistique K pour 200
tirages et on reprsente graphiquement le cumul de frquences avec la distribution
de KS sur le mme graphique (cela marche bien pour les deux premires lois qui
sont continues, mais pas pour la troisime loi qui est discrte)
On tape :
kolmogorovt(randvector(100,normald,0,1),normald(0,1))
On obtient :
["D=",0.104642990054,"K=",1.04642990054,
"1-kolmogorovd(K)=",0.223512817343]
On ne peut pas rejeter ladquation car 1-kolmogorovd(K) est nest pas proche
de zro.
On tape :
kolmogorovt(randvector(100,normald,0,1),student(2))
On obtient :
["D=",0.158026574028,"K=",1.58026574028,
"1-kolmogorovd(K)=",0.0135504875564]
On rejette ladquation car 1-kolmogorovd(K) est proche de zro.

7.5.6

Des exemples

Voici quelques exercices :


1. Exercice
Pour tester lefficacit dun vaccin antigrippal on soumet 300 personnes
une exprience :
- sur 100 personnes non vaccines, 32 sont atteintes par la grippe,
- sur 200 personnes vaccines, 50 sont atteintes par la grippe,

7.5. LES TESTS DHYPOTHSES

647

Ce rsultat permet-il dapprcier lefficacit du vaccin ?


On calcule les valeurs f 1 et f 2 qui sont les proportions des gripps des deux
chantillons on tape :
f1:=32/100
f2:=50/200
On tape :
f1-f2
On obtient :
7/100
Donc |f1 f2 | = 0.07
On calcule la valeur p proportion des gripps lorsquon reunit les deux chantillons on tape :
p:=82/300
On obtient :
41/150
Donc p ' 0.273333333333
On calcule s12 , on tape :
s12:=sqrt(p*(1-p)*(1/100+1/200))
On obtient :
sqrt(4469/1500000)
Donc s12 ' 0.0545832697201
On tape :
normalt([32,100],[50,200],0.0545832697201,!=,0.05)
On obtient :
0
et en vert le resum du test :
Moyenne estimee en utilisant le(s) echantillon(s) 125
*** TEST RESULT 0 ***
Summary Z-Test null hypothesis mu1=mu2, alt. hyp. mu1 !=mu2. Test returns 0 if probability to observe data is less than 0.05 (null hyp. mu1=mu2 rejected with less than alpha probability error) Test returns 1 otherwise (can not
reject null hypothesis) Data mean mu1=32, population mean mu2=125 alpha level 0.05, multiplier*stddev/sqrt(sample size)= 1.95996*0.0545833/10
1.95996*0.0545833/10 renvoie 0.0106981084668
On tape :
a:=normal_icdf(0,sqrt(4469/1500000),0.975)
On obtient :
0.10698124281
Puisque |f1-f2|=0.07<a=0.10698124281, on en dduit que les deux
chantillons ne sont pas significativement diffrents au seuil de 5% : on peut
donc dire que le vaccin nest pas efficace mais ce nest pas une certitude...
k
X
(nj ej )2
La statistique D =
est une bonne mesure de lcart entre
ej
2

j=1

les effectifs observs et les effectifs thoriques : plus D2 est proche de zro,
plus la distribution de lchantillon est conforme la distribution thorique.
On calcule la valeur d2 de D2 on tape :

648

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


d2:=300*(150*32-68*50)^2/(100*200*82*218)
On obtient :
7350/4469
donc d2 ' 1.645
On cherche la valeur h qui vrifie :
P roba(21 > h) = 0.05 ou encore P roba(21 h) = 0.95
pour cela on tape :
chisquare_icdf(1,0.95)
On obtient :
3.84145882069
donc h ' 3.84
Puisque d2 ' 1.645 < 3.84 on en dduit que les deux chantillons ne sont
pas significativement diffrents au seuil de 5% : on peut donc mettre en doute
lefficacit du vaccin.
On tape :
?
On obtient :
?

2. Exercice
Sur un registre dtat civil, on a relev 552 naissances dont 289 garons.
a/ Estimer la frquence p de naissance dun garon.
b/ Donner un intervalle de confiance pour cette estimation.
On tape :
?
On obtient :
?
3. Exercice
Dans un hpital sur un chantillon de 458 malades admis pendant un trimestre il y a eu 141 dcs. Estimer le pourcentage de dcs par un intervalle
de confiance au seuil de 0.01.
On tape :
?
On obtient :
?
4. Exercice : comparaison de deux moyennes
Pour une mme preuve, voici les notes obtenues dans une classe de terminale du lyce A.
6,10,14,17,9,6,4,12,9,10,10,11,12,18,10,9,11,8,7,10.
et les notes obtenues dans une classe de terminale du lyce B.
2,10,14,13,9,6,1,12,9,10,10,10,12,15,19,9,11,8,9,10
1/ Analyser les rsultats de chaque groupe.
2/ Peut-on considrer que les 2 groupes sont issus dune mme population ?
5. Exercice : comparaison de deux moyennes
Deux entreprises A et B livrent des pices dans des paquets de 100 pices.
On note X1 (resp X2 ) la variable alatoire gale au nombre de pices dfectueuses par paquet provenant de A (resp B).
On note X 1 (resp X 2 ) la variable alatoire gale au nombre moyen de pices

7.5. LES TESTS DHYPOTHSES

649

dfectueuses par paquet pour des chantillons alatoires de 49 paquets (resp


64 paquets) provenant de A (resp B).
I) Sur un chantillon de 49 paquets provenant de A on compte le nombre de
pices dfectueuses dans chaque paquet et on trouve :
7, 5, 5, 4, 4, 4, 9, 7, 9, 2, 7, 8, 7, 8, 4, 4, 9, 10,
5, 10, 6, 4, 5, 6, 1, 2, 5, 7, 8, 0, 6, 0, 1, 5, 2, 0,
5, 2, 3, 3, 4, 1, 3, 10, 1, 0, 10, 2, 7
1/ Calculer la moyenne m1 et lcart-type s1 de cet chantillon.
2/ Donner une estimation de la moyenne 1 et de lcart-type 1 de X1 .
3/ Donner une estimation de la moyenne et de lcart-type de X 1 .
On tape :
?
On obtient :
?
On tape :
?
On obtient :
On tape :
?
On obtient :
?
6. Exercice
On a administr un somnifre A 50 personnes choisies au hasard et on a
observ une moyenne de sommeil de 8h22 avec un cart-type de 0h24.
On a administr un somnifre B 100 personnes choisies au hasard et on a
observ une moyenne de sommeil de 7h15 avec un cart-type de 0h30.
Ces deux somnifres ont-ils une efficacit signicativement diffrente ? de
combien ?
7. Exercice : chantillons apparis
On a fait faire une double correction de 30 copies par deux examinateurs A
et B afin de comparer leur notation. Les copies sont numerotes de 0 29.
On a obtenu pour A :
13,15,12,15,8,7,11,10,9,13,3,18,17,5,9,10,
11,14,12,10,9,8,13,6,8,16,14,11,12,10
On a obtenu pour B :
12,13,12,15,7,5,12,10,8,13,4,17,16,4,9,11,10,
13,13,9,10,7,14,8,7,15,13,10,13,10
On tape :
?
On obtient :
?
8. Exercice : Jet dun d et test du 2
On jette un d 90 fois et on a obtenu :
1 a t obtenu 11 fois,
2 a t obtenu 16 fois,

650

CHAPITRE 7. LES FONCTIONS DE STATISTIQUE


3 a t obtenu 17 fois,
4 a t obtenu 22 fois,
5 a t obtenu 14 fois,
6 a t obtenu 10 fois.
Peut-on admettre au vu de cette exprience que le d est rgulier ?
On tape :
?
On obtient :
?

9. Exercice : Jet dun d et test du 2


On jette un d 180 fois et on a obtenu :
1 a t obtenu 22 fois,
2 a t obtenu 32 fois,
3 a t obtenu 34 fois,
4 a t obtenu 44 fois,
5 a t obtenu 28 fois,
6 a t obtenu 20 fois.
Peut-on admettre au vu de cette exprience que le d est rgulier ?
On tape :
?
On obtient :
?

Chapitre 8

Les fonctions de programmation


8.1
8.1.1

La forme dune fonction, dun programme et dun


script
Le choix de lditeur

On crit une fonction ou un programme dans lditeur de son choix : on peut


utiliser les diteurs de Xcas (que lon ouvre avec Alt+p) pour crire des petits
programmes mais il est prfrable dutiliser par exemple emacs pour crire des
programmes plus consquents. Dans ce cas, on sauve le programme dans un fichier,
par exemple toto.cas, puis dans la ligne de commande de Xcas on tape :
read("toto.cas") ou encore
avec le menu Fich sous-menu Charger on slectionne toto.cas.

8.1.2

La forme dune fonction

Une fonction renvoie une valeur : linstruction return valeur; ou retourne


valeur; fait sortir du programme et renvoie valeur.
Une fonction a un nom (par exemple toto), puis on met entre des parenthses
les arguments de la fonction (par exemple si toto a besion de deux paramtres
a et b on met toto(a,b)). On met ensuite := puis on met entre des accolades
(ou entre begin et end) le bloc qui dfinit la fonction cest dire la suite des
instructions (chaque instuction se termine par ;) et si lalgorithme dfinissant la
fonction a besoin de variables locales, ces variables devront tre dclares en mettant au dbut du bloc local puis, les noms des variables locales spars par des
virgules puis, ; pour terminer cette dclaration. Ces variables locales peuvent tre
initialises lors de leur dclaration.
On crit par exemple :
toto(a,b):={
local q,r,s;
<instrucion-1>;
........... ;
<instrucion-n>;
return r;
}
651

652

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

Attention Les variables locales ne sont pas des variables formelles et doivent toujours tre affectes dans le corps du programme : on ne dfinira donc pas, les variables formelles, avec local.
Si on veut quune variable dclare avec local soit formelle (par ex a), il faudra
mettre dans le corps du programme soit purge(a) soit assume(a,symbol).
Exemple
kk(a):={
local x,c;
c:=4*a;
return solve((x-c)^2-a=0,x);
}:;
f(a):={
local x,c;
c:=4*a;
assume(x,symbol);
return solve((x-c)^2-a=0,x);
}:;
g(a):={
local c;
c:=4*a;
return solve((x-c)^2-a=0,x);
}:;
On tape :
kk(1),f(1),g(1)
On obtient :
list[],list[3,5],list[3,5] Il ne faut pas tenir compte du message renvoy pas Xcas lors de la compilation :
"Attention : x, declare(s) comme variable(s) globale(s) en compilant g" car dans
solve la variable x est toujours symbolique.
Remarque on peut initialiser les variables locales en mme temps que leur
dclaration condition de mettre des parenthses, par exemple :
local (q:=1),(r:=0),s;
Attention Il est important de dclarer les variables locales car une variable
globale est value avant lexecution de la fonction qui sen sert lorsque cette fonction est appele par une autre fonction...on risque donc davoir des ennuis si une
fonction qui utilise une variable globale est appele par une autre fonction, par
exemple :
truc(a,b):={
if (b!=0) {
r:=irem(a,b);
} else {
r:=b;
}
return r;
};

8.1. LA FORME DUNE FONCTION, DUN PROGRAMME ET DUN SCRIPT653


machin(a,b):={
local rr;
rr:=truc(a,b);
return rr;
}
Lexcution de truc(45,6) ne pose pas de problme et renvoie 3, mais lexcution de machin(45,6) renvoie le message derreurs :
sto 3 not allowed! Error: Bad Argument Type
car lorsque truc est appel par machin r qui est une variable globale est evalue
et alors r:=irem(a,b) nest pas possible car r vaut 3....
Il est donc important de tenir compte du message donn par Xcas lors de la compilation de truc :
//Parsing truc //Warning, check that the following variables
are global: r compiling truc condition que les variables signales
ne soient pas des variables formelles. Voici comme exemple le programme qui
donne la valeur de la suite de Fibonnacci dfinie par u0 = u0, u1 = u1, un+2 =
un+1 + un . Dans ce programme on utilise les variables formelles x,A,B qui
doivent tre purges.
On tape :
u(n,uo,u1):={
local L,a,b;
//verifier que A,B,x ne sont pas affectes
[a,b]:=solve(x^2-x-1,x);
L:=linsolve([A+B=uo,A*a+B*b=u1],[A,B]);
return normal(L[0]*a^n+L[1]*b^n);
};
On tape :
u(3,0,1)
On obtient :
2
Dans ce programme, les variables x,A,B ne doivent pas tre dclares comme
variables locales car ce sont des variables formelles : il ne faut donc pas tenir
compte lors de la compilation du warning : // Warning: x A B declared
as global variable(s) compiling u

8.1.3

La forme dun programme

Un programme a la mme forme quune fonction mais ne renvoie pas de valeurs, mais un programme peut afficher des rsultats ou faire des dessins : dans ce
cas toutes les instructions daffichage (afficher ou Disp;) se feront en bleu
dans lcran intermdiaire situ avant la rponse et les instructions de dessins se
feront dans lcran DispG. En particulier les dessins rcursifs ne seront visibles
que dans lcran DispG.

654

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

Pour ouvrir lcran DispG, on utilise le menu CfgIMontrerI DispG


ou linstruction DispG; (ne pas mettre de parenthses).
Pour effacer lcran DispG, on utilise la commande ClrGraph() ou erase.
Pour cacher lcran DispG, on utilise le menu CfgICacherI DispG
ou linstruction DispHome; (ne pas mettre de parenthses).
Lors de lexcution du programme, on aura comme rponse, la valeur (ou le dessin)
de la dernire instruction du programme.
Il est prfrable de mettre return 0 la fin dun programme et de le transformer
ainsi en fonction : lexcution de ce programme renverra 0 comme rponse ce qui
voudra dire que son excution sest bien passe.

8.1.4

La forme dun script

Un script est une suite dinstructions que lon met dans un fichier (chaque instuction se termine par ;).

8.2

Excuter une fonction pas pas

On peut excuter une fonction pas pas, en utilisant le debuggeur :


on se sert de linstruction debug avec comme argument une fonction et ses arguments et cela permet dexcuter la fonction pas pas. On a alors la possibilit de
voir lvolution des variables de son choix (on se reportera pour plus de dtails
la section 8.7).

8.3

La squence dinstructions

Un bloc dinstructions ou une squence dinstructions doit tre parenths soit


par {}, soit par begin et end.
Entre ces accolades (ou entre begin et end) on met les instructions en les terminant par un point-virgule ;

8.4
8.4.1

Les instructions de base


Les commentaires : comment //

comment a comme argument une chaine de caractre (il faut mettre les ") alors
que // na pas besion des " mais doit se terminer par un retour la ligne : cela
veut veut dire que largument de comment ou ce qui se trouve entre // et le retour
la ligne nest pas pris en compte par le programme et que cest un commentaire.
On tape le programme dans un diteur de programmes puis on le valide
avec le bouton OK :
f(x):={comment("f:R->R^2")
return [x+1,x-1];}
ou :
f(x):={//f:R->R^2
return [x+1,x-1];}

8.4. LES INSTRUCTIONS DE BASE

655

On obtient :
la dfinition commente de la fonction f(x)=[x+1,x-1]

8.4.2

Les entres : input, saisir, Input, InputStr, saisir_chaine,


textinput

input, saisir, Input permettent de saisir des expressions et InputStr,


saisir_chaine, textinput permettent de saisir des chaines de caractres.
input, saisir, Input et InputStr, saisir_chaine, textinput
ont comme argument le nom dune variable (resp une squence de noms de variables) ou une chane de caractres (chane donnant lutilisateur des indications
sur la valeur entrer) et le nom dune variable (resp une squence de chanes de
caractres et une squence de noms de variables).
input, saisir, Input et InputStr, saisir_chaine, textinput ouvrent une fentre o on peut entrer la valeur de la variable donne comme argument et o on
retrouve, comme lgende, la chane de caractres mise dans largument (si on la
mise ! ! !).
Avec input, Input, saisir on peut entrer des nombres ou des chanes de
caractres (il faut alors mettre "...") ou des noms de variables (sans mettre "...").
Avec InputStr, textinput, saisir_chaine on ne peut entrer que des
chanes de caractres, mais on na donc pas besoin de mettre "...".
On tape :
input(a)
ou :
input("a=?",a)
On obtient :
une fentre o on peut entrer la valeur de a
On tape :
12 dans cette fentre puis OK
puis :
a+3
On obtient :
15
On tape :
input("polynome",p,"valeur",a)
On obtient :
une fentre o on peut entrer les valeurs de p avec la
lgende "polynome" et de a avec la lgende "valeur"

656

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

On tape :
InputStr(a)
ou :
InputStr("reponse=",a)
On obtient :
une fentre o on peut entrer la valeur de a
On tape :
12 dans cette fentre puis OK
puis :
a+3
On obtient :
123
car a est la chane de catractres "12" et le "+" concatne les deux chanes "12"
et "3".

8.4.3

Fonction testant si une touche est presse : getKey

getKey est une fonction qui na pas dargument et qui renvoie le code ASCII
de la touche presse dans lcran xterm de la fentre du terminal ou 0 si aucune
touche nest presse dans cet cran .
On tape :
testkey():={
local a;
while (1==1) {
a:=getKey();
if (a!=0) break;
}
return a;
}
puis :
testkey()
puis :
A
On obtient :
65

8.4. LES INSTRUCTIONS DE BASE

8.4.4

657

Fonction testant le type de son argument : type

type est une fonction qui a un argument et qui renvoie le type de cet argument par
exemple :
DOM_FLOAT,DOM_INT,DOM_COMPLEX,..,DOM_IDENT,DOM_LIST,
DOM_SYMBOLIC,DOM_RAT,..DOM_SYMBOLIC,DOM_STRING.
Il y a 20 types diffrents qui sont reprsents par un entier entre 1 et 20.
type permet de tester une erreur dentre.
On tape :
type(3.14)
On obtient :
DOM_FLOAT
On tape :
type(3.14)+0
On obtient :
1
On tape :
type(3)
On obtient :
DOM_INT
On tape :
type(3)+0
On obtient :
2
On tape :
type(3% 5)
On obtient :
15
Remarque : utilisation de type pour les graphes
voir aussi 3
Si le graphe dpend dune fonction utilisateur, il faut que la fonction soit dfinie
mme lorsque le(s) paramtre(s) a (ont) une valeur formelle, ce qui peut se faire en
testant le type du paramtre, comme dans lexemple suivant, f est dfinie en testant
du type du paramtre par :

658

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

f(x):= {
if (type(x)==DOM_IDENT) return f(x);
while(x>0){ x--; }
return x;
}:;
Ainsi f(x) renvoie f(x) et f(3.1) renvoie -0.9.
ou bien
g(x):= {
if (type(x)!=DOM_LIST) return g(x);
if (type(x)==DOM_IDENT) return g(x);
while(x[0]>0){x[0]:=x[0]-1; }
return x;
}:;
Ainsi g(x) renvoie g(x), g([x,y,z]) renvoie g([x,y,z]) et g([1.1,2,3])
renvoie [-0.9,2,3].
Par exemple si G:=plotfunc(g(x), le test permet dutiliser le graphe G de g
dans des commandes comme translation(1+i,G)...

8.4.5

Fonction testant si le type de son argument est une squence :


subtype

subtype est une fonction qui a un argument et qui renvoie 1 si cet argument est
une squence et 0 sinon.
On tape :
subtype(3,1,4)
On obtient :
1
On tape :
subtype[3,1,4]
On obtient :
0

8.4.6

Fonction testant le type de son argument : getType

getType est une fonction qui a un argument et qui renvoie le type de cet argument
par exemple :
STR,EXPR,VAR,NONE,PIC,LIST,MAT,FUNC,NUM....
getType ne renvoie pas la mme chose que type, cest pour des raisons de
compatibilit.
On tape :
getType(3.14)

8.4. LES INSTRUCTIONS DE BASE

659

On obtient :
NUM
On tape :
getType(x)
On obtient :
VAR
On tape :
getType(x+2)
On obtient :
EXPR

8.4.7

Fonction testant le type de son argument : compare

compare est une fonction qui a deux arguments et qui renvoie 1 si ses arguments
ont des types diffrents ou ou si ses arguments sont de mme type et sont mis dans
lordre croissant, et qui renvoie 0 sinon.
On tape :
compare(1,2)
On obtient :
1
On tape :
compare(2,1)
On obtient :
0
On tape :
compare("3","a")
On obtient :
1
On tape :
compare("a",3)
On obtient :
0
On tape :

660

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION


compare(3,"a")

On obtient :
1
On tape :
compare("a",3)
On obtient :
0
En effet on a : type(3)=DOM_INT=2 et type("a")=DOM_STRING=12

8.4.8

Les sorties : print, Disp, afficher

print (ou Disp ou afficher) a comme argument une squence de chane de


caractres ou de noms de variables.
print (ou Disp ou afficher) crit en bleu les chanes de caractres et le
contenu des variables dans lcran situ avant la rponse.
On tape :
a:=12
puis :
print("a=",a)
On obtient :
"a=",12 crit en bleu et la rponse est 1

8.4.9

Pour effacer les sorties : ClrIO

ClrIO na pas dargument, il efface toutes les sorties faites dans le niveau o
il a t tap.
On tape :
a:=12
puis :
print("a=",a)
On obtient :
"a=",12 scrit en bleu et la rponse est 1
On tape :
print("a=",a);ClrIO()
On obtient :
(1,1) comme rponse

8.4. LES INSTRUCTIONS DE BASE

8.4.10

661

Les sorties de ab : printpow

Linstruction printpow modifie la faon dont les puissances sont affiches


en mode texte ou aprs une commande print.
printpow a comme argument soit 0, soit 1, soit -1.
printpow(0) crit ab selon lcriture mathmatique a^b.
printpow(1) crit ab selon lcriture en langage C pow(a,b).
printpow(-1) crit ab selon lcriture dautres langages a**b.
De plus ces 3 syntaxes sont admises en input.
On tape :
printpow(0)
puis :
print(2^3)
On obtient :
2^3 crit en bleu et 8 comme rponse
On tape :
printpow(1)
puis :
print(2^ 3)
On obtient :
pow(2,3) crit en bleu et 8 comme rponse
On tape :
printpow(-1)
puis :
print(2^3)
On obtient :
2**3 crit en bleu et 8 comme rponse

8.4.11

Sortie dans une petite fentre : output Output

output ou Output a comme argument une squence de chane de caractres ou


de noms de variables.
output ou Output crit les chanes de caractres et le contenu des variables
dans une petite fentre (la mme que celle qui souvre lors dun input). Cela
permet donc dinclure un output dans un input.
On tape :
input(output("Calcul de
p(a)"),"polynome",p,"valeur",a)
On obtient :
une fentre ayant pour titre Calcul de p(a), o on
peut entrer la valeur de p (par exemple x->x+1) et a
(par exemple 2)

662

8.4.12

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

Les affectations infixes : => := =<

:= => =< sont des oprateurs infixs qui permettent de stocker une valeur dans
une variable, mais leurs arguments de => et de := =< ne sont pas dans le mme
ordre !
De plus := et =< nont pas le mme effet lorsque le premier argument est un
lment dune liste (ou matrice) contenu dans une variable. En effet, =< modifie
llment dune liste (ou matrice) par rfrence (voir 8.4.14)
=> est la version infixe de sto.
=> stocke le premier argument dans la variable donne comme deuxime
argument.
On tape :
4=>a
Ou on tape :
sto(4,a)
On obtient :
4 et la variable a contient 4
:= et =< ont comme arguments, un nom de variable et la valeur stocker.
On tape :
a:=4
Ou on tape :
a=<4)
On obtient :
4 et la variable a contient 4
On tape :
A:=[0,1,2,3,4]
B:=A
puis par exemple pour modifier A[3], on tape :
A[3]=<33
puis
A,B
On obtient :
[0,1,2,33,4],[0,1,2,33,4]
Les variables A et B contiennent toutes les deux la liste [0,1,2,33,4],
en effet :
A:=[0,1,2,3,4] fait pointer A sur la liste [0,1,2,3,4], puis
B:=A fait pointer B sur A donc sur la liste [0,1,2,3,4],
A[3]=<33 modifie la liste pointe par A donc modifie la liste [0,1,2,3,4]
en la liste [0,1,2,33,4] et donc B est modifi. Il en serait de mme si on
avait mis B[3]=<33 au lieu de A[3]=<33, les variables A et B contiendraient toutes les deux la liste [0,1,2,33,4].
Remarque
On peut faire plusieurs affectations la fois en utilisant les squences ou les listes.
On tape :
[a,b,c]:=[1,2,3]
On obtient :
[1,2,3]

8.4. LES INSTRUCTIONS DE BASE

663

a contient 1, b contient 2 et c contient 3


Ou on tape :
(a,b,c):=(1,2,3)
On obtient :
(1,2,3)
a contient 1, b contient 2 et c contient 3
Attention
Si a contient 5 et que lon tape :
(a,b):=(2,a)
alors a contient 2 et b contient 5
Si a contient 1 et que lon tape :
(a,b):=(2,a)
alors a contient 2 et b contient 1
(a,b):=(b,a+b)
alors a contient 1 et b contient 3

8.4.13

Laffectation par copie : copy

copy permet de cloner une liste, un vecteur ou une matrice, en gnral pour le
stocker dans une variable.
copy a un argument, la liste (vecteur ou matrice) cloner.
A:= copy(B) recopie la liste (vecteur, matrice) B dans A.
On tape :
B:=copy([[4,5],[2,6]])
ou :
A:=[[4,5],[2,6]];B:=copy(A)
Puis on tape :
A,B
On obtient :
[[4,5],[2,6]],[[4,5],[2,6]]
Quand doit-on utiliser copy ?
copy est surtout utile pour des listes ou des matrices qui seront par la suite modifies par rfrence avec =<.
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
Puis, si on tape :

664

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION


A[3]=<33
A,B

On obtient :
[0,1,2,33,4],[0,1,2,3,4]
Puis si on tape :
B[3]=<55
A,B
On obtient :
[0,1,2,33,4],[0,1,2,55,4]

8.4.14

Les diffrences entre :=, =< et copy

Attention, := et =< ne sont pas quivalents car =< modifie llment dune
liste ou matrice par rfrence.
Laffectation =< ne diffre de := que si on modifie un lment dune liste (ou
matrice) contenue dans une variable, par exemple si A contient la liste [0,1,2,3,4]
i.e. si on a tap A:=[0,1,2,3,4] et que lon veut modifier la valeur de A[3]
et changer 3 en 33, on peut crire dans ce cas, A[3]:=33 ou A[3] =< 33
mais ces deux instructions sont diffrentes. En effet A pointe vers une liste car
A:=[0,1,2,3,4], et A[3] =< 33 modifie cette liste en la liste [0,1,2,33,4],
ainsi toutes les variables de Xcas qui pointent vers cette liste seront modifies.
Alors quavec A[3]:=33 la liste est duplique, la copie est modifie et A pointe
vers la copie. Il faut donc utiliser =< avec prcautions car tous les objets pointant
sur cette liste (ou matrice) seront modifis.
On tape :
A:=[0,1,2,3,4]
B:=A
A[3]=<33
A,B
ou :
A:=[0,1,2,3,4]
B:=A
B[3]=<33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,33,4]
En effet la liste [0,1,2,3,4] a t modifie par linstruction A[3]=<33
(ou par B[3]=<33) en la liste [0,1,2,33,4]. Les listes A et B pointent
sur cette liste donc A et B sont modifies toutes les deux.
On tape :
A:=[0,1,2,3,4]

8.4. LES INSTRUCTIONS DE BASE

665

B:=A
A[3]:=33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
car A[3]:=33 fait une copie de la liste [0,1,2,3,4] et modifie cette
copie en [0,1,2,33,4] puis A pointe sur cette copie et cela ne modifie
pas B. On tape :
A:=[0,1,2,3,4]
B:=A
B[3]:=33
A,B
On obtient :
[0,1,2,3,4],[0,1,2,33,4]
car B[3]:=33 fait une copie de la liste [0,1,2,3,4] et modifie cette
copie en [0,1,2,33,4] puis B pointe sur cette copie et cela ne modifie
pas A.
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
Puis, si on tape :
A[3]=<33
A,B
On obtient :
[0,1,2,33,4],[0,1,2,3,4]
On tape :
A:=[0,1,2,3,4]
B:=copy(A)
B[3]=<33
A,B
On obtient :
[0,1,2,3,4],[0,1,2,33,4]
En effet B pointe sur la copie de A, donc une modifiucation par rfrence de
A[3] (respB[3]) ne modifie pas B (resp A).

8.4.15

Les instructions copy et =< dans un programme

=< est surtout utile quand on fait beaucoup de modifications dans une liste ou
matrice de grande taille, par exemple dans un programme. Mais attention, il faudra
utiliser copy lors de linitialisation des variables listes ou matrices qui seront modifies avec =< pour que les modifications se fassent sur la copie.
Voir aussi 2.5.3 et 8.4.14.
Attention
Dans un programme si on met :
local a;
a:=[0,1,2,3,4];
...
a[3] =< 33;

666

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

Cela modifie le programme lui-mme et la ligne a:=[0,1,2,3,4]; est remplace par a:=[0,1,2,33,4]; dans le programme compil.
Donc dans un programme il faut crire :
local a;
a:=copy([0,1,2,3,4]);
...
a[3] =< 33;
ou
local a,c;
c:=[0,1,2,3,4];
a:=copy(c);
...
a[3] =< 33;
pour que ce soit la copie de [0,1,2,3,4] qui soit modifie et non la liste
[0,1,2,3,4] elle-mme.
Remarque
On peut aussi utiliser les commandes makelist, seq ou $, par exemple :
a:=makelist(n,n,0,4); ou
a:=[n$(n=0..4)] ; puis
a[3] =< 33; car makelist(n,n,0,4) ou [n$(n=0..4)] est une liste
qui va se crer chaque excution du programme.
Exemple
On veut crire un programme qui renvoie les nombres entiers infrieurs ou gaux
n et dont la somme des chiffres (en base 10) vaut 5. On tape :
somme5(n):={
local L,j,k;
L:=seq(0,0);
k:=0;
for(j:=0;j<=n;j++){
if (sum(convert(j,base,10))==5){
L[k]=<j;
k:=k+1;
}
}
return L;
}:;
On tape :
somme5(50)
On obtient :
5,14,23,32,41,50

8.4. LES INSTRUCTIONS DE BASE

667

Dans cet exemple, il faut bien comprendre et faire linitialisation de L correctement.


Dans ce programme, on a choisit davoir le rsultat sous la forme dune squence,
et on a initialis L avec L:=seq(0,0). Si on avait mis L:=NULL, le programme
naurait pas fonctionn correctement ! En effet, si on tape :
fauxsom5(n):={
local L,j,k;
L:=NULL;
k:=0;
for(j:=0;j<=n;j++){
if (sum(convert(j,base,10))==5){
L[k]=<j;
k:=k+1;
}
}
return L;
}:;
puis :
fauxsom5(30)
on obtient :
5,14,23,32,41,50
Cela semble juste..... Mais, lors de lexcution de fauxsom5(50), au dpart L
pointe sur la squence NULL, puis cette squence NULL est modifie et devient la
fin du programme 5,14,23,32,41,50 et le programme, si on ne le recompile
pas, a lui aussi t modifi est est devenu
fauxsom5(n):={
local L,j,k;
L:=5,14,23,32,41,50;
k:=0;
for(j:=0;j<=n;j++){
if (sum(convert(j,base,10))==5){
L[k]=<j;
k:=k+1;
}
}
return L;
}:;
Si on tape maintenant :
fauxsom5(30)
On obtient une squence trop longue :
5,14,23,32,41,50

668

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

alors que si on tape :


somme5(30)
On obtient :
5,14,23
Rgle
Dans un programme, si on veut utiliser =< pour modifier une liste L ou une squence LL, il faut faire attention linitialisation.
Par exemple, pour initialiser
L la liste vide, on tape :
L:=[seq(0,0)] ou L:=[0$0] ou L:=copy([]) car [seq(0,0)]
ou [0$0] dsigne une liste qui va se crer chaque excution du programme.
LL la squence NULL, on tape :
LL:=seq(0,0)] ou LL:=0$0 ou LL:=copy(NULL) car seq(0,0)
ou 0$0 dsigne une squence qui va se crer chaque excution du programme.
Il faut donc utiliser =< avec prcautions car tous les objets pointant sur cette matrice seront modifis.

8.4.16

Laffectation prefixe : sto Store

sto (ou Store) permet de stocker une valeur dans une variable.
sto (ou Store) a deux arguments, la valeur stocker et un nom de variable.
Attention
La variable doit tre purge avant lutilisation de sto (ou Store).
On tape :
sto(3,a)
ou :
Store(3,a)
On obtient :
3 et la variable a contient 3
Remarque
On peut faire plusieurs affectations la fois en utilisant les squences ou les listes.
On tape :
sto([1,2,3],[a1,a2,a3])
ou :
Store([1,2,3],[a1,a2,a3])
On obtient :
[1,2,3] et a1 contient 1, a2 contient 2, a3 contient 3

8.4. LES INSTRUCTIONS DE BASE

8.4.17

669

Laffectation dune galit : assign

assign permet de stocker une valeur dans une variable.


assign a un ou deux arguments :
un argument : une galit entre un nom de variable et la valeur stocker, ou
une listedgalit entre des noms de variable et les valeurs stocker,
deux arguments : un nom de variable et la valeur stocker.
Attention
La variable doit tre purge avant lutilisation de assign.
On tape :
assign(a,3)
ou :
assign(a=3)
On obtient :
3 et la variable a contient 3
On tape :
assign([a1=1,a2=2,a3=3)
On obtient :
[1,2,3] et a1 contient 1, a2 contient 2 et a3 contient
3
Remarque assign sert surtout en mode Maple, voici un exemple : On tape en
mode Maple :
purge(a,b)
sol:=solve([a+b=1,a-b=3],[a,b])
On obtient :
[a=2,b=(-1)]
On tape :
assign(sol)
On obtient :
[2,-1] et ainsi a contient 2 et b contient -1
en mode Xcas la mme suite dinstructions donnent :
sol:=solve([a+b=1,a-b=3],[a,b])
On obtient la liste des solution donc ici une matrice 11 :
[[2,-1]]
On tape :
[a,b]:=sol[0])
On obtient :
[2,-1] et ainsi a contient 2 et b contient -1

670

8.4.18

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

Linstruction conditionnelle : if then else end, si alors


sinon fsi

if est suivi dun boolen entre des parenthses.


if permet de faire, ou de ne pas faire, un bloc dinstructions, selon la valeur de ce
boolen.
if utilis avec else permet de choisir de faire, soit un bloc dinstructions, soit un
autre bloc dinstructions , selon la valeur du boolen.
fi est suivi dun boolen et de then.
Selon la valeur de ce boolen if permet de faire, ou de ne pas faire, les instructions
situes entre else et end.
Selon la valeur de ce boolen if utilis avec else permet de choisir de faire,
soit les instructions situes entre then et else, soit les instructions situes entre
else et end.
si est suivi dun boolen et de alors.
Selon la valeur de ce boolen si permet de faire, ou de ne pas faire, les instructions
situes entre alors et fsi.
Selon la valeur de ce boolen si utilis avec sinon permet de choisir de faire, soit
les instructions situes entre alors et sinon, soit les instructions situes entre
sinon et fsi.
On tape :
a:=3;b:=2;
puis :
if (a>b) {a:=a+5;b:=a-b;}
On obtient :
6
On tape :
a:=3;b:=2;
puis :
if a>b then a:=a+5;b:=a-b;end
On obtient :
6
On tape :
a:=3;b:=2;
puis :
si a>b alors a:=a+5;b:=a-b;fsi
On obtient :
6

8.4. LES INSTRUCTIONS DE BASE

671

On tape :
maxi(a,b):={if (a>b) {return a;} else {return b;}}
puis :
maxi(2,3)
On obtient :
3
On tape :
maxi(a,b):={if a>b then return a; else return b;end}
puis :
maxi(2,3)
On obtient :
3
On tape :
maxi(a,b):={si a>b alors retourne a; sinon retourne
b;fsi}
puis :
maxi(2,3)
On obtient :
3

8.4.19

Linstruction conditionnelle : if then elif else end

Lorsquil y a plusieurs if...else if... la suite on peut aussi utiliser


un elif qui est une criture condense de else if. Linstruction elif permet
une criture plus lisible car un seul end suffit pour clore le if. Le dernier elif
peut comporter ou ne pas comporter un else. Voici la syntaxe :
if (condition1) then
action1;
elif (condition2) then
action2;
elif (condition3) then
action3;
end
ou bien if (condition1) then
action1;
elif (condition2) then
action2;

672

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

elif (condition3) then


action3;
else action4;
end
On tape par exemple pour dfinir la fonction f dfinit par :
f (x) = 8 si x > 8
f (x) = 4 si 4 < x 8
f (x) = 2 si 2 < x 4
f (x) = 1 si 0 < x 2
f (x) = 0 si x 0
f(a):= {
if a>8 then
return 8;
elif a>4 then
return 4;
elif a>2 then
return 2;
elif a>0 then
return 1;
elif a<=0 then
return 0;
end;
}:;
ou plutt en utilisant un else la place du dernier elif, on tape :
f(a):= {
if a>8 then
return 8;
elif a>4 then
return 4;
elif a>2 then
return 2;
elif a>0 then
return 1;
else
return 0;
end;
}:;

8.4.20

Linstruction conditionnelle : switch

switch a comme paramtre une expression.


Selon la valeur de cette expression, marque par case (ou par default), switch
permet de faire le bloc dinstructions correspondant la valeur dune expression
qui doit tre une valeur entire.
On tape :

8.4. LES INSTRUCTIONS DE BASE

673

opere(a,b,c):={
switch(c) {
case 1 : {a:=a+b;break;}
case 2 : {a:=a-b;break;}
case 3 : {a:=a*b;break;}
default : {a:=a^b;}
}
return a;
}
puis :
opere(2,3,1)
On obtient :
5
On tape :
opere(2,3,2)
On obtient :
-1

8.4.21

La boucle : for pour fpour

for et pour se sert dune variable dincrmentation par exemple j (doit tre dclare comme variable locale).
Premire syntaxe
On prcise entre des parenthses et en les sparant par un point virgule, la valeur
de dpart, la condition darrt et la faon dont on incrmente la variable dincrmentation, puis on met un bloc dinstructions :
for permet de faire plusieurs fois un bloc dinstructions selon la valeur de la variable dincrmentation.
for (j:=j1;j<=j2;j:=j+3) {<instructions> }
Par exemple :
S:=0;for (j:=3;j<20;j:=j+3) {S:=S+j;}
Deuxime syntaxe
On commence par for, puis, on prcise avec les mots from, to et step, la valeur de dpart, la condition darrt et la fa on dont on incrmente cette variable
dincrmentation, puis on met les instructions effectuer entre do et end_for :
for j from j1 to j2 step p do <instructions> end_for;
Ou on utilise sa traduction. On commence par pour, puis, on prcise avec les mots
de, jusque et pas, la valeur de dpart, la condition darrt et la faon dont on
incrmente cette variable dincrmentation, puis on met les instructions effectuer
entre faire et fpour :
pour j de j1 jusque j2 pas p faire <instructions> fpour;
Par exemple :
S:=0;for j from 3 to 20 step 3 do S:=S+j; end_for;

674

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

S:=0;pour j de 3 jusque 20 pas 3 faire S:=S+j; fpour;


Troisime syntaxe
On peut laide dun ensemble, dune liste ou dune plage de valeurs A donner les
diffrentes valeurs que doit prendre la variable dincrmentation j en mettant :
for j in A do ....end_for;.
ou sa traduction :
pour j in A faire <instructions> fpour; Par exemple lorsque j
sincrmente de 1 :
S:=0;for j in 1..5 do S:=S+j; end_for;
ou sa traduction
S:=0;pour j in 1..5 faire S:=S+j; fpour;
lorsque j dcrit un ensemble de valeurs :
A:=[3,6,9,15,30,45];S:=0;for j in A do S:=S+j; end_for;
ou sa traduction
A:=[3,6,9,15,30,45];S:=0;pour j in A faire S:=S+j; fpour;
ou
A:=%3,6,9,15,30,45%;S:=0;for j in A do S:=S+j; end_for;
ou sa traduction
A:=%3,6,9,15,30,45%;S:=0;pour j in A faire S:=S+j; fpour;
Attention
Ne pas choisir i comme variable dincrmentation car i reprsente un nombre
complexe ! ! !
On tape :
somfor(n):={
local j,s:=0;
for (j:=1;j<=n;j++){
s:=s+1/j;
}
return s;
}
sompour(n):={
local j,s:=0;
pour j de 1 jusque n faire
s:=s+1/j;
fpour
retourne s;
}
puis :
somfor(5)
ou
sompour(5)
On obtient :
137/60

8.4. LES INSTRUCTIONS DE BASE

8.4.22

675

La fonction : seq

seq nest pas une instruction mais une fonction qui permet de renvoyer la liste
constitue par les diffrentes valeurs du premier argument lorsque le deuxime argument varie selon les valeurs des arguments suivants : valeur de dpart, valeur
darrive, pas (pas=1 par dfaut).
seq(f(k),k,1,3)=[f(1),f(2),f(3)]
seq(f(k),k,1,5,2)=[f(1),f(3),f(5)]
La fonction seq est utile pour tracer une suite de points dans les crans de gomtrie.
Exemple
On veut reprsenter les 10 premiers termes de la suite :
un = (1 + n1 )n = f (n) par les points n + i f (n).
On ouvre un cran de gomrie et on tape :
f(n):=(1+1/n)^n
seq(point(k+i*f(k)),k,1,10)
On obtient :
On voit les points dans cet cran de gomrie
Si on tape :
for (k:=1;k<11;k++) {point(k+i*f(k));}
On obtient :
les points sont seulement dans lcran DispG quon
ouvre avec Cfg->Montrer->DispG ou avec DispG()
Mais si on ouvre un cran de gomrie et si on tape :
L:=[];for (k:=1;k<11;k++)
{L:=append(L,point(k+i*f(k)));}:;L;
On obtient :
On voit les points dans cet cran de gomrie
On peut aussi utiliser la syntaxe comme avec Maple, seq(2^k,k=0..8),
en ajoutant ventuellement un pas seq(2^k,k=0..8,1)

8.4.23

La boucle : repeat until et repeter jusqua

repeat et repeter permettent de faire plusieurs fois des instructions.


repeat est suivi dinstructions, de until et dun boolen.
repeter est suivi dinstructions, de jusqua et dun boolen.
repeat until et repeter jusqua permettent de faire plusieurs fois ces
instructions jusqu ce que la valeur de ce boolen soit vraie.
On tape :

676

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

repeat
saisir("Entrez a>1",a);
until a>4;
Ou on tape :
repeter
saisir("Entrez a>4",a);
jusqua a>1;
Cela aura pour effet de redemander la valeur de a jusqu ce quelle soit strictement
suprieur 4.

8.4.24

La boucle : while et tantque

while et tantque permettent de faire plusieurs fois des instructions.


while est suivi dun boolen mis entre des parenthses et dun bloc dinstructions.
while permet de faire plusieurs fois ce bloc dinstructions tant que la valeur de
ce boolen est vrai.
tantque est suivi dun boolen, de faire dinstructions puis de ftantque.
tantque permet de faire plusieurs fois les instructions situes entre faire et
ftantque tant que la valeur de ce boolen est vrai.
On tape :
somwhile(eps):={
local s,j;
s:=0;
j:=1;
while (1/j>=eps){
s:=s+1/j;
j:=j+1;
}
return s;
}
Ou on tape :
somtantque(eps):={
local s,j;
s:=0;
j:=1;
tantque 1/j>=eps faire
s:=s+1/j;
j:=j+1;
ftantque
retourne s;
}
puis :
somwhile(0.2)

8.4. LES INSTRUCTIONS DE BASE

677

ou
somantque(0.2)
On obtient :
137/60
Remarque
On peut aussi crire un while avec un for :
while (<condition>)<instructions> est quivalent :
for (;<condition>;)<instructions>
On aurait donc pu crire :
somwhilefor(eps):={
local s,j;
s:=0;
j:=1;
for (;1/j>=eps;){
s:=s+1/j;
j:=j+1;
}
return s;
}
ou encore
somforwhile(eps):={
local s,j;
s:=0;
for (j:=1;1/j>=eps;j++){
s:=s+1/j;
}
return s;
}
On tape :
somwhile(0.1);somforwhile(0.1);somwhilefor(0.1)
On obtient :
7129/2520,7129/2520,7129/2520

8.4.25

Modifier lordre dexcution des instructions : label goto

label permet de reprer une instruction dans un programme par un nom de variable.
goto permet de modifier lordre dexcution des instructions, en excutant les instructions du programme partir dune instruction repre par un label.
label a comme arguments, une suite de caractres : par exemple label(truc)
ou label(1).
goto a comme arguments un nom de label : par exemple goto(truc) ou goto(1).
On tape :

678

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

essai(eps):={
local s,j;
s:=0;
j:=0;
label(truc);
j:=j+1;
s:=s+1/j;
if (1/j>=eps) goto(truc);
print(s);
return 0;
}
puis :
essai(0.2)
On obtient :
s:137/60 crit en bleu, puis 0 comme rponse

8.5
8.5.1

Les autres instructions


Pour lire les entres partir dun fichier : read

read a comme argument le nom dun fichier (fichier cre par write ou par la
sauvegarde dun diteur et dans lequel on a crit, par exemple, plusieurs fonctions
ou instructions).
read renvoie la liste des valeurs stockes dans le fichier.
On tape :
a:=3.14; b:=456;write("titi",a,b);
puis :
read("titi")
On obtient :
[3.14,456] et les variables a et b sont affectes par
3.14 et 456
Attention
Si a et b existent leurs valeurs seront remplaces sans pravis par les valeurs stockes dans le fichier :
le principe de read est que lutilisateur met dans un fichier par exemple des programmes ou des grosses variables, donc il sait ce quil y a dedans, et lors dun
read les instructions sont excutes et seules les reponses sont affiches.

8.5. LES AUTRES INSTRUCTIONS

8.5.2

679

Pour crire des variables et leur contenu dans un fichier : write

write a comme argument un nom de fichier et des noms de variables.


write cre un fichier du nom spcifi (et donc efface le fichier prcdent, si celuiciexistait dj) et crit les affectations de ces variables dans ce fichier .
On tape :
a:=3.14; b:=456
puis :
write("titi",a,b)
On obtient :
le fichier "titi" dans lequel il y a a:=3.14; b:=456;
On tape :
testwrite():={
local a;
a:=[];
for (k:=1;k<5;k++){a:=concat(a,k*6.55);}
write("titi",a);
return a;
}
puis :
testwrite()
On obtient :
le fichier "titi" dans lequel il y a,
a:=[6.55,13.1,19.65,26.2]

8.5.3

Pour crire des sorties dans un fichier : fopen fprint fclose

Voici les commandes pour ecrire dans un fichier :


f:=fopen("essai") cre un fichier du nom spcifi ici essai (et donc lefface si celui-ci existait dj) et lui associer la variable f.
fprint(f,12) crit 12 dans le fichier essai.
fclose(f) ferme le fichier essai.
On tape :
testfprint(nom):={
local a,f;
a:=[];
f:=fopen(nom);
for (k:=1;k<11;k++){
fprint(f,k);
}
fclose(f);
return a;
}

680

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

puis :
testfprint("toto")
On obtient :
la cration dun fichier "toto" dans lequel il y a
12345678910

8.5.4

Pour utiliser une chane comme nom de variable ou comme nom


de fonction : #

# permet dutiliser une chane de caractres comme nom de variable ou comme


nom de fonction ou comme nom dinstruction ou comme nom de rpertoire.
# est surtout utile dans un programme.
# a comme argument une chane ou le nom dune variable qui contient une chane
ou une expression renvoyant une chane.
# transforme la chane en une expression mais nvalue pas cette expression. Donc,
pour faire une affectation, on ne doit pas crire #"a:=2", mais on peut crire
#"a":=2 (voir aussi expr 8.5.6).
On tape :
a:="abc";#a:=3
ou :
#"abc":=3
On obtient :
La variable abc contient 3
On tape :
b:="ifactor";(#b)(54)
ou :
(#"ifactor")(54)
On obtient :
2*3^3
On tape :
#"ifactor(54)"
On obtient :
ifactor(54)

8.5. LES AUTRES INSTRUCTIONS

8.5.5

681

Pour utiliser une chane comme un nombre : expr

expr permet dutiliser une chane de chiffres ne commenant pas par un zro
comme un nombre entier crit en base 10 ou une chane de chiffres comportant un
point comme un nombre dcimal crit en base 10.
On tape :
expr("123")+1
On obtient :
124
On tape :
expr("45.67")+2.12
On obtient :
47.79
expr permet dutiliser une chane de chiffres ne comportant pas de 8, ni de 9, et
commenant par un zro comme un nombre entier crit en base 8.
On tape :
expr("0123")
On obtient :
83
En effet 1 82 + 2 8 + 3 = 83
Remarque :
Si on tape expr("018") on obtient le nombre dcimale 18.0.
expr permet dutiliser une chane contenant des chiffres et les lettres a,b,c,d,e,f,
et commenant par 0x comme un nombre entier crit en base 16.
On tape :
expr("0x12f")
On obtient :
303
En effet 1 162 + 2 16 + 15 = 303 Voir aussi 6.5.16

8.5.6

Pour utiliser une chane comme nom de commande : expr

expr permet dutiliser une chane de caractres comme une commande.


expr est surtout utile dans un programme.
expr a comme argument une chane de caractres pouvant tre interprte comme
une commande (ou le nom dune variable qui contient une chane ou une expression
renvoyant une chane).
expr transforme la chane en une expression, puis value cette expression :
pour faire une affectation, on ne doit pas crire expr("a"):=2, mais on doit
crire expr("a:=2") (voir aussi expr 8.5.4)
On tape :

682

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION


expr("c:=1")

On obtient :
La variable c contient 1
On tape :
a:="ifactor(54)";expr(a)
ou :
expr("ifactor(54)")
On obtient :
2*3^3

8.5.7

valuer une expression sous la forme dune chane : string

string value une expression et renvoie sa valeur sous la forme dune chane de
caractres.
On peut aussi utiliser la concatnation de lexpression avec une chane vide.
On tape :
string(ifactor(6))
Ou on tape :
ifactor(6)+""
Ou on tape :
""+ifactor(6)
On obtient :
"2*3"
On tape :
string(quote(ifactor(6)))
On obtient :
"ifactor(6)"

8.6. DAUTRES INSTRUCTIONS UTILES

683

8.6

Dautres instructions utiles

8.6.1

Dfinir une fonction ayant un nombre variable darguments :


args

args ou args(NULL) renvoie la liste des arguments dune fonction sous forme
dune liste : llment dindice 0 est la fonction, les suivants sont les arguments
passs la fonction. Cela permet de travailler avec des fonctions ayant un nombre
darguments non fix a lavance.
Remarque on ne peut pas mettre args() mais args ou args(NULL) (NULL
est obligatoire) on peut aussi utiliser (args)[0] pour dsigner la fonction, (args)[1]
pour dsigner le nom du premier argument... mais il ne faut pas oublier les parenthses autour de args !
On tape :
testargs():={ local y; y:=args; return y[1];}
testargs(12,5)
On obtient :
12
On tape :
somme():={
local s,a;
a:=args;
s:=0;
for (k:=1;k<size(a);k++){
s:=s+a[k];
}
return s;
}
puis :
somme(1,2,3,4)
On obtient :
10

8.6.2

Pour sortir dune boucle : break

break na pas dargument ni parenthse.


break permet de sortir dune boucle.
On tape :
testbreak(a,b):={
local r;
while (1==1){
if (b==0){break;}

684

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

r:=irem(a,b);
a:=b;
b:=r;
}
return a;
}
puis on tape :
testbreak(4,0)
On obtient :
4 car il y a eu linterruption de la boucle while
quand b==0

8.6.3

Pour ne pas faire la fin dune boucle : continue

continue na pas dargument ni parenthse.


continue dans une boucle, permet dignorer la fin de litration et ainsi de passer
directement litration suivante.
On tape :
testcont(b):={
local a;
a:=10;
while (a>0) {
a:=a-3;
if (a>=b) {continue;}
print(a);
}
}
puis on tape :
testcont(4)
On obtient :
a:1 et a:-2 crit en bleu et 1 comme rponse
car a est imprim que si a<b=4

8.6.4

Ouvrir lcran DispG depuis un programme : DispG

DispG na pas darguments.


DispG; permet douvrir lcran DispG depuis un programme.
On tape (ne pas mettre de parenthses) :
DispG;
On obtient :
louverture de lcran DispG

8.7. LE DEBUGGEUR

8.6.5

685

Effacer lcran DispG depuis un programme : ClrGraph

ClrGraph na pas darguments.


ClrGraph permet douvrir lcran DispG depuis un programme.
On tape :
ClrGraph()
Ou on tape :
ClrGraph
On obtient :
leffacement de lcran DispG

8.6.6

Fermer lcran DispG depuis un programme : DispHome

DispHome na pas darguments.


DispHome permet de fermer lcran DispG depuis un programme.
On tape (ne pas mettre de parenthses) :
DispHome;
On obtient :
lcran DispG se ferme

8.7
8.7.1

Le debuggeur
Ouvrir le dbuggeur : debug

debug a comme argument une fonction et ses arguments.


debug ouvre lcran de la fentre de mise au point (ou dbugger) avec sa barre de
boutons. On a la possibilit :
dexcuter le programme au pas pas avec le bouton sst qui inscrit la
commande sst() dans la ligne de commande,
de mettre des points darrts (breakpoint) avec break (ou la commande
breakpoint),
daller directement aveccont une ligne prcise marque par un point darrt (ou la commande cont),
de voir avec watch les variables que lon dsire surveiller (ou la commande
watch),
dexcuter au pas pas les instructions dune fonction utilisateur avec dans
qui inscrit la commande sst_in() dans la ligne de commande, ou encore
de sortir brutalement du dbuggeur avec tuer (ou la commande kill).
On tape par exemple :
debug(pgcd(15,25)).
Il faut bien sr que le programme pgcd existe.
Par exemple on a tap :

686

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

pgcd(a,b):={
local r;
while(b!=0) {
r:=irem(a,b);
a:=b;
b:=r;
}
return a;
}
Puis si on veut observer les variables a et b, on clique sur watch : watch sinscrit
dans la ligne eval et on complte cette ligne en watch(a) puis enter, puis on
clique sur watch et on complte watch en watch(b) puis enter.
Ensuite on clique sur sst, et on voit chaque tape (la ligne qui est excute est
en surbrillance) les valeurs de a et b dans la zone situe en dessous de la barre des
boutons.

8.7.2

Instruction du debuggeur : watch

watch a comme argument le nom des variables que lon dsire surveiller.
On tape par exemple :
watch(a,b)
On obtient :
lvolution de a et de b lors du droulement du
programme

8.7.3

Instruction du debuggeur : rmwatch

rmwatch a comme argument le nom des variables que lon ne dsire plus surveiller.
On tape par exemple :
rmwatch(a,b)
On obtient :
lvolution de a et de b lors du droulement du
programmenest plus visible

8.7.4

Instruction du debuggeur : breakpoint

breakpoint a comme argument le numro de la ligne o lon veut un point


darrt.
On tape par exemple :
breakpoint(4)
On obtient :
cont() provoquera le droulement du programme et un
arrt la ligne 4

8.7. LE DEBUGGEUR

8.7.5

687

Instruction du debuggeur : rmbreakpoint

rmbreakpoint a comme argument le numro de la ligne o lon ne veut plus un


point darrt.
On tape par exemple :
rmbreakpoint(4)
On obtient :
le point darrt la ligne 4 a t effac

8.7.6

Instruction du debuggeur : cont

cont na pas dargument.


cont() est une instruction du debuggeur et permet de continuer un programme
arrt, par un point darrt, dans le debuggeur.
On tape :
cont()
On obtient :
le droulement du programme jusquau prochain point
darrt

8.7.7

Instruction du debuggeur : kill

kill na pas dargument.


kill() est une instruction du debuggeur et permet de sortir du debuggeur.
On tape :
kill()
On obtient :
on sort du dbuggeur

8.7.8

Instruction en vue dun debugage : halt

halt na pas dargument.


halt() est une instruction dans un programme pour programmer un point darrt
dans le debuggeur.
On tape dans un programme :
halt();
On obtient lors du debogage de ce programme :
un arrt du droulement du programme cet endroit

688

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

8.7.9

Utilisation des instructions du debuggeur : cont halt kill

Les instructions cont halt kill nont pas darguments.


cont halt kill sont des instructions du debuggeur (voir ci-dessus).
cont() et kill() sutilisent uniquement dans une session de debogage, quand
le programme est arrt. Typiquement, kill() sutilise quand on a vu o se
trouve lerreur, et que on va savoir corriger le programme, et quil est donc inutile de continuer lexcution du programme buggu.
cont() sutilise pour atteindre le point darrt suivant.
halt() peut tre mis comme instruction dans le programme pour programmer un
point darrt (cela vite de faire une commande breakpoint avec un numro de
ligne) Par exemple on tape :
testhalt(x):={
local y;
y:=x;
halt();
return(y);
}
On tape :
debug(testhalt(5))
On obtient :
louverture du debuggeur et larrt du programme
On tape :
cont() pour continuer le debugage ou kill() pour
larrter
Attention
Si on tape juste testhalt(5) sans mettre debug, le debuggeur souvre mais,
la liste des instructions formant le programme nest pas affiche donc il vaut mieux
faire debug(testhalt(5)) puis enlever les halt() quand le programme est
au point.

8.7.10

Avoir un arrt momentan : Pause

Pause est une instruction qui permet de suspendre lexcution dun programme.
Pause na pas dargument ou a comme argument le temps de pause en secondes :
on ne met pas de parenthses, on crit :
Pause; ou Pause n;
Lorsque Pause na pas dargument (ne pas mettre de parenthses), une fentre

Paused souvre et lexcution reprend lorsque lutilisateur appuie sur Enter


ou sur Close de cette fentre.
On tape : a:=21;b:=5 puis,
print(a);Pause;print(b);

8.7. LE DEBUGGEUR

689

On obtient :

21 scrit en bleu, un arrt puis la fentre Paused


souvre, on tape sur Close et 5 scrit en bleu et on
a (1,0,1) comme rponse
On tape : a:=21;b:=5 puis,
print(a);Pause 3;print(b);
On obtient :
21 scrit en bleu, un arrt de 3 secondes, puis 5
scrit en bleu et on a (1,0,1) comme rponse

8.7.11

Avoir un arrt momentan : WAIT

WAIT est une instruction qui permet de suspendre lexcution dun programme.
WAIT a comme argument le temps de pause en secondes.
On tape : a:=21;b:=5 puis,
print(a);WAIT(3);print(b);
On obtient :
21 scrit en bleu, un arrt de 3 secondes, puis 5
scrit en bleu et on a (1,0,1) comme rponse

8.7.12

Intercepter une erreur : try..catch

On fait le bloc dinstructions aprs try : en cas derreur le message derreur


est stock dans la variable err sous forme dune chaine, et catch excute le bloc
dinstructions aprs catch (err).
On tape :
try{A:=idn(2)*idn(3)}
catch(erreur)
{print("lerreur est "+erreur)}
On obtient :
"lerreur est * Invalid dimension"
On tape :
essai(x):={
local y,err;
try {y:=[[1,2]]+x;}
catch (err){y:="lerreur est "+err;}
return y;}
On tape :
essai([1])

690

CHAPITRE 8. LES FONCTIONS DE PROGRAMMATION

On obtient :
"lerreur est + Bad Argument Value"
On tape :
essai([[3,4]])
On obtient :
[[4,6]]

8.7.13

Gnrer une erreur : throw error ERROR

throw ou error ou ERROR permet de gnrer une erreur en provoquant laffichage dune erreur.
On tape :
f(x):={
if (type(x)!=DOM_INT)
throw(erreur);
else
return x;
}
puis
f(1.2)
On obtient :
"erreur Error: Bad Argument Value"
puis
f(12)
On obtient :
12
On peut capter lerreur grace cette fonction f que lon utilise dans la fonction g
suivante :
g(x):={
try { f(x); } catch (err){ x:=0; }
return x;
}
puis
g(1.2)
On obtient :
0
puis
g(12)
On obtient :
12
La fonction g(x) renvoie, x si x est un entier, et 0 sinon.

Chapitre 9

Les fonctions de gomtrie 2-d


9.1

Gnralits

Toutes les commandes graphiques faites dans une ligne dentre auront en rponse louverture dun cran graphique.
Les dessins de la gomtrie 2-d se font en gnral dans un cran de gomtrie
2-d qui est un cran graphique interactif muni dun diteur de commandes et dune
barre de menus (on ouvre un cran de gomtrie 2-d avec Alt+g).
Les dessins faits dans un cran de gomtrie 2-d sont interactifs : on peut
dfinir des points et des segments avec la souris et modifier une figure en faisant
bouger un de ses points avec la souris.

9.2
9.2.1

Les fonctions de base


Effacer lcran DispG : erase

erase na pas dargument.


On rappelle que lcran DispG est lcran sur lequel est enregistr toutes les commandes graphiques depuis le dbut de la session, sans distinction de niveau. Il permet en particulier de visualiser les affichages graphiques intermdiaires dun programme (en effet seuls les objets graphiques renvoys par return ou retourne
peuvent tre affichs en rponse dans un niveau o on excute un programme).
erase efface lcran DispG et influe sur la commande graph2tex car seules
les sorties graphiques faites postrieurement la commande erase() sont prises
en compte par la commande graph2tex.
On tape :
erase
ou :
erase()
On obtient :
Leffacement de lcran DispG et efface lhistorique
interne des graphiques
691

692

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Remarque
erase nefface pas un cran de gomtrie, en effet on na pas besoin deffacer un
cran de gomtrie car soit on change ses commandes dentre, soit on ouvre un
autre cran de gomtrie pour faire une nouvelle figure.

9.2.2

Effacer les axes : switch_axes

switch_axes met ou enlve les axes de lcran gomtrique.


Vous pouvez aussi effacer les axes (resp les faire rapparaitre) en cochant (resp
dcochant) Montrer les axes avec le bouton cfg de lcran de gomtrie.
switch_axes a comme paramtres 1 pour mettre les axes, 0 pour les enlever, ou
aucun paramtre, dans ce cas, Xcas met les axes, si ils ny sont pas, et les enlve
si ils y sont.
On tape :
switch_axes(0)
On obtient :
Leffacement des axes de lcran graphique
On tape ensuite :
switch_axes()
Ou
switch_axes(1)
On obtient :
Le trac des axes de lcran graphique

9.2.3

Tracer les vecteurs unitaires : vecteur_unitaire_Ox_2d


Ox_2d_unit_vector, vecteur_unitaire_Oy_2d, Oy_2d_unit_vector

vecteur_unitaire_Ox_2d(), Ox_2d_unit_vector() trace le vecteur


unitaire de laxe des x de cran de gomtrie 2-d.
vecteur_unitaire_Oy_2d(), Oy_2d_unit_vector() trace le vecteur
unitaire de laxe des y de cran de gomtrie 2-d.
Vous pouvez effacer les axes (resp les faire rapparaitre) en cochant (resp dcochant) Montrer les axes avec le bouton cfg de lcran de gomtrie.
Ces commandes nont pas de paramtre. On peut mettre une lgende avec la commande legende.
On tape :
vecteur_unitaire_Ox_2d(),legende(1,"u",vert,quadrant4)
On obtient :
Le vecteur unitaire de laxe des x de cran de
gomtrie 2-davec u crit en vert
On tape :

9.2. LES FONCTIONS DE BASE

693

vecteur_unitaire_Oy_2d(),legende(i,"v",vert,quadrant2)
On obtient :
Le vecteur unitaire de laxe des y de cran de
gomtrie 2-d avec v crit en vert

9.2.4

Tracer un repre : repere_2d frame_2d

repere_2d() frame_2d() trace le repre de cran de gomtrie 2-d.


Vous pouvez effacer les axes (resp les faire rapparaitre) en cochant (resp dcochant) Montrer les axes avec le bouton cfg de lcran de gomtrie.
Ces commandes nont pas de paramtre.
On tape :
repere_2d()
On obtient :
Le repre de cran de gomtrie 2-d

9.2.5

Effacer les points dfinis par TX et TY

Lorsque les axes sont dessins, les points ayant pour coordonnes des multiples
de TX et de TY sont dessins.
Pour effacer ces points, en gardant les axes il suffit de mettre 0 dans TX et/ou dans
TY : on dfinit TX et TY avec la configuration graphique.

9.2.6

Avoir du papier point : papier_pointe dot_paper

papier_pointe permet davoir du papier point cest dire de tracer un reseau


de points sur des droites horizontales et sur des droites de pente tan(t).
papier_pointe a 3,4 ou 5 arguments : lunit ux sur laxe des x, langle t et
lunit uy sur laxe des y et ventuellement x=xmin..xmax,y=ymin..ymax
pour navoir que des points dans le rectangle [xmin..xmax]*[ymin..ymax].
Par dfaut xmin,xmax,ymin,ymax sont les valeurs dfinies dans Cfg->Configuration
graphique.
Vous avez la possibilit denlever les axes orthonorms en utilisant le bouton cfg
et en dcochant Montrer les axes.
On tape pour avoir les sommets dun rseau :
papier_pointe(0.6,pi/2,0.6)
On obtient :
Le pointage de tous les sommets du reseau form par
des carrs dans le rectangle [xmin, xmax] [ymin, ymax]
On tape :
papier_pointe(1,pi/3,sqrt(3)/2,x=-2..3,y=-1..2)
On obtient :
Le pointage de tous les sommets du reseau form par
des triangles quilatraux dans le rectangle
[2, 3] [1, 2]

694

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.2.7

Avoir du papier avec des lignes : papier_ligne


line_paper

papier_ligne permet davoir du papier avec des lignes espaces de ux sur


laxe des x et faisant un angle t avec lhorizontale.
papier_ligne a 2, 3 ou 4 arguments : lunit ux sur laxe des x, langle t form
par laxe des y et des x et ventuellement x=xmin..xmax,y=ymin..ymax
pour avoir ces lignes dans le rectangle [xmin..xmax]*[ymin..ymax]. Par
dfaut xmin,xmax,ymin,ymax sont les valeurs dfinies dans Cfg->Configuration
graphique.
Vous avez la possibilit denlever les axes orthonorms en utilisant le bouton cfg
et en dcochant Montrer les axes.
On tape :
papier_ligne(0.6,pi/3)
On obtient :
des lignes espaces de 0.6 sur laxe des x et faisant
un angle de /3 avec Ox dans le rectangle
[xmin, xmax] [ymin, ymax]
On tape
papier_ligne(0.6,pi/3,x=-2..3,y=-1..2)
On obtient :
des lignes espaces de 0.6 sur laxe des x et faisant
un angle de /3 avec Ox dans le rectangle [2, 3] [1, 2]

9.2.8

Avoir du papier quadrill : papier_quadrille


grid_paper

papier_quadrille permet davoir du papier quadrill cest dire de tracer un


reseau form de droites horizontales et de droites de pente tan(t).
papier_quadrille a 3,4,5 arguments : lunit ux sur laxe des x, langle t et
lunit uy sur laxe des y et ventuellement x=xmin..xmax,y=ymin..ymax
pour avoir ces lignes dans le rectangle [xmin..xmax]*[ymin..ymax]. Par
dfaut xmin,xmax,ymin,ymax sont les valeurs dfinies dans Cfg->Configuration
graphique.
Vous avez la possibilit denlever les axes orthonorms en utilisant le bouton cfg
et en dcochant Montrer les axes.
On tape pour avoir un quadrillage :
papier_quadrille(1,pi/2,1)
On obtient :
Le reseau form par des carrs dans le rectangle
[xmin, xmax] [ymin, ymax]
On tape pour avoir un quadrillage dans un rectangle :

9.2. LES FONCTIONS DE BASE

695

papier_quadrille(1,pi/3,sqrt(3)/2,x=-2..3,y=-1..2)
On obtient :
Le reseau form par des losanges dangle /3 dans le
rectangle [2, 3] [1, 2]

9.2.9

Avoir du papier triangul : papier_triangule


triangle_paper

papier_triangule permet davoir du papier triangul cest dire de tracer un


reseau triangulaire dangle t.
papier_pointe a 3,4 ou 5 arguments : lunit ux sur laxe des x, langle t et
lunit uy sur laxe des y et ventuellement x=xmin..xmax,y=ymin..ymax
pour avoir ces lignes dans le rectangle [xmin..xmax]*[ymin..ymax]. Par
dfaut xmin,xmax,ymin,ymax sont les valeurs dfinies dans Cfg->Configuration
graphique.
Vous avez la possibilit denlever les axes orthonorms en utilisant le bouton cfg
et en dcochant Montrer les axes.
On tape pour avoir un rseau triangulaire :
papier_triangule(1,pi/2,1)
On obtient :
Le reseau form par des moitis de carrs et dans le
rectangle [xmin, xmax] [ymin, ymax]
On tape pour avoir un reseau triangulaire :
papier_triangule(1,pi/3,sqrt(3)/2,x=-2..3,y=-1..2)
On obtient :
Le reseau form par des triangles quilatraux dans le
rectangle [xmin, xmax] [ymin, ymax]

9.2.10

Changer les paramtres de la fentre graphique : xyztrange

xyztrange met ou enlve les axes de lcran gomtrique. xyztrange a 15


paramtres ce sont des paramtres que lon peut dfinir dans lcran de la configuration du graphique. On ouvre cet cran avec la configuration graphique (voir
1.6.2).
On tape ou plutt on utilise le menu Cfg :
xyztrange(-5,5,-5,2,-10,10,-1,6,-5,5,-1.2384,2,1,0,1)
On obtient :
La fentre visible est [-5;5]*[-1.2834;2]
Attention la diffrence entre "fentre de calcul" et "fentre visible" : si la fentre
de calcul est plus grande, on pourra aller voir ce qui se passe "ailleurs" avec les
flches faisant parties des boutons de lcran gomtrique.
De plus, si on a demand un repre orthonorm en cliquant sur , la fentre visible
demande sera contenue dans ce qui est rellement visible.

696

9.3
9.3.1

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Les attributs des objets graphiques


Gnralits sur les attributs

Les attributs des objets graphiques peuvent tre dfinis par des commandes ou
avec des paramtres optionnels qui sont soit globaux soit locaux.
Certains arguments optionnels, comme titre, labels, sont globaux, ils sont
mis au dbut dune ligne de commandes ayant comme dernire instruction une instruction graphique et sont applicables toutes les instructions graphiques de cette
ligne de commandes. Par exemple :
titre="A et son conjugu B";A:=point(1+i);B:=point(1-i).
Ils sont dscrits ci-aprs.
Certains noms comme affichage, couleur, legende peuvent tre des
noms de commandes ou des noms de paramtres optionnels :
Les commandes sappliquent lobjet graphique mis comme argument ou,
sil ny a pas darguments, modifient les attributs par dfaut qui seront utiliss pour les instructions graphiques qui suivent.
On tape :
couleur(rouge)
On obtient :
1 et toutes les commandes graphiques sans
paramtre optionnel de couleur seront dessines en
rouge
On tape :
couleur(triangle(-1-i,1,1+i),bleu)
On obtient :
le triangle(-1-i,1,1+i) est dessin en bleu
Il y a deux sortes dattributs : les attributs globaux qui sont partags par
toutes les commandes graphiques affiches dans un mme cran graphique
et les attributs individuels.
On tape (attribut individuel) :
triangle(0,1,1+i,couleur=bleu)
On obtient :
le triangle(0,1,1+i) dessin en bleu
On tape (attribut global) :
titre="medianes";triangle(-1-i,1,1+i);
mediane(-1-i,1,1+i); mediane(1,-1-i,1+i);
mediane(1+i,1,-1-i)
On obtient :
le titre "medianes" pour le triangle(0,1,1+i) et
ses mdianes

9.3.2

Les commandes dattributs

Les attributs des objets graphiques peuvent tre dfinis par des commandes qui
sont :
legend ou legende,
display ou affichage ou color ou couleur

9.3. LES ATTRIBUTS DES OBJETS GRAPHIQUES

697

Les paramtres de ces commandes sont :


objet_graphique,nom_de_lattribut=valeur1+valeur2+...
et les valeurs de cet attribut sont valables uniquement pour lobjet graphique spcifi.
Par exemple :
legende(point(1+i),"A",rouge,quadrant3,epaisseur_point_2)
affichage(point(1+i),rouge+epaisseur_point_6+point_carre)
affichage(point(1+i,legend="A"),epaisseur_point_2+point_carre)
Remarque
Si la commande display(..) ou affichage(...) est tape dans une ligne
de commandes, on peut utiliser ces commandes avec comme paramtre
valeur1+valeur2+... et
alors la commande est globale pour tous les objets dfinis ensuite dans cette ligne
de commandes. Il faut viter dutiliser ces commandes de cette faon dans un cran
de gomtrie, car les attributs sont dj dfinis globalement dans cfg et le bouton
des attributs.

9.3.3

Les paramtres optionnels dattributs

Les attributs des objets graphiques peuvent aussi se dfinir partir de paramtres optionnels. Ils sont de la forme nom_de_lattribut=valeur1+valeur2+....
Il y a deux sortes de paramtres optionnels :
les paramtres optionnels globaux sont mis au dbut dune ligne de commandes ayant comme dernire instruction une instruction graphique et sont
applicables toutes les instructions graphiques de cette ligne de commandes,
les paramtres optionnels locaux sont passs en paramtre dune commande
graphique.
La liste des attributs et leurs valeurs possibles sont :
display=filled ou affichage=rempli pour dessiner des figures
pleines (est utilis seulement comme attribut local),
axes=1 ou axes=true et axes=0 ou axes= false montre ou cache
les axes. Cela est utilis seulement comme attribut global et suivi dune commande graphique,
couleur=0...couleur=255 ou color=0...color=255 pour dessiner
avec la couleur indique (est utilis seulement comme attribut local),
couleur= une valeur entire entr 256 et 256+7*16+14 pour dessiner avec
une couleur de larc en ciel,
epaisseur=1... epaisseur=7 ou thickness=1... pour faire des traits
plus ou moins pais. epaisseur est un attribut pour compatibilit Maple
(est utilis seulement comme attribut local),
nstep=400 permet de spcifier le nombre de points dchantillonage de la
fonction reprsenter en 3-d (est utilis seulement comme attribut local),
tstep=0.3 permet de donner le saut dchantillonnage dun paramtre de
trac paramtrique en gnral t, par exemple
plotparam(sin(3*t)+i*cos(3*t),t=0..2*pi/3,tstep=0.01)
(est utilis seulement comme attribut local),
ustep=0.3 permet de donner le saut dchantillonnage de la premire
variable dun trac paramtrique 2-d, en gnral u, (est utilis seulement

698

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


comme attribut local),
vstep=0.3 permet de donner le saut dchantillonnage de la deuxime
variable dun trac paramtrique 2-d, en gnral v, (est utilis seulement
comme attribut local),
xstep=0.01 permet de donner le saut dchantillonnage de la variable x
(est utilis seulement comme attribut local),
ystep=0.01 permet de donner le saut dchantillonnage de la variable y
(est utilis seulement comme attribut local),
zstep=0.01 permet de donner le saut dchantillonnage de la variable z
(est utilis seulement comme attribut local),
frames=10 or trames=10 permet de spcifier le nombre de graphes
calculs dans une animation de graphe par les commandes animate ou
animate3d (est utilis seulement comme attribut local),
labels=["u","v"] permet de renommer les axes (est utilis seulement
comme attribut global),
legende ou legend (est utilis comme attribut global ou local ou comme
commande) :
legende=["mn","kg"] (utilis comme attribut global) permet de mettre
comme lgende le nom des units sur les axes, condition quen dehors
dun cran de gomtrie, cette commande soit suivie sur la mme ligne
par une commande graphique. Par exemple :
legende=["mn","kg"];point(1+i), ou
legend=["xunit","yunit","zunit"]; point([1,1,1])
legende(1+i*sin(1),"sin(1)") ou
legende(point(1+i*sin(1)),"sin(1)") (utilis comme commande) ou
point(1+i*sin(1),legende="sin(1)") (utilis comme attribut local) permet de mettre une lgende en un point de lcran, donn
par son affixe. On peut spcifier la couleur ou la position de la lgende par
rapport au point en mettant dautres paramtres par exemple :
legende(1+i*sin(1),"sin(1)",quadrant4,rouge)
(utilis comme commande) ou
point(1+i*sin(1),
legende="sin(1)",affichage=quadrant4+rouge)
(utilis comme attribut local)
legende([20,60],"graphe") (utilis comme commande) permet
de mettre une lgende en un point de lcran, donn par ses coordonnes
en pixels ([0,0] se trouve en haut et gauche de lcran),
polygone(-1,-i,1,2*i,legende="p") permet de mettre une lgende au milieu du ct reliant le dernier au premier sommet du polygone
ici -1,2*i (utilis comme attribut local),
point([i,1,2,2*i],
legende="1+i",display=quadrant2+rouge)
permet de mettre une lgende au milieu du segment 2,2+i,
style na quune valeur reconnue : point (cest pour la compatibilit
Maple) et style=point (utilis comme attribut local) permet de dessiner
une droite selon des pointills. Ces pointills correspondent dashdot_line
ou ligne_tiret_point. On a :

9.3. LES ATTRIBUTS DES OBJETS GRAPHIQUES

699

droite(y=x,style=point,affichage=vert+line_width_2)
est identique :
droite(y=x,affichage=vert+ligne_tiret_point+
line_width_2),
titre="..." ou title="..." permet de mettre un titre la fentre
graphique (est utilis seulement comme attribut global).
gl_texture= peut tre un attribut local ou global.
gl_texture="nom_fichier_image" permet de mettre une image
sur un objet graphique 3-d ou sur un rectangle 2-d si il est utilis comme attribut local. Par exemple carre(i,1+i,gl_texture="image.jpg")
dessine limage contenue dans le fichier "image.jpg" dans le carr, et
gl_texture= permet de mettre un fond sur un graphique 2-d si il est utilis comme attribut global. Par exemple gl_texture="image.jpg";
carre(i,1+i) dessine un carr avec comme fond dcran limage contenu
dans le fichier "image.jpg"
gl_x_axis_name="xname", gl_y_axis_name="yname",
gl_z_axis_name="" : utilis comme attribut global, dfinit individuellement les noms des axes x, y, z,
gl_x_axis_unit="xunit", gl_y_axis_unit="yunit",
gl_z_axis_unit="zunit" : utilis comme attribut global, dfinit individuellement les units des axes x, y, z,
gl_x_axis_color=n, gl_y_axis_color=n, gl_z_axis_color=n :
utilis comme attribut global, dfinit individuellement les couleurs des axes
x, y, z avec la couleur n,
gl_x=xmin..xmax, gl_y=ymin..ymax, gl_z=zmin..zmax : utilis comme attribut global, definit la configuration du graphique (pas compatible avec linteractivit),
gl_xtick=, gl_ytick=, gl_ztick= : utilis comme attribut global
met des marques sur les axes selon la valeur donne,
gl_shownames=true or false : utilis comme attribut global, montre
ou cache les noms des objets,
gl_rotation=[x,y,z] : utilis comme attribut global, definit laxe de
rotation pour les animations des scnes 3-d,
gl_quaternion=[x,y,z,t] : utilis comme attribut global definit le
quaternion pour la visualisation des scnes 3-d (pas compatible avec linteractivit),
dautres options d OpenGL pour configurer la lumire existent mais ne sont
pas dcrites ici.
Remarque
Les options dopengl sont utiliser avec une grande prudence car elles ne sont pas
compatibles avec linteractivit.

9.3.4

Mettre une lgende : legende

legende a deux ou trois paramtres :


le 1er paramtre est un point (ou son affixe) ou une liste de 2 entiers. Cet
argument permet de savoir o lon doit mettre la lgende : soit partir du
point soit partir de la position en pixels donne par la liste de 2 coordonnes

700

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

entires (en partant du coin en haut gauche et les y dirigs vers le bas).
le 2ime paramtre est la lgende (soit une chane de caractres, soit le nom
dune variable : dans ce cas legende affiche le contenu de la variable),
ventuellement un 3ime paramtre pour indiquer le quadrant dans lequel il
faut mettre la lgende et dont la valeur est :
quadrant1,quadrant2,quadrant3,quadrant4
(par dfaut cest quadrant1).
legende met la chane de caractres cet endroit donn. situ en haut gauche
et les y sont dirigs vers le bas).
On tape :
legende(1+i,"bonjour")
On obtient :
Le point 1+i et "bonjour" crit partir du point 1+i
dans le premier quadrant
On tape :
legende(1+i,"bonjour",quadrant4)
Ou on tape :
legende(1+i,quadrant4,"bonjour")
On obtient :
Le point 1+i et "bonjour" crit dans le quatrime
quadrant du point 1+i
On tape :
legende([30,20],"bonjour")
On obtient :
"bonjour" crit partir du point en pixels x=30 et
y=20
On tape :
legende([30,20],"bonjour",quadrant4)
On obtient :
"bonjour" crit partir du point en pixels x=30 et
y=20 dans le quatrime quadrant
Pour mettre une lgende un angle voir 9.17.5
Attention
Le nom legend (ou legende) peut servir de paramtre global pour mettre en
lgende le nom des units sur les axes. Dans ce cas, legende) est suivi de = puis
dun vecteur compos de 2 chaines qui sont le nom des units (on met une chaine
vide si on ne veut plus avoir lunit). Le nom legend (ou legende) peut aussi

9.3. LES ATTRIBUTS DES OBJETS GRAPHIQUES

701

servir de paramtre local qui sera le paramtre optionnel dune commande point
ou dune commande traant un polygone (triangle...polygone). Dans ce
cas, la lgende sinscrit au niveau du point ou au niveau du milieu du ct reliant le
dernier au premier sommet du polygone. Le nom du paramtre optionnel (ici unit).
Le nom legend ou legende) est suivi de = puis de la lgende (soit une chaine
de caractres, soit un nom de variable contenant une chaine de caractres) est le
paramtre que lon passe comme argument supplmentaire dans les commandes
graphiques.
On tape :
legende=["mn","kg"]
On obtient :
6mn 6mn selon laxe des x et 5kg 5kg selon laxe des
y
On tape :
point(1+i,legende="bonjour")
Ou on tape :
a:="bonjour";point(1+i,legende=a)
On obtient :
Le point 1+i et "bonjour" crit au point 1+i
On tape :
polygone(-1,-i,1,2*i,legende="P")
Ou on tape :
a:="P";polygone(-1,-i,1,2*i,legende=P)
On obtient :
Le polygone -1,-i,1,2*i et "P" crit au point -1/2+i
Remarque
Pour mettre une legende a un angle on utilise angle avec comme dernier paramtre une chaine vide (dans ce cas un petit arc dsignera langle) ou une chaine
que sera la legende (dans ce cas un petit arc et la chaine dsignera langle) par
exemple :
angle(0,1,1+i,"") ou angle(0,1,1+i,"a") trace langle et
angle(0,1,1+i,"")[0] ou angle(0,1,1+i,"a")[0] renvoie /4. Mais
Attention angle(0,1,1+i,"") ou angle(0,1,1+i,"a") renvoie une figure gomtrique i.e. le trac`e de langle. Donc si vous voulez que a dsigne la
valeur de langle et avoir aussi le dessin il faut taper par exemple :
a:=angle(0,1,1+i); et angle(0,1,1+i,"a")

702

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.3.5

Les commandes daffichage : display color affichage


couleur

affichage couleur peut avoir comme paramtre diffrentes valeurs, relies par +, permettant de grer les attributs des graphiques venir dune ligne de
commandes normale (la commande est alors globale) ou de grer les attributs dun
objet graphique ou dune lgende (la commande est alors locale).
Attention
affichage(0) remet laffichage par dfaut : couleur noire, figure non pleine,
les points ont des lgendes...
Pour ne pas afficher le nom de lobjet
hidden_name est une valeur de paramtre de la commande affichage qui
permet de ne pas afficher le nom de lobjet. On tape (ici la commande affichage
est locale au point A) :
affichage(A:=point(1+i),hidden_name);B:=point(-1);
D:=droite(A,B)
On obtient :
A est dessin sans son nom et B et la droite A,B sont
dessins avec leur nom
On tape (ici la commande affichage est locale) :
A:=point(1+i);B:=point(-1);affichage(D:=droite(A,B),hidden_name)
On obtient :
Les points A et B et leurs noms et la droite A,B
dessine sans son nom
Attention NE PAS mettre affichage(hidden_name) comme commande globale car aprs, aucun nom sera visible, et seule la commande affichage(0)
remettra laffichage par dfaut.
Mettre de la couleur
Un entier entre 0 et 255 (ou un nom de couleur) reprsente une couleur de la palette
des couleurs que lon peut voir avec le bouton des couleurs de lcran de gomtrie
et, un entier entre 256 et 381 reprsente les couleurs de larc en ciel. Pour voir les
couleurs de larc en ciel il suffit dexcuter le programme suivant :
arcenciel():={
local j,C;
C:=[];
for (j:=256;j<382;j++){
C:=append(C,carre(j,j+1,couleur=j+rempli));
}
C;
}

9.3. LES ATTRIBUTS DES OBJETS GRAPHIQUES

703

Pour voir larc en ciel, on tape a:=arcenciel():;, puis a pour voir toutes les
couleurs (le numro dune couleur est alors gal son abscisse) ou par exemple
a[300-256] pour voir la couleur de numro 300.
Autre mthode, on tape :
ciel():={ local j;
for (j:=0;j<126;j++)
carre(j,(j+1),affichage=rempli+256+j);} puis,
ClrGraph;ciel() et on ouvre la fentre DispG avec le menu Cfg sous menu
Montrer puis DispG. On regle cfg de cette fentre en prenant WX-=-1, WX+=127,
WY-=0 et WY+=1 et on voit ainsi les 126 couleurs de larc en ciel !
La commande couleur ou affichage avec comme paramtre un entier
entre 0 et 381 (ou un nom de couleur) permet de tracer un objet gomtrique avec
la couleur spcifie.
couleur ou affichage a un argument (resp deux arguments) : le nom de
la couleur ou lentier dsignant cette couleur (noir=0, rouge=1, vert=2, jaune=3,
bleu=4) (resp lobjet gomtrique ou une lgende et le nom de la couleur ou le
numro de la couleur).
Attention
Le nom couleur ou affichage ou display ou color peut aussi servir de paramtre optionnel dune commande graphique. Dans ce cas, le nom du paramtre
optionnel (ici couleur ou affichage ou color) est suivi de = puis de la
valeur de lentier dsignant la couleur, est le paramtre que lon passe comme argument supplmentaire dans les commandes graphiques.
On tape :
couleur(segment(0,1+i),rouge)
Ou on tape :
segment(0,1+i,couleur=rouge)
On obtient :
Le segment(0,1+i) est dessin en rouge
On tape :
couleur(point(1+i),2)
Ou on tape :
point(1+i, couleur=2)
On obtient :
Le point 1+i apparait avec une croix (x) verte
On tape :
affichage(rouge)
On obtient :

704

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


aprs cette instruction, les dessins resultant de
commandes graphiques se feront en rouge

On tape :
couleur(legende(1+i,"AA"),rouge)
Ou on tape :
legende(1+i,"AA",couleur=rouge)
On obtient :
Le point(1+i) dessin en rouge a comme lgende rouge
AA
Pour dessiner une figure pleine
rempli ou filled est une valeur de paramtre de la commande affichage
qui permet d e dessiner une figure pleine. On tape (ici la commande affichage
est globale) :
affichage(rempli);carre(0,1+i);triangle(-1,0,-i);
On obtient :
le carre(0,1+i) plein et le triangle(-1,0,-i) plein
Les diffrents affichages de points
couleur ou affichage peut avoir comme argument la forme de la reprsentation des points 2-d laffichage. Ces formes peuvent avoir des traits plus ou
moins pais selon la valeur de n de point_width_n.
La reprsentation des points 3-d a comme forme un carr (cest point_carre)
plus ou moins gros selon la valeur de n de point_width_n.
Les diffrentes options sont :
point_losange ou rhombus_point pour reprsenter un point par un
petit losange (3),
point_carre ou square_point pour reprsenter un point par un petit
carr (2),
point_croix ou cross_point pour reprsenter un point par une croix
() cest la reprsentation par dfaut,
point_etoile ou star_point pour reprsenter un point par une toile
(*),
point_plus ou plus_point pour reprsenter un point par le signe plus
(+),
point_point pour reprsenter un point par un point ().
point_triangle ou triangle_point pour reprsenter un point par
un triangle (4),
point_invisible ou invisible_point pour ne pas reprsenter un
point.

9.3. LES ATTRIBUTS DES OBJETS GRAPHIQUES

705

Les diffrentes paisseurs sont :


point_width_1 ou epaisseur_point_1,point_width_2 ou epaisseur_point_2...point_width
ou epaisseur_point_8
Attention
Le nom couleur ou color ou affichage est aussi le nom dun paramtre
que lon passe comme argument supplmentaire dans les commandes gomtriques
lorsquil est suivi de =, puis de la valeur dun attribut puis de +, puis de la valeur
dun autre attribut etc...
On tape :
couleur(point(1+i),rouge+point_carre+point_width_3)
Ou on tape :
point(1+i,affichage=rouge+point_carre+point_width_3)
On obtient :
Le point (1+i) est dessin en rouge laide dun
petit carr
On tape :
affichage(point_carre)
On obtient :
aprs cette instruction, les points seront dessins
laide dun petit carr
Les diffrents formes daffichage des lignes
couleur ou affichage peut avoir comme argument la forme de la reprsentation des lignes laffichage.
Les diffrentes options sont :
solid_line ou ligne_trait_plein est un argument de couleur
et permet de dessiner une ligne en trait plein (cest la reprsentation par
dfaut),
dash_line ou ligne_tiret est un argument de couleur et permet
de dessiner une ligne en pointill.
dashdot_line ou ligne_tiret_point est un argument de couleur
et permet de dessiner une ligne avec un tiret et un point,
dashdotdot_line ou ligne_tiret_pointpoint est un argument
de couleur et permet de dessiner une ligne avec un tiret et deux points,
cap_flat_line ou ligne_chapeau_plat est un argument de couleur
et permet de dessiner une ligne plate,
cap_round_line ou ligne_chapeau_rond est un argument de couleur
et permet de dessiner une ligne tubulaire,
cap_square_line ou ligne_chapeau_carre est un argument de
couleur et permet de dessiner une ligne section carree.
On tape :
couleur(segment(0,1+i),rouge+dash_line)
On obtient :
Le segment (0,1+i) est dessin en rouge en pointill

706

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Les diffrentes paisseurs daffichage des lignes


couleur ou affichage peut avoir comme argument lpaisseur de la reprsentation des lignes laffichage.
Les diffrentes options dpaisseurs sont :
line_width_1, line_wdith_2,...line_width_8 ou
epaisseur_ligne_1, epaisseur_ligne_2,...epaisseur_ligne_8.
line_width_n est un argument de couleur ou affichage et permet de
dessiner une ligne plus ou moins epaisse.
On tape :
couleur(droite(y=1),rouge+line_width_1)
On obtient :
La droite (y=1) est dessine en rouge et en trait fin
On tape :
couleur(droite(y=2),rouge+line_width_7)
On obtient :
La droite (y=2) est dessine en rouge et en trait trs
pais

9.4

Comment dfinir un objet gomtrique sans le tracer :


nodisp

nodisp appliqu une commande permet de ne pas afficher la rponse, mme


quand il sagit dune commande graphique.
On peut aussi terminer la commande par :; pour ne pas gnrer de rponse.
On tape :
C:=point(1+i)
cercle(C,sqrt(2))
On obtient :
Le point C daffixe 1+i et le cercle de centre C et de
rayon sqrt(2) sont tracs
On tape :
nodisp(C:=point(1+i))
Ou on tape :
C:=point(1+i):;
puis
cercle(C,sqrt(2))
On obtient :
Seul le cercle de centre 1+i et de rayon sqrt(2) est
trac

9.5. COMMENT DFINIR ET TRACER SANS NOM, UN OBJET GOMTRIQUE707

9.5

Comment dfinir et tracer sans nom, un objet gomtrique

nodisp permet de dfinir un objet gomtrique sans le tracer. On peut ensuite


tracer lobjet en mettant comme commande son nom, mais alors, son nom napparaitra pas sur la figure.
On peut aussi dfinir un objet gomtrique et utiliser eval. On tape :
nodisp(C:=point(1+i))
Ou on tape :
C:=point(1+i):;
puis on tape :
C
Ou on tape :
eval(C:=point(1+i))
On obtient :
Le point 1+i est marqu dune croix mais il na pas de
nom

9.6

Comment dfinir et tracer un objet gomtrique avec


son nom

Laffectation dun objet gomtrique dans une variable permet de dfinir cet objet
gomtrique et de le tracer avec une lgende ayant comme nom, le nom de la
variable.
Si on veut donner cet objet gomtrique un nom diffrent de celui de la variable,
on peut dfinir lobjet gomtrique avec une affectation qui se termine par :; et
utiliser legende. Voici des exemples : On tape :
nodisp(B:=point(1+i))
Ou on tape :
B:=point(1+i):;
Le point B est dfini mais nest pas trac.
puis on tape :
legende(B,"Bien")
Ou on tape :
point(affixe(B),legende="Bien")
On obtient :

708

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Le point 1+i est marqu dune croix et a comme nom


"Bien"
Remarque
Si on veut dfinir lobjet gomtrique sans le tracer, puis le faire apparaitre avec
son nom, on peut aussi utiliser eval (voir la commande eval6.13.2).
On tape :
nodisp(B:=point(1+i))
Ou on tape :
B:=point(1+i):;
Le point B est dfini mais nest pas trac.
puis on tape :
B:=eval(B,1))
Ou on tape :
B:=B
Ou on tape :
legende(B,"B")
Ou on tape :
point(affixe(B),legende="B")
On obtient :
Le point 1+i est marqu dune croix et a comme nom "B"
Si on tape :
B:=eval(B,2))
On obtient :
Le point 1+i est marqu dune croix et na pas de nom

9.7
9.7.1

Comment lire et crer une image


Quest-ce quune image ?

Pour Xcas une image est une liste a de 5 lments :


a[0] est une liste de 3 lments : le nombre de canaux (3 ou 4) et le nombre
de lignes n et de colonnes p utiliss pour la dimension de limage,
a[1] correspond au canal rouge : cest une matrice n, p de nombres entiers
entre 0 et 255,
a[2] correspond au canal vert : cest une matrice n, p de nombres entiers
entre 0 et 255,
a[3] correspond au canal pour la transparence : cest une matrice n, p de
nombres entiers entre 0 et 255,
a[4] correspond au canal bleu : cest une matrice n, p de nombres entiers
entre 0 et 255,

9.7. COMMENT LIRE ET CRER UNE IMAGE

9.7.2

709

Pour lire une image : readrgb

readrgb peut lire un fichier contenant une image. Ce fichier peut tre un fichier
.jpg ou .png ou .gif.
readrgb renvoie [[nombre_canaux,largeur,hauteur],rouge,vert,transparence,bleu]
o rouge,vert,transparence,bleu sont des matrices.
On tape :
a:=readrgb("image.jpg")
On obtient :
une liste de 5 lments qui sont [4,20,10] suivi de 4
matrices de dimension 20,10 qui indiquent o sont
situ les couleurs rouge,vert,transparence,bleu]

9.7.3

Pour recrer ou crer une image : writergb

writergb permet de stocker une image lue avec readrgb dans un fichier de
suffixe .png.
ou
de crer une image et de la stocker dans un fichier de suffixe .png. On peut crer
cette image avec des niveaux de gris ou des niveaux des diffrentes couleurs.
On possde une variable (par exemple a) contenant une image lue avec
readrgb.
writergb a deux arguments : le nom du fichier dans lequel on veut stocker
la nouvelle image et une liste contenant a[0] (liste contenant le nombre de
canaux et les dimensions de la matrice des pixels de cette image), puis les
couleurs de cette image qui sont les matrices a[1] pour la couleur rouge,
a[2] pour la couleur verte, a[3] pour la transparence et a[4] pour la
couleur bleu.
La transparence permet de superposer plusieurs images : sa valeur va de 0
255 (si la transparence vaut 0 cest un cache !).
On tape :
a:=readrgb("image.jpg")
Puis on tape :
writergb("imagevrb.png",[a[0],a[2],a[1],a[3],a[4]])
Puis on tape :
gimp "imagevrb.png"
On obtient :
limage de dpart dans laquelle le rouge est
devenu vert et le vert est devenu rouge
Essayer de crer une image :
writergb("essai.png",[[4,2,2],[[255,0],[0,0]],
[[0,255],[0,0]],[[255,125],[255,255]],
[[0,0],[255,0]]])
vous obtenez (avec un vert attenu du au 125 de la 3ime matrice) :

710

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


y

x0

0.5

1.5

2
0

0.5

1.5

ou encore essayer :

writergb("image1.png",[[4,2,3],[[255,0,255],[0,255,0]],
[[0,0,255],[0,0,0]],[[255,125,125],[255,255,255]],
[[0,0,0],[255,255,0]]])
On peut aussi crer et stocker des images, au format PNG avec une version
simplifie de la syntaxe : pas dargument correspondant au nombre de canaux et aux dimensions de la matrice des pixels de cette image ni de matrice
correspondant la transparence.
writergb a alors deux ou quatre arguments : le nom du fichier dans lequel on veut stocker la nouvelle image et la matrice des niveaux de gris des
pixels, ou 3 matrices (du rouge, du vert et du bleu) donnant la couleur RGB
des pixels.
Par exemple :
writergb("image.png",[[255,0],[0,255]])
cre et affiche une image 2x2 pixels au format PNG en 256 niveaux de gris
(0 noir, 255 blanc)
writergb("image.png",[[255,0],[0,0]],[[0,255],[0,0]],
[[0,0],[255,0]])
cre et affiche une image 2x2 pixels au format PNG en RGBA avec 256 niveaux pour chaque couleur (rouge, bleu, vert). Ici la premire ligne rouge,vert
et la deuxime ligne est bleu,noir. Essayez :
writergb("essai.png",[[4,300,300],makemat(0,300,300),
makemat(0,300,300), makemat(255,300,300),
makemat(0,300,300)+idn(300)*255])

9.8

Comment faire une dmonstration : assume

Pour pouvoir faire une dmonstration en gomtrie, il suffit de demander au


calcul formel de faire les calculs, en choisisant bien les paramtres du problme
et ces paramtres doivent tre formels....En gomtrie les points peuvent avoir des
coordonnes exactes ou numriques ou formelles. Mais pour faire une figure, il
faut affecter les paramtres formels. On peut le faire de diffrentes faons :

9.9. LES POINTS EN GOMTRIE PLANE

711

on utilise a commande assume avant la cration du point coordonnes


formelles. Par exemple assume(a=2.1);A:=point(a+i); fera la figure en donnant a la valeur 2.1, mais a ne sera pas affect dans les calculs qui seront faits ultrieurement avec le paramtre formel a : si on tape
longueur(0,A), on obtient sqrt((-a)^2+1)
on utilise lcran de configuration des attributs dun point dj cre avec des
coordonnes exactes ou numriques et on coche la rubrique symb figurant
sur cet cran.
Pour faire apparaitre lcran de configuration des attributs dun point o figure la rubrique symb, il faut tre en mode point ou en mode Pointeur
et uniquement dans ces 2 modes. On suppose que lon a dj dfini un
point, par exemple A:=point(2.1,1). On clique sur A avec le bouton
droit de la souris, on fait apparaitre lcran de configuration des attributs du
point A o figure la rubrique symb. On coche symb avec la souris et cela a
pour effet de rajouter les deux lignes assume(Ax=[2.1,-5.0,5.0]),
assume(Ay=[1,-5.0,5.0]) et de dfinir automatiquement le point A
avec les coordonnes symboliques (Ax,Ay). Attention la rubrique symb
napparait que dans lcran de configuration des attributs dun point non
symbolique : autrement dit si on a dfini un point avec des coordonnes
symboliques cest dfinitif !

9.9
9.9.1

Les points en gomtrie plane


Les points et les nombres complexes

Laffixe dun point en gomtrie plane est un nombre complexe.


La commande point a comme argument un nombre complexe c (ou un couple
de 2 nombres a, b) et renvoie le point daffixe c (ou daffixe a + ib) trac dans un
cran graphique.
Certaines fonctions peuvent admettre comme argument soit un point, soit un nombre
complexe, mais quelquefois le rsultat nest pas le mme.
Exemples
re(1+2*i) renvoie 1
Si A:=point(1+2*i), re(A) renvoie un point daffixe 1, et im(A) renvoie
un point daffixe 2*i
cercle(1,1+i)
renvoie le cercle de centre le point daffixe 1 et de rayon gal

2=abs(1+i),
cercle(1,point(1+i)) renvoie le cercle de diamtre le point daffixe 1 et le
point daffixe (1+i)

9.9.2

Le point en gomtrie plane : point

Voir aussi : 10.4.1 point en gomtrie 3-d.


Pour obtenir un point il suffit dtre en mode point et de cliquer avec la souris
(bouton gauche) pour quun point saffiche avec un nom.
Ce nom est cre automatiquement : A puis B etc...
On peut aussi utiliser la commande point :
point a comme argument un nombre complexe ou un couple de 2 nombres rels

712

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

reprsentant ses coordonnes rectangulaires (pour dfinir un point par ses coordonnes polaires il faut utiliser polar_point ou point_polaire.
Attention
Si a,b est un couple de 2 nombres complexes dont 1 nest pas rel, K:=point(a,b)
renvoie 2 points de mme nom (ici K) lun daffixe a, lautre daffixe b.
Lorsque a,b est un couple de 2 nombres rels, A:=point(a,b) renvoie et dessine le point ayant pour affixe a+ib.
point renvoie et dessine le point ayant pour affixe son argument. Ce point aura
la forme choisie par la commande affichage : par dfaut il aura la forme dune
croix et il aura la forme dun point si on a tap affichage(point_point).
On tape :
point(1+i)
On obtient :
Le point daffixe 1+i est trac avec une croix
On tape :
A:=point(-2,1)
On obtient :
Le point daffixe -2+i est trac avec une croix et est
not A
On tape :
point(-2,i)
On obtient :
Les 2 points daffixe -2 et i sont tracs avec une
croix
Remarque Lorquon fait une affectation par exemple A:=point(-2+i) cela a
pour effet de stocker le point(-2+i) dans la variable A, douvrir un cran graphique si on nest pas dans un niveau de gomtrie et de dessiner le point avec une
croix et de lui mettre comme lgende le nom qui est situ gauche de := ici A.
Si on fait plusieurs affectations avec un seul signe := par exemple :
A,B:=point(-2+i),point(2+i) la variable A contient le point(-2+i),
la variable B contient point(-2+i) mais les deux points auront le mme nom :
A,B et on ne pourra pas deplacer ces points en mode pointeur. Pour viter cela
on doit taper sur des niveaux spars :
L:=point(-2+i),point(2+i):;A:=L[0];B:=L[1]
Autre exemple
LL:=point(-2,i):;C:=LL[0];D:=LL[1] dfinit le point C daffixe -2 et
le point D daffixe i (car laffixe de D nest pas rel !).

9.9. LES POINTS EN GOMTRIE PLANE

9.9.3

713

Dfinir au hasard un point 2-d : point2d

point2d a comme argument une squence de noms de points.


point2d dfinit au hasard, les coordonnes entires (entre -5 et +5) des points 2d
donns en argument.
On tape :
point2d(A,B,C)
Puis on tape :
triangle(A,B,C)
On obtient :
Le trac dun triangle ABC
Attention
Les points dfinit par la commande point2d sont fixs une fois pour toute et donc
ne pourront pas tre boug avec la souris.

9.9.4

Le point en polaire en gomtrie plane : polar_point point_polaire

polar_point(r,t) ou point_polaire(r,t) renvoie le point (en 2D) de


coordonnes polaires les arguments r et t cest dire le point daffixe r*exp(i*t).
On tape :
polar_point(2,pi/4)
Ou on tape :
point_polaire(2,pi/4)
On obtient :
Le trac du point daffixe 2*exp(i*pi/4)

9.9.5

Un des points dintersection de deux objets gomtriques : single_inter


inter_unique inter_droite
line_inter

Voir aussi : 10.4.3 pour la gomtrie 3-d.


inter_unique ou inter_droite a 2 ou 3 arguments qui sont deux objets
gomtriques et ventuellement un 3ime argument qui est soit un point soit une
liste de points.
inter_unique renvoie lun des points dintersection de ces deux objets gomtriques. Si on a mis un point A (ou son affixe) comme troisime argument
inter_unique renvoie le point dintersection le plus proche de A et si on a mis
une liste de points L (ou une liste daffixe) comme troisime argument inter_unique
renvoie le point dintersection qui ne se trouve pas dans la liste L.
On tape :
A:=inter_unique(droite(0,1+i),droite(1,i))

714

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

On obtient :
Le point daffixe 1/2+i/2 est trac avec une croix et
est not A
On tape :
B:=inter_unique(cercle(0,1),droite(-1,i))
On obtient :
Le point daffixe i est trac avec une croix et est
not B
On tape :
B1:=inter_unique(cercle(0,1),droite(-1,i),[i])
On obtient :
Le point daffixe -1 est trac avec une croix et est
not B1
On tape :
B2:=inter_unique(cercle(0,1),droite(-1,1+2*i),1+2*i)
On obtient :
Le point daffixe i est trac avec une croix et est
not B2
On tape :
C:=inter_unique(cercle(1,sqrt(2)),cercle(0,1))
On obtient :
Le point daffixe i est trac avec une croix et est
not C
On tape :
C1:=inter_unique(cercle(1,sqrt(2)),cercle(0,1),[i])
On obtient :
Le point daffixe -i est trac avec une croix et est
not C1
On tape :
C2:=inter_unique(cercle(1,sqrt(2)),cercle(0,1),i/2)
On obtient :
Le point daffixe i est trac avec une croix et est
not C2

9.9. LES POINTS EN GOMTRIE PLANE

9.9.6

715

Les points dintersection de deux objets gomtriques : inter

Voir aussi : 10.4.4 pour la gomtrie 3-d.


inter a soit 2 arguments soit 3 arguments.
si inter a 2 arguments qui sont deux objets gomtriques.
inter renvoie la liste des points dintersection de ces deux objets gomtriques.
si inter a 2 arguments qui sont deux objets gomtriques et un point.
inter renvoie le point dintersection de ces deux objets gomtriques le
plus proche du point donn comme troisime argument.
On tape en gomtrie plane :
A:=inter(droite(0,1+i),droite(1,i))[0]
On obtient :
Le point daffixe 1/2+i/2 est trac avec une croix et
est not A
On tape en gomtrie plane :
B:=inter(cercle(0,1),droite(1,i))[0]
C:=inter(cercle(0,1),droite(1,i))[1]
On obtient :
Le point daffixe i est trac avec une croix et est
not B
Le point daffixe 1 est trac avec une croix et est
not C
On tape en gomtrie plane :
L:=inter(cercle(0,1),droite(1,i))
On obtient :
Les points daffixe i et 1 sont tracs avec une croix
et sont nots L
On tape en gomtrie plane :
D:=inter(cercle(0,1),droite(1,i),point(1/2))
On obtient :
Le point daffixe 1 est trac avec une croix et est
not D

716

9.9.7

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Orthocentre dun triangle : orthocenter orthocentre

orthocenter ou orthocentre a comme argument un triangle ou trois points


ou trois nombres complexes dsignant laffixe de trois points.
orthocenter ou orthocentre trace et renvoie le point qui est lorthocentre
du triangle ou du triangle form par ces trois points.
On tape :
orthocentre(0,1+i,-1+i)
Ou on tape :
orthocentre(triangle(0,1+i,-1+i))
On obtient :
Le point daffixe 0 est trac avec une croix
On tape :
T:=triangle(-i,2+i,-1+i);H:=orthocentre(T)
On obtient :
Le triangle T et le point H daffixe 0 sont tracs

9.9.8

Le milieu dun segment : midpoint milieu

Voir aussi : 10.4.5 pour la gomtrie 3-d.


milieu ou midpoint, en gomtrie plane, a comme argument 2 points ou 2
nombres complexes reprsentant laffixe de ces points (ou encore une liste de 2
points ou de 2 complexes).
milieu ou midpoint renvoie et dessine le point milieu du segment dfini par
ces deux points.
On tape :
milieu(-1,1+i)
On obtient :
Le point daffixe i/2 est trac avec une croix

9.9.9

Lisobarycentre de n points : isobarycenter


isobarycentre

Voir aussi : 10.4.6 pour la gomtrie 3-d.


isobarycentre ou isobarycenter a comme argument la liste (ou la squence) de n points ou de n nombres complexes reprsentant laffixe de ces points.
isobarycentre ou isobarycenter renvoie et trace un point qui est lisobarycentre de ces n points.
On tape :
isobarycentre(0,2,2*i)
On obtient :
Le point daffixe 2/3+2*i/3 est trac avec une croix

9.9. LES POINTS EN GOMTRIE PLANE

717

Point dfini comme barycentre de n points : barycenter barycentre

9.9.10

Voir aussi : 10.4.7 pour la gomtrie 3-d et 6.12.10.


barycentre ou barycenter, en gomtrie plane, a comme argument 2 listes
de longueur 2 ou une matrice ayant 2 colonnes ou ayant 2 lignes) :
2 listes de longueur 2
Pour chaque liste, le premier lment contient le point Aj (ou le nombre
complexe aj reprsentant laffixe de ce point) et le deuxime lment contient
le coefficient rel j affect Aj (j = 1..2)
une matrice ayant 2 colonnes et n lignes (n 2)
Le jime lment de la premire colonne de la matrice contient le point
Aj (ou le nombre complexe aj reprsentant laffixe de ce point), le jime
lment de la deuxime colonne contient le coefficient rel j affect Aj
(j = 1..n).
une matrice ayant 2 lignes et n colonnes (n 3)
Le jime lment de la premire ligne de la matrice contient le point Aj (ou
le nombre complexe aj reprsentant laffixe de ce point), le jime lment de
la deuxime ligne contient le coefficient rel j affect Aj (j = 1, 2, ..n).
barycentre ou barycenter renvoie et trace le point qui est
Ple barycentre des
points
A
daffixes
a
affects
des
coefficients
rels

lorsque
j 6= 0.
j
j
P j
Si j = 0, barycentre ou barycenter renvoie une erreur.
On tape :
barycentre([1+i,1],[1-i,1])
Ou on tape :
barycentre([point(1,1),1],[point(1,-1),1])
Ou on tape :
barycentre([[1+i,1],[1-i,1]])
Ou on tape :
barycentre([[point(1,1),1],[point(1,-1),1]])
On obtient :
Le point daffixe 1 est trac avec une croix
On tape :
barycentre([[1+i,1],[1-i,1],[1+4*i,2]])
Ou on tape :
barycentre([[point(1,1),1],[point(1,-1),1],[point(1+4*i),2]])
Ou on tape :
barycentre([[1+i,1-i,1+4i],[1,1,2]])
Ou on tape :
barycentre([[point(1,1),point(1,-1),point(1,4)],[1,1,2]])
On obtient :
Le point daffixe 1+2i est trac avec une croix

718

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.9.11

Le centre dun cercle : centre center

centre ou center a comme argument le nom dun cercle (voir la dfinition du


cercle 9.14.1).
centre ou center renvoie et trace le centre de ce cercle.
On tape :
C:=centre(cercle(0,point(2*i)))
On obtient :
Le point daffixe i est trac avec une croix et est
not C
On tape :
M:=centre(cercle(point(1+i),1))
On obtient :
Le point daffixe 1+i est trac avec une croix et est
not M

9.9.12

Les sommets dun polygone : vertices vertices_abc


sommets sommets_abc

sommets ou sommets_abc ou vertices ou vertices_abc a comme argument un polygone.


sommets ou sommets_abc ou vertices ou vertices_abc renvoie la liste
des sommets de ce polygone et les trace.
Attention Si le polygone a n sommets la liste sera de longueur n.
On tape :
sommets(triangle_equilateral(0,2))
On obtient :
les points
[pnt(0,0),pnt(2,0),pnt((2*(sqrt(3)*(i)+1))/2,0)] sont
tracs avec une croix
On tape :
C:=sommets(triangle_equilateral(0,2))[2]
On obtient :

Le point daffixe 1 + i 3 est trac avec une croix et


est not C

Attention
Si on tape :
T:=triangle_equilateral(0,2,C):;sommets(T[0])
On obtient :
les points
[pnt(0,0),pnt(2,0),pnt((2*(sqrt(3)*(i)+1))/2,0)] sont
tracs avec une croix

9.9. LES POINTS EN GOMTRIE PLANE

9.9.13

719

Les sommets dun polygone : vertices_abca sommets_abca

sommets_abca a comme argument le nom dun polygone.


sommets_abca renvoie la liste "ferme" des sommets de ce polygone et les trace.
Attention Si le polygone a n sommets la liste sera de longueur n + 1 car elle
commence et se termine par le premier sommet (liste "ferme").
On tape :
sommets_abca(triangle_equilateral(0,2))
On obtient :
[pnt(0,0),pnt(2,0),pnt((2*(sqrt(3)*(i)+1))/2,0),pnt(0,0)]

9.9.14

Point sur un objet gomtrique : element

element peut avoir diffrents types darguments :


un intervalle a..b et deux rels la valeur et le pas (par dfaut la valeur vaut
(a + b)/2 et le pas (b a)/100), par exemple, t:=element(0..pi) ou
t:=element(0..pi,pi/2) ou t:=element(0..pi,pi/2,pi/100.0)
signifie que t peut prendre une valeur quelconque de lintervalle [0; ] et le
deuxime argument /2 donne la valeur qui dfinit t : cela a pour effet
davoir en haut et droite un curseur not t que lon peut faire bouger la
souris de 0 , avec gauche de ce curseur un nombre gal la valeur de t
du curseur.
un objet gomtrique et un rel (par dfaut ce rel vaut 1/2), par exemple,
A:=element(cercle(0,2),1) signifie que A se trouve sur le cercle
de centre 0 et de rayon 2 et a comme affixe 2 exp(i) (car 2 exp(i t) est
lquation paramtrique du cercle(0,2) et le deuxime argument 1 donne la
valeur du paramtre t pour dfinir A). Par exemple, A:=element(cercle(0,1))
signifie que A se trouve sur le cercle de centre 0 et de rayon 1, le point A sera
trac en prenant t = 1/2 comme valeur du paramtre de lquation paramtrique de lobjet gomtrique (ici affixe(A)= 2 exp(i/2)). Lorsque
ensuite on dplacera A avec la souris, A se dplacera sur lobjet gomtrique.
un objet gomtrique et un nom de variable (par exemple t) dfini auparavant par la commande element : par exemple t:=element(0..pi). Si
on tape A:=element(cercle(0,2),t), alors t est la variable de paramtrage de lobget gomtrique dfini par le premier argument, cest dire
que A se trouve sur le cercle de centre 0 et de rayon 2 et que A a comme affixe
2 exp(i t), car 2 exp(i t) est lquation paramtrique du cercle(0,2). Il
est donc obligatoire dans ce cas de dfinir auparavant le deuxime argument
(ici t) comme tant llment dun intervalle.
On tape par exemple :
t:=element(0..pi)
puis
A:=element(cercle(0,2),t)
cela a pour effet davoir en haut et droite un curseur not t que lon peut
faire bouger la souris de 0 , avec gauche de ce curseur un nombre gal

720

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


la valeur de t du curseur. Ce curseur permet de faire bouger le point A sur
le demi-cercle suprieur du cercle de centre 0 et de rayon 1 (car 0 t )
et cela sans tracer ce demi-cercle. On tape par exemple :
A:=point(1);B:=point(2+i)
t:=element(0..2)
puis
M:=element(droite(A,B),t)
M est un point de la droite AB et on a M=A+t*(B-A) cest dire M=(1-t)*A+t*B
pout parcourir le segment AB , il faut mettre t:=element(0..1) ou encore M:=element(segment(A,B),t) qui aura pour effet de laisser M
en A si t<0 et de laisser M en B si t>1.
une ligne polygonale LP et [floor(t),frac(t)] avec t dfini auparavant par la commande element : par exemple t:=element(0..5) si
LP a 5 cts.
Les cts de la ligne polygonale LP ont comme numro : 0,1....
Si par exemple LP a 5 cts et a pour sommets A(0),...A(4),A(5)=A(0),
on tapera :
t:=element(0..5)
M:=element(LP,[floor(t),frac(t)])
Ainsi selon les valeurs de t, M va parcourir les 5 cts de LP : M sera situ sur
le ct de numro n=floor(t) et on aura M=frac(t)*A(n)+(1-frac(t))*A(n+1).
Par exemple :
A:=point(0);
B:=point(4);
C:=point(4*i);
t:=element(0..3);
T:=triangle(A,B,C);
M:=element(T,[floor(t),frac(t)]);

Attention Si un point M daffixe m, dfini comme lment dune courbe C, on


ajoute un complexe a, cela dfinit un point N de la courbe C qui est le projet du
point daffixe m + a sur C.
Par contre si un point M daffixe m, dfini comme lment dune courbe C, on
ajoute un point A daffixe a, cela dfinit un point P daffixe m + a Par exemple,
tant donn 3 points M, A, B, si on veut dfinir le point N vrifiant par exemple :

M N = AB, on peut taper : N:=M+(B-A) condition que M ne soit pas dfini
comme lment dune courbe C. En effet si on a tap M:=element(C) il faut
dfinir N en tapant : N:=affixe(M)+B-A ou N:=M+B-A (sans parenthses)
car N:=M+B-A est interprt en N:=(M+B)-A car il ny a pas de rgle de priorit
entre + et - alors que
M+(B-A) renvoie un lment de la courbe C qui est le projet de N sur C.
On a donc, si on tape :
A:=point(-2,2);B:=point(1,3);C:=cercle(0,1);
M:=element(C);N:=affixe(M)+B-A ;(ou N:=M+B-A ;) N nest pas sur la
courbe C
si on tape :
P:=M+(B-A) (ou P :=projection(C,N) ;) P est sur la courbe C

9.10. LES DROITES EN GOMTRIE PLANE

721

9.10

Les droites en gomtrie plane

9.10.1

La droite et la droite oriente en gomtrie plane : line droite

Voir aussi : 3.10.1 et10.5.1 pour la gomtrie 3-d et 9.17.12 pour avoir la valeur de la pente dune droite.
droite, en gomtrie plane, a comme argument deux points (ou deux nombres
complexes reprsentant laffixe de ces points) ou une liste de deux points (ou de
deux complexes) ou a comme argument un point et pente=m ou a comme argument un point et son vecteur directeur [u1,u2] ou encore une quation de droite
de la forme a*x+by+c=0.
droite renvoie et trace la droite dfinie par les deux arguments.
On tape :
droite(0,1+i)
On obtient :
La droite dquation y=x est trace
On tape :
droite(1+i,pente=1)
On obtient :
La droite dquation y=x est trace
On tape :
droite(1+i,[3,3])
On obtient :
La droite dquation y=x est trace
On tape :
droite(y-x=0)
On obtient :
La droite dquation y=x est trace
Remarque : lorientation de la droite
Voir aussi : 10.5.2 pour la gomtrie 3-d.
droite dfinit une droite oriente :
Lorsque la droite est donne par deux points, son orientation est dfinie par
lordre des points donns en argument. Par exemple droite(A,B) dfinit

une droite oriente par le vecteur AB.

722

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Lorsque cest une quation qui dfinit la droite on crit lquation sous
la forme :"membre_de_gauche-membre_de_droite=0" pour avoir une quation de la droite de la forme a*x+by+c=0 et alors le vecteur orientant
la droite est [b,-a] ou encore son orientation est dfinie par le produit
vectoriel 3-d de son vecteur normal (de cote 0) et de [0,0,1]. Par exemple
droite(y=2*x) est oriente par [1,2] car son quation est -2*x+y=0
et cross([-2,1,0],[0,0,1])=[1,2,0].
Lorsque la droite est donne par un point A et sa pente m, son orientation

est dfinie par le vecteur AB avec B = A + 1 + i m.


Lorsque la droite est donne par un point A et son vecteur directeur, son
orientation est dfinie par le vecteur directeur.
Attention
Si on veut tracer la droite en couleur en utilisant un argument supplmentaire par
exemple, couleur=1, il faut imprativement que cet argument soit le troisime
argument : donc si la droite est dfinie par une liste il faut transformer cette liste en
une squence avec op, par exemple, on tape :
A:=point(0,0);
B:=point(2,1);
C1:=cercle(A,B-A);
C2:=cercle(B,A-B);
droite(op(inter(C1,C2)),couleur=1)
alors que droite(inter(C1,C2),couleur=1) vous rpondra "Invalid
dimension"

9.10.2

La demi-droite en gomtrie plane : half_line demi_droite

Voir aussi : 10.5.3 pour la gomtrie 3-d.


demi_droite, en gomtrie plane, a comme argument 2 points (ou 2 nombres
complexes reprsentant laffixe de ces points ou encore une liste de 2 points ou de
2 complexes).
demi_droite renvoie et trace la demi-droite dorigine le premier argument est
passant par le deuxime argument.
On tape :
demi_droite(0,-1+i)
On obtient :
La demi-droite dorigine 0, passant par -1+i

9.10.3

Le segment en gomtrie plane : segment

Voir aussi : 10.5.4 pour la gomtrie 3-d.


segment, en gomtrie plane, a comme argument 2 points (ou 2 nombres complexes reprsentant laffixe de ces points ou encore une liste de 2 points ou de 2
complexes).
segment renvoie et trace le segment dfini par les deux arguments.
On tape :

9.10. LES DROITES EN GOMTRIE PLANE

723

segment(-1,i)
On obtient :
Le segment -1, i

9.10.4

Le segment : Line

Line a comme argument 4 nombres rels reprsentant les coordonnes de ces


points.
Line(a,b,c,d) renvoie et trace le segment dfini par les deux points a+i*b
et c+i*d.
On tape :
Line(-1,1,2,-2)
On obtient :
Le segment -1+i,2-2*i

9.10.5

Le vecteur en gomtrie plane : vector vecteur

Voir aussi : 10.5.5 pour la gomtrie 3-d.


vecteur, en gomtrie plane, a comme arguments soit :
deux points A, B ou deux nombres complexes reprsentant laffixe de ces
points ou deux listes reprsentant les coordonnes de ces points.

vecteur dfinit et dessine le vecteur AB


un point A (ou un nombre complexe reprsentant laffixe de ce point ou une
liste reprsentant les coordonnes de ce point) et un vecteur V (dfinition
rcursive).

vecteur dfinit et dessine le vecteur AB tel que AB = V . Si W:=vecteur(A,V),


alors le point B tel que AB = V est point(W[1,1]) ou point(coordonnees(V)+coordonnees(A


ou A+(affixe(V)[1]-affixe(V)[0]).
On tape :
vecteur(point(-1),point(i))
Ou on tape :
vecteur(-1,i)
Ou on tape :
vecteur([-1,0],[0,1])
On obtient :
Le trac du vecteur dorigine -1 et dextrmit i
On tape :
V:=vecteur(point(-1),point(i))
On tape :

724

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


vecteur(point(-1+i),V)

Ou on tape :
vecteur(-1+i,V)
Ou on tape :
vecteur([-1,1],V)
On tape :
point([-1,1],coordonnees(V))
On obtient :
Le trac du vecteur dorigine -1+i et dextrmit 2*i
On tape :
D:=point([-1,1]+coordonnees(V))
On obtient :
D le point(2*i)
Remarque
En calcul formel, on travaille sur la liste des coordonnes des vecteurs que lon
obtient avec la commande coordonnees (cf 9.16.4).

9.10.6

Les droites parallles : parallel parallele

Voir aussi : 10.5.6 pour la gomtrie 3-d.


parallele, en gomtrie plane, a comme arguments un point A (ou un nombre
complexe reprsentant laffixe de ce point) et une droite d.
parallele renvoie et dessine la droite parallle la droite d passant par le point
A.
On tape :
parallele(0,droite(1,i))
On obtient :
La droite dquation y=-x est trace

9.10.7

Les droites perpendiculaires en 2-d : perpendicular perpendiculaire

Voir aussi : 10.5.7 et 10.5.8 pour la gomtrie 3-d.


perpendiculaire, en gomtrie plane, a comme arguments un point A (ou un
nombre complexe reprsentant laffixe de ce point) et une droite d (ou 2 points).
perpendiculaire renvoie et dessine la droite perpendiculaire la droite d
passant par le point A .
On tape :
perpendiculaire(0,droite(1,i))
Ou on tape :
perpendiculaire(0,1,i)
On obtient :
La droite dquation y=x

9.10. LES DROITES EN GOMTRIE PLANE

9.10.8

725

Les tangentes un objet gomtrique plan : tangent

Voir aussi : 10.6.3 pour la gomtrie 3-d et 3.10.5 pour les tangentes un
graphe.
tangent peut avoir comme arguments :
- un objet gomtrique G et un point A ou,
- un point A dfini par element dont les paramtres sont, un objet gomtrique
G et un rel reprsentant la valeur du paramtre de lquation paramtrique de G.
tangent renvoie une liste de droites et dessine ces droites qui sont les tangentes
cet objet gomtrique G et qui passent par le point A.
On tape :
tangent(cercle(0,1),point(1+i))
On obtient :
La droite dquation x=1 et la droite dquation y=1
On tape :
tangent(element(cercle(0,1),1))
On obtient :
La tangente au cercle de centre 0 et de rayon 1, au
point daffixe exp(i)
On tape :
tangent(circle(i,1+i),point((1+i*sqrt(3))*2))
On obtient :

2 tangentes au cercle de centre i et de rayon


issues du point((1+i*sqrt(3))*2)

9.10.9

La mdiane dun triangle issue dun sommet : median_line


mediane

mediane a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
mediane renvoie et dessine la droite passant par le premier argument et par le
milieu du segment dfini par les deux autres arguments.
On tape :
mediane(0,1,i)
On obtient :
La droite dquation y=x est trace

726

9.10.10

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

La hauteur dun triangle issue dun sommet : altitude hauteur

hauteur a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
hauteur renvoie et dessine la droite qui passe par le premier argument et qui est
perpendiculaire la droite dfinie par les deux autres arguments.
On tape :
hauteur(0,1,i)
On obtient :
La droite dquation y=x

9.10.11

La mdiatrice dun segment : perpen_bisector mediatrice

Voir aussi : 10.6.2 pour la gomtrie 3-d.


mediatrice, en gomtrie plane, a comme argument un segment ou 2 points
(ou 2 nombres complexes reprsentant laffixe de ces points ou encore une liste de
2 points ou de 2 complexes).
mediatrice renvoie et dessine une droite qui est la mdiatrice du segment dfini
par les deux arguments.
Remarques
mediatrice(A,B) est pour Xcas une droite dfinie par les points : M:=milieu(A,B)
et N:=rotation(M,pi/2,M+(A-B)).
Si vous donner comme argument mediatrice 2 droites au lieu de 2 points,
Xcas tracera la mdiatrice du premier point dfinissant la premire droite et du
deuxime point dfinissant la deuxime droite, (i.e mediatrice(droite(A,B),
droite(C,D)) sera identique mediatrice(A,D) et si D1:=droite(A,B);
D2:=mediatrice(droite(A,B)) alors mediatrice(D1,D2)
sera identique mediatrice(A,D2) qui sera identique mediatrice(A,N)
avec M:=milieu(A,B) et N:=rotation(M,pi/2,M+(A-B))).
On tape :
mediatrice(1,i)
Ou on tape :
mediatrice(segment(1,i))
On obtient :
La droite dquation y=x

9.10.12

La bissectrice intrieure dun angle : bisector bissectrice

bissectrice a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
bissectrice renvoie et dessine une droite qui est la bissectrice de langle de
sommet le premier argument et dfini par le deux autres arguments.
On tape :
bissectrice(0,1,i)
On obtient :
La droite dquation y=x

9.11. LES TRIANGLES

9.10.13

727

La bissectrice extrieur dun angle : exbisector exbissectrice

exbissectrice a comme argument 3 points (ou 3 nombres complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de 3 complexes).
exbissectrice renvoie et dessine une droite qui est la bissectrice extrieure de
langle de sommet le premier argument et dfini par le deux autres arguments.
On tape :
exbissectrice(0,1,i)
On obtient :
La droite dquation y=-x

9.11

Les triangles

Pour les dessins dans lespace voir la section 10.7

9.11.1

Gnralits

Xcas permet de tracer des triangles quelconques, isocles, rectangles, quilatraux avec les commandes : triangle, triangle_isocele, triangle_rectangle,
triangle_equilateral.
Ces commandes ont comme arguments ce quil faut pour dfinir le triangle (au
moins 2 sommets) et ventuellement comme dernier argument le nom dune variable. Ce nom de variable servira dfinir et tracer le troisime sommet avec sa
lgende.
Attention
Ces commandes soit renvoient et tracent le triangle demand, soit renvoient une
liste compose du triangle demand et du sommet demand et tracent ce triangle
et son troisime sommet avec sa lgende.

9.11.2

Le triangle quelconque : triangle

Voir aussi : 10.7.1 pour la gomtrie 3-d.


triangle, en gomtrie plane, a comme arguments : 3 points (ou 3 nombres
complexes reprsentant laffixe de ces points ou encore une liste de 3 points ou de
3 complexes).
triangle renvoie et trace le triangle ayant pour sommets ces 3 points.
On tape :
triangle(-1,i,1+i)
On obtient :
Le triangle de sommets -1, i, 1+i

728

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.11.3

Le triangle isocle : isosceles_triangle triangle_isocele

Voir aussi : 10.7.2 pour la gomtrie 3-d.


triangle_isocele, en gomtrie plane, a trois ou quatre arguments.
Description des arguments :
si il a trois arguments, ce sont : 2 points A et B (ou 2 nombres complexes
reprsentant laffixe de ces points) et un rel qui dsigne la mesure en radians

(ou en degrs) de langle (AB, AC).
triangle_isocele(A,B,c) renvoie et trace le triangle ABC isocle

de sommet A (AB = AC) et tel que langle (AB, AC) = c radians (ou
degrs), sans dfinir le point C).
On tape :
triangle_isocele(i,1,-3*pi/4)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :

Le triangle isocle de sommets -1, i, 2+i


si il a quatre arguments, le dernier argument est le nom dune variable qui
servira dfinir le troisime sommet.
On tape :
triangle_isocele(i,1,-3*pi/4,C)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :

Le triangle isocle de sommets -1, i, 2+i


On tape :
normal(affixe(C))
On obtient :
-sqrt(2)+i

9.11.4

Le triangle rectangle : right_triangle triangle_rectangle

Voir aussi : 10.7.3 pour la gomtrie 3-d.


triangle_rectangle, en gomtrie plane, a trois ou quatre arguments.
Description des arguments :
si il a trois arguments, ce sont : 2 points A et B (ou 2 nombres complexes
reprsentant laffixe de ces points) et un rel k non nul.
triangle_rectangle(A,B,k) renvoie et trace le triangle ABC rectangle en A : ce triangle est direct si k > 0, indirect si k < 0 et est tel que
AC = |k| AB.

Ainsi si langle (BC, BA) = radians (ou degrs), on a tan() = k.
On remarquera que si C est le transform de B dans la similitude de centre
A de rapport |k| et dangle (k/|k|) /2.
On tape :
triangle_rectangle(i,-i,2)
On obtient :
Le triangle rectangle de sommets i, -i, 4+i
On tape :
triangle_rectangle(i,-i,-2)

9.12. LES QUADRILATRES

729

On obtient :
Le triangle rectangle de sommets i, -i, -4+i
si il a quatre arguments, le dernier argument est le nom dune variable qui
servira dfinir le troisime sommet.
On tape :
triangle_rectangle(i,-i,2,D)
On obtient :
Le triangle rectangle de sommets i, -i, 4+i
On tape :
normal(affixe(D))
On obtient :
4+i

9.11.5

Le triangle quilatral : equilateral_triangle triangle_equilateral

Voir aussi : 10.7.4 pour la gomtrie 3-d.


triangle_equilateral, en gomtrie plane, a deux ou trois arguments.
Description des arguments :
si il a deux arguments, ce sont : 2 points ou 2 nombres complexes reprsentant laffixe de ces points (ou encore une liste de 2 points ou de 2 complexes).
triangle_equilateral(A,B) renvoie et trace le triangle quilatral
direct ABC mais sans dfinir le point C. On tape :
equilateral_triangle(0,2)
On obtient :
le triangle quilatral de sommets les points
daffixe 0,2,1+i*sqrt(3)
Pour dfinir le troisime sommet C, on peut donner un nom au triangle (par
exemple T ) et utiliser la commande sommets(T) qui renvoie la liste des
sommets de T . On dfinira alors C:= sommets(T)[2] mais il est plus
simple de rajouter C le nom du dernier sommet comme troisime argument.
si il a trois arguments, le dernier argument est le nom dune variable qui
servira dfinir et tracer le troisime sommet avec sa lgende. On tape :
equilateral_triangle(0,2,C)
On obtient :
le triangle quilatral de sommets les points
daffixe 0,2,1+i*sqrt(3)
On tape :
normal(affixe(C))
On obtient :
1+i*sqrt(3)

9.12

Les quadrilatres

Voir aussi : 10.7.1 pour la gomtrie 3-d.


Pour les dessins dans lespace voir la section 10.8

730

9.12.1

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Gnralits

Xcas permet de tracer des quadrilatres quelconques, des carrs, des losanges,
des rectangles, des paralllogrammes avec les commandes : quadrilatere,
carre, losange, rectangle, parallelogramme.
Ces commandes ont comme arguments ce quil faut pour dfinir le quadrilatre
(au moins 2 sommets) et ventuellement comme dernier argument le nom dune
ou deux variables. Ces noms de variables serviront dfinir et tracer les derniers
sommets avec leur lgende.
Attention
Ces commandes soit renvoient et tracent le quadrilatre demand, soit renvoient
une liste compose du quadrilatre demand et du ou des sommets demands et
tracent ce quadrilatre avec une lgende pour son troisime ou pour son troisime
et son quatrime sommet.

9.12.2

Le carr : square carre

Voir aussi : 10.8.1 pour la gomtrie 3-d.


carre, en gomtrie plane, peut avoir de deux quatre arguments.
Description des arguments :
si il a deux arguments ce sont : 2 points ou 2 nombres complexes reprsentant
laffixe de ces points (ou encore une liste de 2 points ou de 2 complexes).
carre(A,B) renvoie et trace le carr ABCD de sens direct, mais sans
dfinir les points D et C.
On tape :
carre(0,1+i)
On obtient :
Le carr de sommets 0, 1+i, 2*i, -1+i
si il a trois (resp quatre) arguments, les 2 derniers paramtres sont le nom
dune (resp deux) variables qui serviront dfinir lavant-dernier sommet
(resp les deux autres sommets). On tape :
carre(0,1+i,C,D)
On obtient :
Le carr de sommets 0, 1+i, 2*i, -1+i
On tape :
affixe(C)
On obtient :
2*i
On tape :
affixe(D)
On obtient :
-1+i

9.12.3

Le losange : rhombus losange

Voir aussi : 10.8.2 pour la gomtrie 3-d.


losange, en gomtrie plane, peut avoir de trois cinq arguments.
Description des arguments :

9.12. LES QUADRILATRES

731

si il a trois arguments ce sont : 2 points ou 2 nombres complexes reprsentant


laffixe de ces points et un nombre rel a.
losange(A,B,a) renvoie et trace le losange ABCD tel que :

AB, AD) = a radians (ou degrs), mais sans dfinir les points C et D.
On tape :
losange(-2*i,sqrt(3)-i,pi/3)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :

Le losange de sommets -2*i, 3-i, 3+i, 0


si il a quatre (resp cinq) arguments, le dernier paramtre (resp les 2 derniers
paramtres) est (resp sont) le (resp les) nom(s) dune (resp deux) variable(s)
qui servent dfinir lavant-dernier sommet (resp les 2 derniers sommets).
On tape :
losange(-2*i,sqrt(3)-i,pi/3,E,F)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :

Le losange de sommets -2*i, 3-i, 3+i, 0


On tape :
normal(affixe(E))
On obtient :
sqrt(3)+i
On tape :
normal(affixe(F))
On obtient :
0

9.12.4

Le rectangle : rectangle

Voir aussi : 10.8.3 pour la gomtrie 3-d.


rectangle, en gomtrie plane, peut avoir de trois cinq arguments.
Description des arguments :
si il a trois arguments ce sont : deux points (ou deux nombres complexes
reprsentant laffixe de ces points) et un nombre rel k non nul.
rectangle(A,B,k) renvoie et trace le rectangle ABCD tel que :

AD = |k| AB et (AB, AD) = (k/|k|) /2,
cest dire tel que :
af f ixe(D) = af f ixe(A) + k exp(i /2) (af f ixe(B) af f ixe(A))
mais sans dfinir les points C et D.
Remarque Si k est complexe, on a :
af f ixe(D) = af f ixe(A) + k exp(i /2) (af f ixe(B) af f ixe(A))
et on peut ainsi se retrouver avec le trac dun paralllogramme.
On tape :
rectangle(0,1+i,1/2)
On obtient :
Le rectangle de sommets 0,1+i,1/2+3*i/2,-1/2+i/2
On tape :
rectangle(0,1+i,-1/2)
On obtient :

732

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


Le rectangle de sommets 0,1+i,3/2+i/2,1/2-i/2
On tape :
rectangle(0,1,1+i)
On obtient :
Le paralllogramme de sommets 0,1,i,-1+i car
1 + i = (1 + i) exp(i /2)
si il a cinq arguments les 2 derniers paramtres sont les noms de deux variables qui serviront dfinir les 2 derniers sommets.
On tape :
rectangle(0,1+i,-1/2,G,H)
On obtient :
Le rectangle de sommets 0,1+i,3/2+i/2,1/2-i/2
On tape :
normal(affixe(G))
On obtient :
(3+i)/2
On tape :
normal(affixe(H))
On obtient :
(1-i)/2

9.12.5

Le paralllogramme : parallelogram parallelogramme

Voir aussi : 10.8.4 pour la gomtrie 3-d.


parallelogramme, en gomtrie plane, a trois arguments ou quatre arguments.
Description des arguments :
si il a trois arguments ce sont : trois points (ou trois nombres complexes reprsentant laffixe de ces points).
parallelogramme(A,B,C) renvoie et trace le paralllogramme ABCD

tel que : AD = BC mais sans dfinir le point D.
On tape :
parallelogramme(0,1,2+i)
On obtient :
Le paralllogramme de sommets 0,1,2+i,1+i
On tape :
parallelogramme(1,0,-1+i)
On obtient :
Le paralllogramme de sommets 1,0,-1+i,i
si il a quatre arguments le dernier paramtre est le nom dune variable qui
servira dfinir le sommet manquant.
On tape :
parallelogramme(0,1,2+i,F)
On obtient :
Le paralllogramme de sommets 0,1,2+i,1+i et le
point F daffixe 1+i
On tape :
normal(affixe(F))
On obtient :

9.13. LES POLYGONES

733
1+i

9.12.6

Le quadrilatre : quadrilateral quadrilatere

Voir aussi : 10.8.5 pour la gomtrie 3-d.


quadrilatere(A,B,C,D), en gomtrie plane, renvoie et tracele quadrilatre
ABCD.
On tape :
quadrilatere(0,1,1+i,-1+2*i)
On obtient :
Le "cerf-volant" de sommets 0, 1, 1+i, 1+2*i

9.13

Les polygones

Voir aussi : 10.9 pour la gomtrie 3-d.

9.13.1

Lhexagone : hexagon hexagone

Voir aussi : 10.9.1 pour la gomtrie 3-d.


Voir aussi : 9.13.2 pour la gomtrie 2-d et 10.9.2 pour la gomtrie 3-d.
hexagone, en gomtrie plane, peut avoir de deux 6 arguments.
Description des arguments :
- si il a deux arguments ce sont : 2 points ou 2 nombres complexes reprsentant
laffixe de ces points (ou encore une liste de 2 points ou de 2 complexes).
hexagone(A,B) renvoie et trace le hexagone ABCDEF de sens direct, mais
sans dfinir les points D,C,E et F.
On tape :
hexagone(0,1)
On obtient :
Lhexagone de sommets
0,1,3/2+i*sqrt(3)/2,1+i*sqrt(3),i*sqrt(3),-1/2+i*sqrt(3)/2
- si il a six arguments, les 4 derniers paramtres sont le nom de deux variables qui
serviront dfinir les deux autres sommets. On tape :
hexagone(0,1,C,D,E,F)
On obtient :
Lhexagone de sommets
0,1,3/2+i*sqrt(3)/2,1+i*sqrt(3),i*sqrt(3),-1/2+i*sqrt(3)/2
On tape :
affixe(C)

734

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

On obtient :
3/2+i*sqrt(3)/2
On tape :
affixe(D)
On obtient :
1+i*sqrt(3)
On tape :
affixe(E)
On obtient :
i*sqrt(3)
On tape :
affixe(F)
On obtient :
-1/2+i*sqrt(3)/2

9.13.2

Les polygones rguliers : isopolygon isopolygone

Voir aussi : 10.9.2 pour la gomtrie 3-d.


isopolygone, en gomtrie plane, a trois arguments.
Les argument sont :
- soit deux points ou deux nombres complexes et un nombre entier positif k
- soit deux points ou deux nombres complexes et un nombre entier ngatif k.
Lorsque k > 0, isopolygone trace le polygone rgulier direct ayant k cots et
comme sommets conscutifs les deux premiers arguments.
On tape :
isopolygone(0,1,4)
On obtient :
Le carr de sommets 0,1,1+i,i
Lorsque k < 0, isopolygone trace le polygone rgulier direct ayant k cots, comme centre le premier argument, et comme sommet le deuxime argument.
On tape :
isopolygone(0,1,-4)
On obtient :
carr de sommets 1,i,-1,-i

9.13. LES POLYGONES

9.13.3

735

Le polygone : polygon polygone

Voir aussi : 10.9.3 pour la gomtrie 3-d.


polygone, en gomtrie plane, a comme argument la liste (ou la squence) de n
points ou de n nombres complexes reprsentant laffixe de ces points.
polygone renvoie et trace le polygone ayant pour sommets ces n points.
On tape :
polygone(-1,-1+i/2,i,1+i,-i)
On obtient :
Le polygone de sommets -1,-1+i/2,i,1+i,-i
On tape :
polygone(makelist(x->exp(i*pi*x/3),0,5,1))
On obtient :
i

Lhexagone de sommets 1,e 3 , e

9.13.4

2i
3

, .., e

5i
3

La ligne polygonale : open_polygon polygone_ouvert

Voir aussi : 10.9.4 pour la gomtrie 3-d.


polygone_ouvert, en gomtrie plane, a comme argument la liste (ou la squence) de n points ou de n nombres complexes reprsentant laffixe de ces points.
polygone_ouvert renvoie et trace la ligne polygonale ayant pour sommets ces
n points.
On tape :
polygone_ouvert(-1,-1+i/2,i,1+i,-i)
On obtient :
La ligne polygonale de sommets -1,-1+i/2,i,1+i,-i
On tape :
polygone_ouvert(makelist(x->exp(i*pi*x/3),0,5,1))
On obtient :
i

La ligne polygonale de sommets 1,e 3 , e

9.13.5

2i
3

, .., e

5i
3

Lenveloppe convexe de points du plan : convexhull

Linstruction convexhull calcule lenveloppe convexe dun ensemble de


points du plan donn par des points ou des affixes de points, elle renvoie une liste
de complexes affixes des sommets de lenveloppe convexe. Lalgorithme utilis est
le scan de Graham. On peut utiliser polygone sur le rsultat de convexhull
pour obtenir le trac de lenveloppe convexe.
Par exemple, on tape
polygone(convexhull(0,1,1+i,1+2i,-1-i,1-3i,-2+i))
pour obtenir lenveloppe convexe des points daffixe (0,0), (1,0), (1,1), (1,2), (-1,1), (1,-3), (-2,1).

736

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.14

Les cercles

9.14.1

Le cercle et ses arcs : circle cercle

Voir aussi : 9.14.2 pour les arcs de cercle.


Voir aussi : 10.10 pour les cercles de la gomtrie 3-d.
cercle a un ou deux arguments pour dessiner un cercle et de quatre six arguments pour dessiner un arc de cercle.
Description des arguments :
Avec un argument : largument de cercle est alors lquation du cercle
ayant comme variables x et y,
Avec deux arguments cercle dsigne un cercle :
Le premier argument est un point ou un nombre complexe considr comme
laffixe dun point.
Cest le deuxime argument qui dtermine si on trace le cercle avec la donne de son centre et de son rayon (le deuxime argument est alors un nombre
complexe de module le rayon) ou avec la donne de son diamtre (le deuxime
argument est un point).
- cercle(C,r) o C est un point (ou un nombre complexe) et r un nombre
complexe, trace le cercle de centre C et de rayon le module de r. Cela est
utile, par exemple, pour avoir le cercle de centre A qui passe par B on tape
cercle(A,B-A).
- cercle(A,B) o A est un point ou un nombre complexe et B un point,
trace le cercle de diamtre AB.
On tape :
cercle(x^2+y^2-2*x-2*y)
On obtient :
Le cercle de centre 1+i et de rayon sqrt(2) est
trac
On tape :
cercle(-1,i)
On obtient :
Le cercle de centre -1 et de rayon 1 est trac
On tape :
cercle(-1, point(i))
On obtient :
Le cercle de diamtre -1,i
Attention Il faut bien voir la diffrence entre :
cercle(A,B-A), cercle(A,B) et cercle(A,affixe(B)-A).
A:=point(1);B:=point(i/2); cercle(A,B-A) ou cercle(A,affixe(B-A))
ou cercle(A,abs(B-A)) dessine le cercle de centre A passant par B,
cercle(A,B)) dessine le cercle de diamtre A,B,
cercle(A,affixe(B)-A) dessine le cercle de diamtre A,C o C est
le point daffixe (-2+i)/2. En effet affixe(B)-A) dsigne un point C
tel que :
affixe(C)=affixe(B)-affixe(A)=i/2-1=(-2+i)/2.
Avec de quatre six arguments, cercle dsigne un arc de cercle. Dans ce
cas les deux premiers arguments dterminent le cercle qui porte larc (voir

9.14. LES CERCLES

737

ci-dessus) et les deux arguments suivants sont les angles au centre des points
qui dlimitent larc et les deux derniers arguments sont des noms de variables
qui contiendront les points qui dlimitent larc. Le troisime et le quatrime
argument sont les mesures des angles au centre des points qui dlimitent
larc, ces angles sont mesurs en radians (ou en degrs) partir de laxe
dfini par les deux premiers arguments si le deuxime argument est un point
(dfinition du cercle par son diamtre) ou de laxe dfini par son centre C
et le point A = C + r si le deuxime argument est un complexe gal r
(dfinition du cercle par son centre et un complexe dont le module est gal
au rayon).
Le cinquime et le sixime argument ne sont pas obligatoires et servent
dfinir les extrmits de larc.
On tape :
cercle(-1,1,0,pi/4,A,B)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :

2
Larc AB (A=point(0) et B=point( 1+ 2+i
)) du
2
cercle de centre -1 et de rayon 1 est trac
En effet langle est compt partir de laxe (-1,0) et donc langle 0 est le
point(0).
On tape :
cercle(-1,i,0,pi/4,A,B)
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :

2
Larc AB (A=point(-1+i) et B=point( 1 2+i
)) du
2
cercle de centre -1 et de rayon 1 est trac
En effet, langle est compt partir de laxe (-1,i-1) et donc langle 0 est le
point daffixe i-1.
On tape :
cercle(-1, point(i),0,pi/4,A,B)
On obtient :

2)
Larc AB (A=point(i) et B=point( 1+i(1+
)) du
2
cercle de diamtre -1,i
En effet, langle est compt partir de laxe (-1,i) et donc langle 0 est le
point daffixe i.

9.14.2

Les arcs de cercle : arc

Voir aussi : 9.14.1 pour cercles et arcs de cercle.


arc a de trois cinq arguments : deux points A,B (ou deux nombres complexes
a,b) et un nombre rel reprsentant la mesure de larc AB en radians (2
2 ). le quatrime et le cinquime ne sont pas obligatoires et sont des noms
de variables qui contiendront le centre et le rayon du cercle qui porte larc.
Larc AB est donc port par le cercle de centre : (a+b)/2+i(ba)/(2tan(/2)).
arc(A,B,) est larc do lon voit le segment AB sous langle + /2 si
2 > >0, ou sous langle + /2 si 2 < <0.
Pour avoir larc capable AB de mesure cest dire larc do lon voit le segment
AB sous langle < < il faut taper :

738

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

arc(A,B,2*(-pi+)) si > >0 ou


arc(A,B,2*(pi+)) si < <0 .
Attention Le signe de donne le sens de parcours de larc AB par exemple,
arc(A,B,3*pi/2) et arc(A,B,-pi/2) forment un cercle complet.
On tape :
arc(1,i,pi/2)
On obtient :
Larc (1,i) du cercle de centre 0 et de rayon 1
On tape :
arc(1,i,pi/2,C,r)
On obtient :
Larc (1,i) du cercle de centre C=point(0) et de rayon
r=1
On tape :
arc(2,2*i,pi,C,r)
On obtient :
Le demi-cercle de centre C=point(1+i), de rayon
r=sqrt(2) et allant du point(2) au point(2*i) dans le
sens +
Remarque
Lorsque cercle a quatre arguments, cercle dessine aussi un arc de cercle (cf
9.14.1).

9.14.3

Le cercle (compatibilit TI) : Circle

Circle a quatre arguments : les coordonnes du centre (xc, yc), la valeur du


rayon r et 0 ou 1 (par dfaut 1).
Si le quatrime paramtre est 1 ou est diffrent de zro, Circle dessine le cercle
de centre (xc, yc) et de rayon r,
Si le quatrime paramtre est 0, Circle efface le cercle de centre (xc, yc) et de
rayon r.
On tape :
Circle(-1,0,2,1)
On obtient :
Le cercle de centre -1, de rayon 2 est trac
On tape :
Circle(-1,0,2,0)
On obtient :
Le cercle de centre -1, de rayon 2 est effac

9.14. LES CERCLES

9.14.4

739

Le cercle inscrit : incircle inscrit

inscrit a trois paramtres qui dfinissent les sommets dun triangle.


inscrit dessine et renvoie le cercle inscrit de ce triangle.
On tape :
inscrit(-1,i,1+i)
On obtient :
Le cercle inscrit du triangle(-1,i,1+i)

9.14.5

Le cercle circonscrit : circumcircle circonscrit

circonscrit a trois paramtres qui dfinissent les sommets dun triangle.


circonscrit dessine et renvoie le cercle circonscrit de ce triangle.
On tape :
circonscrit(-1,i,1+i)
On obtient :
Le cercle circonscrit du triangle(-1,i,1+i)

9.14.6

Le cercle exinscrit : excircle exinscrit

exinscrit a trois paramtres qui dfinissent les sommets dun triangle.


exinscrit dessine et renvoie le cercle exinscrit dans langle intrieur du premier
sommet de ce triangle.
On tape :
exinscrit(-1,i,1+i)
On obtient :
Le cercle exinscrit dans langle de sommet -1 du
triangle(-1,i,1+i) est trac

9.14.7

Puissance dun point par rapport un cercle : powerpc puissance

Si un point A est une distance d du centre dun cercle C de rayon r, la


puissance de A par rapport au cercle C est gale d2 r2 .
On tape :
puissance(cercle(0,1+i),3+i)
On obtient :
8
En effet : r =

2 et d =

10 donc d2 r2 = 8

740

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.14.8

Axe radical de deux cercles : radical_axis axe_radical

Laxe radical de deux cercles C1 et C2 est le lieu des points qui ont mme
puissance par rapport C1 et C2 .
On tape :
axe_radical(cercle(0,1+i),cercle(1,1+i)))
On obtient :
Le trac de la droite x=1/2
En effet : la droite x=1/2 est la mdiatrice du segment [0 ;1]

9.15

Les coniques

9.15.1

Lellipse : ellipse

Voir aussi : 10.11.1 pour la gomtrie 3-d.


ellipse, en gomtrie plane, a 1 ou 3 paramtres :
un paramtre : son quation de variables x et y. ellipse(p(x,y)) trace
la conique dquation p(x,y)=0 si p(x,y) est un polynme de degr 2.
trois paramtres : ses deux foyers et un de ces points (ou son affixe si cette
affixe nest pas relle) ou ses deux foyers et un rel (son demi-grand axe).
ellipse(F1,F2,A) trace lellipse passant par A et de foyers F1 et F2
ou,
ellipse(F1,F2,a) o a est un nombre rel, trace lellipse de foyers F1
et F2 et de demi-grand axe |a|.
On tape :
ellipse(-i,i,1+i)
On obtient :
Lellipse de foyers -i, i et passant par 1+i
On tape :
ellipse(-i,i,sqrt(5)-1)
On obtient :
Lellipse de foyers -i, i et de demi-grand axe
sqrt(5)-1
On tape :
ellipse(x^2+2*y^2-1)
ou on tape :
ellipse(sqrt(2)/2,-sqrt(2)/2,1)
On obtient :
Lellipse de centre 0 et de demi-grand axe 1 et de
foyers sqrt(2)/2 et -sqrt(2)/2

9.15. LES CONIQUES

9.15.2

741

Lhyperbole : hyperbola hyperbole

Voir aussi : 10.11.2 pour la gomtrie 3-d.


hyperbole, en gomtrie plane, a 1 ou 3 paramtres :
un paramtre : son quation de variables x et y. hyperbole(p(x,y))
trace la conique dquation p(x,y)=0 si p(x,y) est un polynme de degr 2.
trois paramtres : ses deux foyers et un de ces points (ou son affixe si cette
affixe nest pas relle) ou ses deux foyers et un rel (son demi-grand axe).
hyperbole(F1,F2,A) trace lhyperbole passant par A et de foyers F1
et F2 ou,
hyperbole(F1,F2,a) o a est un nombre rel, trace lhyperbole de
foyers F1 et F2 et de demi-grand axe |a|.
On tape :
hyperbole(-i,i,1+i)
On obtient :
Lhyperbole de foyers -i, i et passant par 1+i
On tape :
hyperbole(-i,i,1/2)
On obtient :
Lhyperbole de foyers -i, i et de demi-grand axe 1/2
On tape :
hyperbole(x^2+2*y^2-1)
ou on tape :
hyperbole(sqrt(6)/2,-sqrt(6)/2,1)
On obtient :
Lhyperbole de centre 0 et de demi-grand axe 1 et de
foyers sqrt(6)/2 et -sqrt(6)/2

9.15.3

La parabole : parabola parabole

Voir aussi : 10.11.3 pour la gomtrie 3-d.


parabole, en gomtrie plane, a 1 ou 2 paramtres :
un paramtre : son quation de variables x et y. parabole(p(x,y))
trace la conique dquation p(x,y)=0 si p(x,y) est un polynme de degr 2.
deux paramtres : deux points (ou leurs affixes si la deuxime affixe nest pas
relle), reprsentant son foyer et son sommet ou encore un point (le sommet)
ou laffixe de son sommet et un nombre rel c.
parabole(F,S) renvoie et dessine la parabole de foyer F et de sommet
S.

742

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


parabole(S,c) renvoie et dessine la parabole de sommet S(xS+i*yS)
et dquation y = yS + c (x xS)2 . Il faut savoir que si p est le paramtre
de la parabole, on a F S = p/2 et c = 1/(2 p).

On tape :
parabole(0,i)
On obtient :
La parabole de foyer 0 et de sommet i
On tape :
parabole(0,1)
On obtient :
La parabole de sommet 0 et dquation y = x2
On tape :
parabole(x^2-y-1)
ou on tape :
parabole(-i,1)
ou on tape :
parabole(i,-i)
On obtient :
La parabole de sommet -i et de foyers i

9.16

Les mesures

9.16.1

Laffixe dun point ou dun vecteur : affix affixe

affixe est une fonction ayant comme argument un point ou un vecteur ou les
coordonnes dun point ou dun vecteur 2-d.
affixe renvoie laffixe du point ou du vecteur :
- si le point A a pour coordonnes cartsiennes (xA , yA ), affixe(A) renvoie
xA + i yA ,
- si le point B a pour coordonnes cartsiennes (xB , yB ), affixe(A-B) ou
affixe(vecteur(B,A)) renvoie xA xB + i (yA yB ) (car A-B dsigne

le vecteur BA) et cooedonnees(vecteur(B,A)) renvoie [xA + iyA , xB +


i yB ].
On tape :
affixe(point(i))
On obtient :

9.16. LES MESURES

743
i

On tape :
affixe(point(i)-point(1+2*i))
On obtient :
-1-i

9.16.2

Labscisse dun point ou dun vecteur : abscissa abscisse

Voir aussi : 10.12.1 pour la gomtrie 3-d.


abscisse, en gomtrie plane, est une fonction ayant comme argument un point
ou un vecteur ou un nombre complexe.
abscisse renvoie labscisse du point ou du vecteur :
- si le point A a pour coordonnes cartsiennes (xA , yA ), abscisse(A) renvoie
xA ,
- si le point B a pour coordonnes cartsiennes (xB , yB ), abscisse(A-B) ren
voie xA xB (car A-B dsigne le vecteur BA).
On tape :
abscisse(point(1+2*i))
On obtient :
1
On tape :
abscisse(point(i)-point(1+2*i))
On obtient :
-1
On tape :
abscisse(1+2*i)
On obtient :
1
On tape :
abscisse([1,2])
On obtient :
1

744

9.16.3

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Lordonne dun point ou dun vecteur : ordinate ordonnee

Voir aussi : 10.12.2 pour la gomtrie 3-d.


ordonnee, en gomtrie plane, est une fonction ayant comme argument un point
ou un vecteur ou un nombre complexe.
ordonnee renvoie lordonne du point ou du vecteur :
- si le point A a pour coordonnes cartsiennes (xA , yA ), ordonnee(A) renvoie
yA ,
- si le point B a pour coordonnes cartsiennes (xB , yB ), ordonnee(A-B) ren
voie yA yB (A-B dsigne le vecteur BA).
On tape :
ordonnee(point(1+2*i))
On obtient :
2
On tape :
ordonnee(point(i)-point(1+2*i))
On obtient :
-1
On tape :
ordonnee(1+2*i)
On obtient :
2
On tape :
ordonnee([1,2])
On obtient :
2

9.16.4

Les coordonnes dun point, dun vecteur ou dune droite :


coordinates coordonnees

Voir aussi : 10.12.4 pour la gomtrie 3-d.


coordonnees, en gomtrie plane, est une fonction ayant comme argument un
point ou un nombre complexe ou un vecteur ou une droite.
coordonnees renvoie la liste de labscisse et de lordonne du point ou du vecteur ou la liste des affixes de deux points de la droite oriente.
si le point A a pour coordonnes cartsiennes (xA , yA ), coordonnees(A)
renvoie [xA , yA ],

9.16. LES MESURES

745

si le point B a pour coordonnes cartsiennes (xB , yB ), coordonnees(vecteur(A,B))


ou coordonnees(B-A) renvoie [xB xA , yB yA ] (alors que B-A ren
voie (xB xA ) + i (yB yA ) car B-A dsigne laffixe du vecteur AB en
gomtrie plane),
si le vecteur V a pour coordonnes cartsiennes (xV , yV ), coordonnees(V)
ou coordonnees(vecteur(A,V)) renvoie [xV , yV ],
si une droite d est dfinie par deux points A et B, coordonnees(d)
renvoie [affixe(A),affixe(B)], si d est dfinie par son quation,
coordonnees(d) renvoie [affixe(A),affixe(B)] o A et B sont
deux points de la droite d, le vecteur AB ayant mme orientation que d.
On tape :
coordonnees(point(1+2*i))
Ou on tape :
coordonnees(1+2*i)
On obtient :
[1,2]
On tape :
coordonnees(point(1+2*i)-point(i))
Ou on tape :
coordonnees(point(1+2*i)-point(i))
On obtient :
[1,1]
On tape :
coordonnees(vecteur(point(i),point(1+2*i)))
Ou on tape :
coordonnees(vecteur(i,1+2*i))
Ou on tape :
coordonnees(vecteur([0,1],[1,2]))
On obtient :
[1,1]
On tape :
coordonnees(1+2*i)
Ou on tape :
coordonnees(vecteur(1+2*i))

746

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Ou on tape :
coordonnees(vecteur(point(i),vecteur(1+2*i)))
On obtient :
[1,2]
On tape :
coordonnees(point(i),vecteur(1+2*i))
On obtient :
[1,2]
On tape :
d:=droite(-1+i,1+2*i)
Ou on tape
d:=droite(point(-1,1),point(1,2))
Puis,
coordonnees(d)
On obtient :
[-1+i,1+2*i]
On tape :
d:=droite(y=(1/2*x+3/2))
On obtient :
[(3*i)/2,1+2*i]
On tape :
d:=droite(x-2*y+3=0)
On obtient :
[(3*i)/2,(-4+i)/2]

Attention
coordonnees peut aussi avoir comme argument une squence ou une liste de
points. coordonnees renvoie alors la squence ou la liste des listes des coordonnes de ces points, par exemple coordonnees(i,1+2*i) ou coordonnees(point(i),point(
renvoie la squence :
[0,1],[1,2]
et
coordonnees([i,1+2*i]) ou coordonnees([point(i),point(1+2*i)])
renvoie la matrice :
[[0,1],[1,2]] donc
coordonnees([1,2]) renvoie la matrice :
[[1,0],[2,0]] car [1,2] est considr comme la liste de 2 points daffixe 1
et 2.

9.16. LES MESURES

9.16.5

747

Les coordonnes rectangulaire dun point : rectangular_coordinates


coordonnees_rectangulaires

rectangular_coordinates ou coordonnees_rectangulaires renvoie la liste de labscisse et de lordonne dun point donn par la liste de ses
coordonnes polaires.
On tape :
coordonnees_rectangulaires(2,pi/4)
Ou on tape :
coordonnees_rectangulaires(polar_point(2,pi/4))
On obtient :
[2/(sqrt(2)),2/(sqrt(2))]

9.16.6

Les coordonnes polaire dun point : polar_coordinates


coordonnees_polaires

polar_coordinates ou coordonnees_polaires renvoie la liste du module et de largument de laffixe dun point (en 2D) ou dun nombre complexe ou
de la liste de coordonnes rectangulaires.
On tape :
coordonnees_polaires(1+i)
Ou on tape :
coordonnees_polaires(point(1+i))
Ou on tape :
coordonnees_polaires([1,1])
On obtient :
[sqrt(2),pi/4]

9.16.7

Lquation cartsienne dun objet gomtrique : equation

Voir aussi : 10.12.5 pour la gomtrie 3-d.


equation permet davoir lquation cartsienne dun objet gomtrique.
Attention ! ! ! il faut auparavant purger les variables x et y en tapant purge(x)
et purge(y).
On tape :
equation(droite(-1,i))
On obtient :
(x-y)=-1
On tape :
equation(cercle(-1,i))
On obtient :
((x+1)^2+y^2)=1
qui est lquation du cercle de centre -1 et de rayon le module de i.

748

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.16.8

Lquation paramtrique dun objet gomtrique : parameq

Voir aussi : 10.12.6 pour la gomtrie 3-d.


parameq, en gomtrie plane, permet davoir lquation paramtrique dun objet
gomtrique sous la forme du nombre complexe x(t) + i y(t).
Attention ! ! ! il faut auparavant purger la variable t en tapant : purge(t) ou
t:=t.
On tape :
parameq(droite(-1,i))
On obtient :
-t+(1-t)*(i)
On tape :
parameq(cercle(-1,i))
On obtient :
-1+exp(i*t)
On tape :
normal(parameq(ellipse(-1,1,i)))
On obtient :
sqrt(2)*cos(t)+(i)*sin(t)

9.17

Les mesures

9.17.1

Remarques gnrales sur laffichage des mesures

Les commandes concernant les mesures et se terminant pas en ou at (resp


enbrut ou atraw) grent laffichage de ces mesures en un point (qui est le dernier argument de ces commandes) avec une lgende succinte (resp sans lgende).
Si on prfre une lgende plus sophistique il faut utiliser la commande legende
ou affichage avec legende comme argument. On tape par exemple :
C:=carre(0,1);a:=aire(C);p:=perimetre(C)
legend(1+i,"aire(C)="+string(a))
On obtient :
aire(C)=1 scrit au daffixe 1+i
puis, on tape :
affichage(legend(1,"perimetre(C)="+string(p)),vert)
On obtient :

9.17. LES MESURES

749

perimetre(C)=4 scrit en vert au point 1


alors que si on tape :
aireen(C,1+i)
On obtient :
aC=1 scrit au daffixe 1+i
puis, si on tape :
perimetreen(C,1)
On obtient :
pC=4 scrit au daffixe 1
ou bien si on tape :
aireenbrut(C,1+i)
On obtient :
1 scrit au daffixe 1+i
puis, si on tape :
perimetreenbrut(C,1)
On obtient :
4 scrit au daffixe 1

9.17.2

La longueur dun segment et distance entre les deux objets gomtriques : distance longueur

Voir aussi : 10.12.7 pour la gomtrie 3-d.


distance ou longueur a comme argument deux points (ou deux nombres
complexes qui sont laffixe de ces points) ou deux objets gomtriques.
distance ou longueur renvoie la longueur du segment dfini par ces deux
points ou la distance entre les deux objets gomtriques.
On tape :
longueur(-1,1+i)
On obtient :
sqrt(5)
On tape :
longueur(0,droite(-1,1+i))
On obtient :
sqrt(5)/5

750

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

On tape :
longueur(cercle(0,1),droite(-2,1+3i))
On obtient :
sqrt(2)-1
Attention Lorsque le calcul de longueur utilise des paramtres, il faut tre en mode
rel. Par exemple :
assume(a=[4,0,5,0.1])};
A:=point(0);
B:=point(a);
simplify(longueur(B,A))
simplify(longueur(A,B))
en mode complexe on a :
simplify(longueur(B,A)) renvoie a mais
simplify(longueur(A,B)) renvoie -a.
en mode rel on a :
simplify(longueur(B,A)) et simplify(longueur(A,B)) renvoie c.

9.17.3

La longueur dun segment et son affichage : distanceat distanceen


et distanceatraw distanceenbrut

distanceat ou distanceen et distanceatraw ou distanceenbrut


sont des commandes obtenues lorsquon utilse, dans un niveau de gomtrie 2d ou
3d, le bouton Mode->Mesures->ditanceen ou Mode->Mesures->distanceenbrut.
Dans ce cas il faut que tous les objets, sauf les points, dsigns par la souris soient
dj nomms.
On peut nammoins taper ces commandes dans une ligne de commande.
distanceat ou distanceen a 3 arguments : le nom de 2 points et 1 point
(ou laffixe de ce point) ou encore le nom de 2 objets gomtriques et un point (ou
laffixe de ce point).
Attention Il faut que les 2 premiers arguments soient des noms.
distanceat ou distanceen renvoie le point donn en 3-ime argument, calcule la longueur du segment dfini par les deux premiers points ou la distance entre
les 2 objets gomtriques et affiche lendroit du 3-ime point, cette longueur prcde dune lgende.
On tape (on doit donnerle nom des objets) :
A:=point(-1);B:=point(1+i);segment(A,B);
distanceat(A,B,0.4i)
ou
distanceen(A,B,0.4i)
On obtient :

9.17. LES MESURES

751

AB=sqrt(5) scrit au point(0.4i)


On tape (on doit donnerle nom des objets) :
C:=point(0);d:=droite(-1,1+i)
distanceen(C,d,i/2)
On obtient :
Cd=sqrt(5)/5 scrit au point(i/2)
On tape (on doit donner le nom des objets) :
c:=cercle(0,1); d:=droite(-2,1+3i)
distanceen(c,d,0)
On obtient :
cd=sqrt(2)-1 scrit au point(0)
distanceatraw ou distanceenbrut a comme argument trois points (ou 2
points et 1 nombre complexe qui est laffixe dun point) ou encore 2 objets gomtriques et un point (ou laffixe de ce point).
distanceatraw ou distanceenbrut renvoie le point donn en 3-ime argument, calcule la longueur du segment dfini par les deux premiers points ou la
distance entre les 2 ojets gomtriques et affiche cette longueur lendroit du 3ime point.
On tape :
A:=point(-1);B:=point(1+i);segment(A,B);
distanceenbrut(A,B,0.4i)
On obtient :
sqrt(5) scrit au point(0.4i)
On tape :
C:=point(0);d:=droite(-1,1+i)
distanceenbrut(C,d,i/2)
ou on tape (on nest pas oblig de donner un nom aux objets) :
distanceenbrut(0,droite(-1,1+i),i/2)
On obtient :
sqrt(5)/5 scrit au point(i/2)
On tape :
c:=cercle(0,1); d:=droite(-2,1+3i)
distanceenbrut(c,d(-2,1+3i),0)
ou on tape (on nest pas oblig de donner un nom aux objets) :
distanceenbrut(cercle(0,1),droite(-2,1+3i),0)
On obtient :
sqrt(2)-1 scrit au point(0)

752

9.17.4

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Le carr de la longueur dun segment : distance2 longueur2

Voir aussi : 10.12.8 pour la gomtrie 3-d.


longueur2 a comme argument deux points (ou 2 points et 1 nombre complexe
qui est laffixe dun point).
longueur2 renvoie le carr de la longueur du segment dfini par ces deux points.
On tape :
longueur2(-1,1+i)
On obtient :
5

9.17.5

La mesure dun angle : angle

Voir aussi : 10.12.9 pour la gomtrie 3-d.


angle a comme argument trois points (ou trois nombres complexes qui sont laffixe de ces points) ou 2 points et une droite et ventuellement une chaine de caractres pour afficher un petit arc de cercle avec ce symbole en lgende afin de
reprsenter langle sur la figure (larc est remplac par le symbole quart de carre si
langle vaut pi/2 ou -pi/2).
angle renvoie la mesure (en radians ou en degrs) de langle orient de sommet
le premier argument, le deuxime argument se trouve sur le premier cot de langle
et le troisime argument se trouve sur le deuxime cot.
Remarque
Si le troisime argument est une droite, cette droite donne la direction du 2ime
ct de langle. Ainsi :

angle(A,B,C) dsigne la mesure de langle en radians (ou en degrs) de (AB, AC).

angle(A,B,C,"") trace langle (AB, AC) avec comme lgende un petit arc
orient.

angle(A,B,C,"a") trace langle (AB, AC) avec comme lgende un petit arc
orient not a.
angle(A,B,C,"")[0] ou angle(A,B,C,"a")[0] dsigne la mesure de

langle en radians (ou en degrs) de (AB, AC).
On tape :
angle(0,1,1+i)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
pi/4
On tape :
angle(0,1,1+i,"")
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
[pi/4,cercle(point(0,0),1/5)]

9.17. LES MESURES

753

et langle est repr par un arc de cercle sans lgende.


On tape :
angle(0,1,1+i,"a")
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
[pi/4,cercle(point(0,0),1/5)]
et langle est repr par un arc de cercle avec a comme lgende.
On tape :
angle(0,1,i,"a")
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
[pi/2,polygone(point(1/5,0),point(1/5,1/5),point(0,1/5),point(0,1/5))]
et langle droit est repr par un quart de carr avec a comme lgende.

9.17.6

La mesure dun angle et son affichage : angleat angleen


et angleatraw angleenbrut

angleat ou angleen (resp angleatraw ou angleenbrut) sont des commandes qui permettent laffichage avec lgende (resp sans lgende) de la valeur
dun angle dsign en cliquant (on cliqueson sommet puis ses 2 cts et enfin la
position de la laffichage). Ces commandes sont obtenues lorsquon utilse, dans
un niveau de gomtrie 2d ou 3d, le bouton Mode->Mesures->angleen ou
Mode->Mesures->angleenbrut. Dans ce cas il faut que tous les objets dsigns par la souris soient dj nomms, sauf les points qui seront alors dfinis par
les diffrents clicks de la souris.
On peut nammoins taper ces commandes dans une ligne de commande.
angleat ou angleen a comme argument quatre points (ou 3 points et 1 nombre
complexe qui est laffixe dun point).
Attention Il faut que les 3 premiers points aient un nom.
angleat ou angleen renvoie le 4-ime point, calcule la mesure (en radians ou
en degrs) de langle orient de sommet le premier argument, le deuxime argument se trouve sur le premier cot de langle et le troisime argument se trouve sur
le deuxime cot et cette mesure est affiche, prcde dune lgende, lendroit
du 4-ime point.
Ainsi anglen(A,B,C,D) dsigne la mesure de langle en radians (ou en degrs)

de (AB, AC) et cette messue sera affiche, pcde de A=, lendroit du point
D.
On tape :
A:=point(-1);B:=point(1+i);C:=point(i);
segment(A,B);segment(A,C);

754

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


angleen(A,B,C,0.2i)

On obtient si on a coch radian dans la configuration du cas (bouton donnant


la ligne dtat) :
A=atan(1/3) scrit au point(0.4i)
angleatraw ou angleenbrut a comme argument quatre points (ou 3 points
et 1 nombre complexe qui est laffixe dun point).
angleatraw ou angleenbrut renvoie le 4-ime point, calcule la mesure (en
radians ou en degrs) de langle orient de sommet le premier argument, le deuxime
point se trouve sur le premier cot de langle et le troisime point se trouve sur
le deuxime cot et cette mesure est affiche lendroit du 4-ime point. Ainsi
angleenbrut(A,B,C,D) dsigne la mesure de langle en radians (ou en de
grs) de (AB, AC) et cette mesure sera affiche lendroit du point D.
On tape :
A:=point(-1);B:=point(1+i);C:=point(i);
segment(A,B);segment(A,C);
angleenbrut(A,B,C,0.2i)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
atan(1/3) scrit au point(0.4i)

9.17.7

Reprsentation graphique de laire dun polygone : tracer_aire


graphe_aire aire_graphe plotarea areaplot

Avec un polygone comme argument, aire_graphe ou graphe_aire ou


tracer_aireplotarea permet de reprsenter et dafficher laire dun polygone. Laire est positive si le le polygone est direct et est ngative sinon On tape :

plotarea(polygone(point(1),point((1+i)*1/2),point(1+i)))
On obtient :
le polygone rempli avec -1/4 affich au point(1)
On tape :

plotarea(polygone(point(1),point(1+i),point((1+i)*1/2)))
On obtient :
le polygone rempli avec 1/4 affich au point(1)
Remarque Si on ne voit pas laffichage, on tape par exemple :

9.17. LES MESURES

755

plotarea(polygone(point(0),point(1),point(1+i),point((1+i)/2),point(i)))
On obtient :
le polygone rempli, mais ne laffichage au point(0)
est cach
On tape alors :

plotarea(polygone(point(0),point(1),point(1+i),point((1+i)/2),point(i)),affic
On obtient :
le polygone rempli, avec 3/4 affich au au point(0)
On peut aussi taper, pour navoir que la valeur :
plotarea(polygone(point(0),point(1),point(1+i),point((1+i)/2),point(i)))[3]
On obtient :
3/4

9.17.8

Aire dun polygone : area aire

aire calcule laire dun cercle ou dun polygone toil par rapport son premier
sommet.
On tape :
aire(triangle(0,1,i))
On obtient :
1/2
On tape :
aire(carre(0,2))
On obtient :
4

9.17.9

Laire dun polygone et son affichage : areaat aireen et


areaatraw aireenbrut

areaat ou aireen et areaatraw ou aireenbrut sont des commandes obtenues lorsquon utilse, dans un niveau de gomtrie 2d ou 3d, le bouton Mode->Mesures->aireen
ou Mode->Mesures->airenbrut. Dans ce cas il faut que tous les objets dsigns par la souris soient dj nomms.
On peut nammoins taper ces commandes dans une ligne de commande.

756

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

areaat ou aireen et areaatraw ou aireenbrut ont comme arguments un cercle ou un polygone toil par rapport son premier sommet et 1 point
(ou 1 nombre complexe qui est laffixe dun point).
areaat ou aireen renvoie le point, calcule laire du cercle ou polygone toil
par rapport son premier sommet et affiche cette aire lendroit du point avec une
lgende. Attention Il faut que le cercle ou le polygone ait un nom.
areaatraw ou aireenbrut renvoie le point, calcule laire du cercle ou du polygone toil par rapport son premier sommet et affiche cette aire lendroit du
point.
On tape :
t:=triangle(0,1,i)
aireen(t,(1+i)/2)
On obtient :
1/2 scrit au point(1+i)/2 avec la lgende
On tape :
aireenbrut(triangle(0,1,i),(1+i)/2)
On obtient :
1/2 scrit au point(1+i)/2
On tape :
cc:=cercle(0,2)
aireen(cc,2.2)
On obtient :
4*pi scrit au point(2.2) avec une lgende
On tape :
aireenbrut(cercle(0,2),2.2)
On obtient :
4*pi scrit au point(2.2)
On tape :
c:=carre(0,2)
aireen(c,2.2)
On obtient :
4 scrit au point(2.2) avec une lgende
On tape :

9.17. LES MESURES

757

aireenbrut(carre(0,2),2.2)
On obtient :
4 scrit au point(2.2)
On tape :
h:=hexagone(0,1)
aireen(h,1.2)
On obtient :
3*sqrt(3)/2 scrit au point(1.2) avec une lgende
On tape :
aireenbrut(hexagone(0,1),1.2)
On obtient :
3*sqrt(3)/2 scrit au point(1.2)

9.17.10

Primtre dun polygone : perimeter perimetre

Voir aussi arcLen ??.


perimetre calcule le primtre dun cercle, dun arc de cercle ou dun polygone.
On tape :
perimetre(cercle(0,1))
On obtient :
2*pi
On tape :
perimetre(cercle(0,1,pi/4,pi))
On obtient :
3*pi/4
On tape :
perimetre(arc(0,pi/4,pi))
On obtient :
sqrt(2)*pi/4
On tape :
perimetre(triangle(0,1,i))
On obtient :
2+sqrt(2)
On tape :
perimetre(carre(0,2))
On obtient :
8

758

9.17.11

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Primtre dun polygone et son affichage :perimeterat perimetreen


et perimeteratraw perimetreenbrut

perimeterat ou perimetreen et perimeteratraw ou perimetreenbrut


sont des commandes obtenues lorsquon utilse, dans un niveau de gomtrie 2d ou
3d, le bouton Mode->Mesures->perimetreen ou Mode->Mesures->perimetreenbrut.
Dans ce cas il faut que tous les objets dsigns par la souris soient dj nomms.
On peut nammoins taper ces commandes dans une ligne de commande.
perimeterat ou perimetreen et perimeteratraw ou perimetreenbrut
ont comme argument un cercle ou un polygone et 1 point (ou 1 nombre complexe
qui est laffixe dun point).
perimeterat ou perimetreen renvoie le point, calcule le primtre du cercle
ou du polygone et affiche ce primtre lendroit du point avec une lgende. Attention Il faut que le polygone ait un nom.
perimeteratraw ou perimetreenbrut renvoie le point, calcule le primtre du cercle ou du polygone et affiche ce primtre lendroit du point.
On tape :
t:=triangle(0,1,i)
perimetreen(t,(1+i)/2)
On obtient :
2+sqrt(2) scrit au point((1+i)/2) avec une lgende
On tape :
perimetreenbrut(triangle(0,1,i),(1+i)/2)
On obtient :
2+sqrt(2) scrit au point((1+i)/2)
On tape :
c:=carre(0,2)
perimetreen(c,2.2)
On obtient :
8 scrit au point(2.2) avec une lgende
On tape :
perimetreenbrut(carre(0,2),2.2)
On obtient :
8 scrit au point(2.2)
On tape :

9.17. LES MESURES

759
cc:=cercle(0,2)
perimetreen(cc,2.2)

On obtient :
4*pi scrit au point(2.2) avec une lgende
On tape :
perimetreenbrut(cercle(0,2),2.2)
On obtient :
4*pi scrit au point(2.2)
On tape :
h:=hexagone(0,1)
perimetreen(h,1.2)
On obtient :
6 scrit au point(1.2) avec une lgende
On tape :
perimetreenbrut(hexagone(0,1),1.2)
On obtient :
6 scrit au point(1.2)

9.17.12

Pente dune droite : slope pente

slope pente est soit une commande soit un attribut de la commande droite
pour cela voir 9.10.1
Lorsque slope pente est une commande son argument est une droite ou un
segment ou deux points ou deux nombres complexes.
slope pente renvoie la pente de la droite dfinie par le segment ou par les 2
points ou leurs affixes.
On tape :
pente(droite(1,2i))
Ou on tape :
pente(segment(1,2i))
Ou on tape :
pente(point(1),point(2i))
Ou on tape :

760

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


pente(1,2i)

On obtient :
-2
On tape :
pente(droite(2y-x=3))
On obtient :
1/2
On tape :
pente(tangente(plotfunc(sin(x)),pi/4))
Ou on tape :
pente(droite_tangente(sin(x),pi/4))
On obtient :
(sqrt(2))/2

9.17.13

Pente dune droite et son affichage : slopeat, penteen et


slopeatraw, penteenbrut

slopeat ou penteen et slopeatraw ou penteenbrut est une commande


obtenue lorsquon utilse, dans un niveau de gomtrie 2d ou 3d, le bouton Mode->Mesures->pentee
ou Mode->Mesures->penteenbrut. Dans ce cas il faut que tous les objets
dsigns par la souris soient dj nomms.
On peut nammoins taper ces commandes dans une ligne de commande.
slopeat ou penteen ont 2 arguments le nom dune droite (ou dun segment)
et 1 point (ou 1 nombre complexe qui est laffixe dun point).
et slopeatraw ou penteenbrut ont comme arguments une droite (ou un segment) et 1 point (ou 1 nombre complexe qui est laffixe dun point).
slopeat ou penteen renvoie le point, calcule la pente de la droite (ou du
segment) et affiche cette pente lendroit du point avec une lgende. Attention
slopeat ou penteen, il faut mettre le nom de la droite (ou du segment).
slopeatraw ou penteenbrut renvoie le point, calcule la pente de la droite
(ou du segment) et affiche cette pente lendroit du point.
On tape :
d:=droite(1,2i)
penteen(d,i)
On obtient :
"sd=-2" scrit au point(i)
On tape :

9.17. LES MESURES

761

penteenbrut(droite(1,2i),i)
Ou on tape :
penteenbrut(segment(1,2i),i)
On obtient :
-2 scrit au point(i)
On tape :
d1:=droite(2y-x=3),2*i)
penteen(d1,2*i)
On obtient :
"sd1=1/2 scrit au point(2*i) avec une lgende
On tape :
penteenbrut(droite(2y-x=3),2*i)
On obtient :
1/2 scrit au point(2*i)
On tape :
T:=tangente(plotfunc(sin(x)),pi/4)
slopeat(T,i)
On obtient :
"sT=(sqrt(2))/2" scrit au point(i)
On tape :
penteenbrut(tangente(plotfunc(sin(x)),pi/4),i)
Ou on tape :
penteenbrut(droite_tangente(sin(x),pi/4),i)
On obtient :
(sqrt(2))/2 scrit au point(i)

762

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.17.14

Avoir comme rponse la valeur dune mesure affiche : extract_measure,


extraire_mesure

extract_measure ou extraire_mesure permet dobtenir la valeur dune


mesure qui a t affiche.
extract_measure ou extraire_mesure a pour argument la commande
qui a affich cette mesure.
On tape :
A:=point(-1);B:=point(1+i);C:=point(i);
extraire_mesure(angleen(A,B,C,0.2i))
ou
extract_measure(angleat(A,B,C,0.2i))
On obtient :
atan(1/3)
On tape :
extraire_mesure(distanceenbrut(A,B,C,0.2i))
ou
extract_measure(distanceatraw(A,B,0.4i))
On obtient :
sqrt(5)

9.17.15

Le rayon dun cercle : radius rayon

rayon a comme argument un cercle.


rayon renvoie la longueur du rayon de ce cercle.
On tape :
rayon(cercle(-1,i))
On obtient :
1
On tape :
rayon(cercle(-1,point(i)))
On obtient :
sqrt(2)/2

9.18. LES TRANSFORMATIONS

9.17.16

763

La longueur dun vecteur : abs

abs a comme argument un nombre complexe ou un vecteur dfini par deux points
(cest dire la diffrence de ces deux points).
abs renvoie le module du nombre complexe, ou la longueur du vecteur donn en
argument.
On tape :
abs(1+i)
Ou on tape :
abs(point(1+2*i)-point(i))
On obtient :
sqrt(2)

9.17.17

Langle dun vecteur avec Ox : arg

arg a comme argument un nombre complexe ou un vecteur dfini par deux points
(cest dire la diffrence de ces deux points).
arg renvoie largument du nombre complexe ou langle polaire du vecteur donn
en argument.
On tape :
arg(1+i)
On obtient :
pi/4

9.17.18

Pour normaliser un nombre complexe : normalize

normalize divise le nombre complexe par son module pour avoir un nombre
complexe de module 1.
On tape :
normalize(3+4*i)
On obtient :
(3+4*i)/5

9.18

Les transformations

9.18.1

Gnralits

Les transformations ci-dessous :


translation, rotation, homothetie, similitude, symetrie,
projection, inversion
peuvent toujours tre considres, soit comme des fonctions (les arguments sont les
paramtres servant dfinir la transformation), soit comme agissant sur le dernier

764

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

argument (les premiers arguments sont les paramtres servant dfinir la transformation et lobjet gomtrique transformer est mis comme dernier paramtre).
Lobjet gomtrique transformer peut tre de tout type comme point, droite,
cercle, polygone, courbe paramtre, graphe de fonctions etc... Par exemple si P
est lobjet gomtrique transformer on peut avoir :
P:=point(1+i) ou P:=droite(x=1) ou P:=plan(z=0) ou P:=cercle(point(1,1),1)
ou P:=plotfunc(x2-2) etc...

9.18.2

La translation : translation

Voir aussi : 10.14.2 pour la gomtrie 3-d.


translation, en gomtrie plane, a un ou deux arguments : le vecteur de translation donn par un vecteur gomtrique ou par la liste de ses coordonnes ou par
son affixe (la diffrence de deux points ou un nombre complexe) et ventuellement
lobjet gomtrique transformer.
Lorsque translation a un argument, cest une fonction qui agit sur un objet
gomtrique.
On tape :
t:=translation(1+i)
Puis :
t(-2)
On obtient :
Le point -1+i trac avec une croix (x) noire
Lorsque translation a deux arguments, translation dessine et renvoie le
transform du deuxime argument dans la translation de vecteur le premier argument.
On tape :
translation([1,1],-2)
Ou on tape :
A:=point(1);B:=point(2+i);translation(vecteur(A,B),-2)
Ou on tape :
translation(1+i,-2)
Ou on tape :
A:=point(1);B:=point(2+i);translation(B-A,-2)
On obtient :
Le point -1+i trac avec une croix (x) noire
On tape :
translation(1+i,droite(-2,-i))
On obtient :
La droite passant par -1+i et 1

9.18. LES TRANSFORMATIONS

9.18.3

765

La symtrie droite et la symtrie point : reflection symetrie

Voir aussi : 10.14.3 pour la gomtrie 3-d.


symetrie, en gomtrie plane, a un ou deux arguments : un point ou une droite
et ventuellement lobjet gomtrique transformer.
Lorsque symetrie a un argument, cest une fonction qui agit sur un objet gomtrique : quand le premier argument est un point (ou un nombre complexe) il sagit
de la symtrie par rapport ce point (ou par rapport au point daffixe ce nombre
complexe) et quand le premier argument est une droite il sagit de la symtrie par
rapport cette droite.
On tape :
sp:=symetrie(-1)
Puis :
sp(1+i)
On obtient :
Le point -3-i trac avec une croix (x) noire
On tape :
sd:=symetrie(droite(-1,i))
Puis :
sd(1+i)
On obtient :
Le point 2*i trac avec une croix (x) noire
Lorsque symetrie a deux arguments, symetrie dessine et renvoie le transform du deuxime argument dans la symtrie dfinie par le premier argument :
quand le premier argument est un point (ou un nombre complexe) il sagit de la symtrie par rapport ce point (ou par rapport au point daffixe ce nombre complexe)
et quand le premier argument est une droite il sagit de la symtrie par rapport
cette droite.
On tape :
symetrie(-1,1+i)
On obtient :
Le point -3-i trac avec une croix (x) noire
On tape :
symetrie(droite(-1,i),1+i)
On obtient :
Le point 2*i trac avec une croix (x) noire

766

9.18.4

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

La rotation : rotation

Voir aussi : 10.14.4 pour la gomtrie 3-d.


rotation, en gomtrie plane, a deux ou trois arguments.
Lorsque rotation a deux arguments ce sont : un point (le centre de rotation) et
un rel (la mesure de langle de rotation) ; rotation est alors une fonction qui
agit sur un objet gomtrique (point, droite etc...)
On tape :
r:=rotation(i,-pi/2)
Puis :
r(1+i)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point 0 trac avec une croix (x) noire
Lorsque rotation a trois arguments, ce sont : un point (le centre de rotation),
un rel (la mesure de langle de rotation) et lobjet gomtrique transformer ;
rotation dessine et renvoie alors le transform du troisime argument dans la
rotation de centre le premier argument et dangle de mesure le deuxime argument.
On tape :
rotation(i,-pi/2,1+i)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point 0 trac avec une croix (x) noire
On tape :
rotation(i,-pi/2,droite(1+i,-1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
La droite passant par 0 et -1+2*i

9.18.5

Lhomothtie : homothety homothetie

Voir aussi : 10.14.5 pour la gomtrie 3-d.


homothetie, en gomtrie plane, a deux ou trois arguments : un point (le centre
de lhomothtie), un rel (la valeur du rapport de lhomothtie) et ventuellement
lobjet gomtrique transformer.
Lorsque homothetie a deux arguments, cest une fonction qui agit sur un objet
gomtrique.
On tape :
h:=homothetie(i,2)
Puis :

9.18. LES TRANSFORMATIONS

767
h(1+i)

On obtient :
Le point 2+i trac avec une croix (x) noire
Lorsque homothetie a trois arguments, homothetie dessine et renvoie le
transform du troisime argument dans lhomothtie de centre le premier argument et de rapport le deuxime argument.
On tape :
homothetie(i,2,1+i)
On obtient :
Le point 2+i trac avec une croix (x) noire
On tape :
homothetie(i,2,cercle(1+i,1))
On obtient :
Le cercle de centre 2+i et de rayon 2
Remarque
Lorsque la valeur du rapport de lhomothtie est un nombre complexe k non rel
homothetie(A,k) est la similitude de centre le point A, de rapport abs(k) et
dangle arg(k).

9.18.6

La similitude : similarity similitude

Voir aussi : 10.14.6 pour la gomtrie 3-d.


similitude, en gomtrie plane, a trois ou quatre arguments : un point (le centre
de rotation), un rel (la valeur du rapport k de la similitude), un rel (la mesure a de
langle de rotation en radians (ou degrs)) et ventuellement lobjet gomtrique
transformer.
Remarque : si le rapport k est ngatif, langle de la similitude est alors de mesure
a radians (ou degrs).
Lorsque similitude a trois arguments, cest une fonction qui agit sur un objet
gomtrique.
On tape :
s:=similitude(i,2,-pi/2)
Puis :
s(1+i)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point -i trac avec une croix (x) noire
On tape :

768

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


s(cercle(1+i,1))

On obtient si on a coch radian dans la configuration du cas (bouton donnant


la ligne dtat) :
Le cercle de centre -i et de rayon 2
Lorsque similitude a quatre arguments, similitude dessine et renvoie le
transform du quatrime argument dans la similitude de centre le premier argument
de rapport le deuxime argument et dangle le troisime argument.
On tape :
similitude(i,2,-pi/2,1+i)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point -i trac avec une croix (x) noire
On tape :
similitude(i,2,-pi/2,cercle(1+i,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le cercle de centre -i et de rayon 2
Remarque
En 2d la similitude de centre le point A, de rapport k et dangle a se traduit par :
similitude(A,k,a) ou par homothetie(A,k*exp(i*a)).

9.18.7

Linversion : inversion

Voir aussi : 10.14.7 pour la gomtrie 3-d.


inversion, en gomtrie plane, a deux ou trois arguments : un point (le centre de
linversion), un rel (la valeur du rapport de linversion) et ventuellement lobjet
gomtrique transformer.
Lorsque inversion a deux arguments, cest une fonction qui agit sur un objet
gomtrique.
Si inver:=inversion(C,k) et A1:=inver(A), on a CA CA1 = k.
On tape :
inver:=inversion(i,2)
Puis :
inver(cercle(1+i,1))
On obtient :
La droite verticale dquation x=1
On tape :

9.18. LES TRANSFORMATIONS

769

inver(cercle(1+i,1/2))
On obtient :
Le cercle de centre 8/3+i et de rayon 4/3, il passe
par le point 4+i
Lorsque inversion a trois arguments, inversion dessine et renvoie le transform du troisime argument dans linversion de centre le premier argument et de
rapport le deuxime argument.
Si A1:=inversion(C,k,A) on a CA CA1 = k.
On tape :
inversion(i,2,cercle(1+i,1))
On obtient :
La droite verticale dquation x=1
On tape :
inversion(i,2,cercle(1+i,1/2))
On obtient :
Le cercle de centre 8/3+i et de rayon 4/3 (il passe
par le point 4+i)

9.18.8

La projection orthogonale : projection

Voir aussi : 10.14.8 pour la gomtrie 3-d.


projection, en gomtrie plane, a un ou deux arguments : un objet gomtrique
et ventuellement un point.
Lorsque projection a un argument, cest une fonction qui agit sur un point et
qui projette orthogonalement ce point sur lobjet gomtrique.
On tape :
p1:=projection(droite(-1,i))
Puis :
p1(1+i)
On obtient :
Le point 1/2+3/2*i apparait avec une croix (x) noire
On tape :
p2:=projection(cercle(-1,1))
p2(i)
On obtient :

770

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Le point daffixe, sqrt(2)/2+(i)*sqrt(2)/2-1, apparait


avec une croix (x) noire
Lorsque projection a deux arguments, projection dessine et renvoie le
transform du point par la projection orthogonale sur le premier argument.
On tape :
projection(droite(-1,i),1+i)
On obtient :
Le point 1/2+3/2*i apparait avec une croix (x) noire
On tape :
projection(cercle(-1,1),i)
On obtient :
Le point daffixe, -1+sqrt(2)/2+(i)*sqrt(2)/2,
apparait avec une croix (x) noire

9.19

Les proprits

9.19.1

Savoir si 1 point est sur un objet graphique : is_element


est_element

Voir aussi : 10.13.1 pour la gomtrie 3-d.


est_element est une fonction boolenne ayant comme argument un point et un
objet gomtrique.
est_element vaut 1 si le point appartient lobjet gomtrique, et vaut 0 sinon.
On tape :
est_element(point(-1-i),droite(0,1+i))
On obtient :
1
On tape :
est_element(point(i),droite(0,1+i))
On obtient :
0

9.19. LES PROPRITS

9.19.2

771

Savoir si 3 points sont aligns : is_collinear est_aligne

Voir aussi : 10.13.6 pour la gomtrie 3-d.


est_aligne est une fonction boolenne ayant comme argument une liste ou une
squence de points.
est_aligne vaut 1 si les points sont aligns, et vaut 0 sinon.
On tape :
est_aligne(0,1+i,-1-i)
On obtient :
1
On tape :
est_aligne(i/100,1+i,-1-i)
On obtient :
0

9.19.3

Savoir si 4 points sont cocycliques : is_concyclic est_cocyclique

Voir aussi : 10.13.7 et 10.13.8 pour la gomtrie 3-d.


is_concyclic ou est_cocyclique est une fonction boolenne ayant comme
argument une liste ou une squence de points.
est_cocyclique vaut 1 si les points sont cocycliques, et vaut 0 sinon.
On tape :
est_cocyclique(1+i,-1+i,-1-i,1-i)
On obtient :
1
On tape :
est_cocyclique(i,-1+i,-1-i,1-i)
On obtient :
0

9.19.4

Savoir si 1 point est lintrieur dun polygone ou dun cercle :


is_inside est_dans

is_inside ou est_dans est une fonction boolenne ayant comme argument


un point et un polygone ou un cercle.
is_inside ou est_dans vaut 1 si le point est lintrieur ou sur le bord du
polygone ou du cercle, et vaut 0 sinon.
On tape :
est_dans((point(0),cercle(-1,1))

772

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

On obtient :
1
On tape :
est_dans(point(2),polygone([1,2-i,3+i]))
On obtient :
1
On tape :
est_dans(point(1-i),triangle([1,2-i,3+i]))
On obtient :
0

9.19.5

Savoir si on a un triangle quilatral : is_equilateral est_equilateral

Voir aussi : 10.13.9 pour la gomtrie 3-d.


est_equilateral est une fonction boolenne ayant comme argument trois
points ou un objet gomtrique.
est_equilateral vaut 1 si les trois points forment un triangle quilatral ou
si lobjet gomtrique est un triangle quilatral, et vaut 0 sinon.
On tape :
est_equilateral(0,2,1+i*sqrt(3))
On obtient :
1
On tape :
T:=triangle_equilateral(0,2,C);est_equilateral(T[0])
On obtient :
1
En effet T[0] dsigne un triangle car T est une liste compose du triangle et de
son sommet C.
On tape affixe(C) et on obtient 1+i*sqrt(3)
On tape :
est_equilateral(1+i,-1+i,-1-i)
On obtient :
0

9.19. LES PROPRITS

9.19.6

773

Savoir si on a un triangle isocle : is_isosceles est_isocele

Voir aussi : 10.13.10 pour la gomtrie 3-d.


est_isocele est une fonction boolenne ayant comme argument trois points ou
un objet gomtrique.
est_isocele vaut 1 (resp 2, 3) si les trois points forment un triangle isocle
ou si lobjet gomtrique est un triangle isocle dont langle portant les deux cots
gaux est dsign par le premier (resp second, troisime) argument, ou vaut 4 si les
trois points forment un triangle quilatral, ou si lobjet gomtrique est un triangle
quilatral, et vaut 0 sinon.
On tape :
est_isocele(1,1+i,i)
On obtient :
2
On tape :
T:=triangle_isocele(0,1,pi/4);est_isocele(T)
On obtient :
1
On tape :
T:=triangle_isocele(0,1,pi/4,C);est_isocele(T[0])
On obtient :
1
En effet T[0] dsigne un triangle car T est une liste compose du triangle et de
son sommet C.
On tape affixe(C) et on obtient (sqrt(2))/2+((i)*sqrt(2))/2
On tape :
est_isocele(1+i,-1+i,-i)
On obtient :
3

9.19.7

Savoir si on a un triangle rectangle ou si on a un rectangle :


is_rectangle est_rectangle

Voir aussi : 10.13.11 pour la gomtrie 3-d.


est_rectangle est une fonction boolenne ayant comme argument trois ou
quatre points ou un objet gomtrique.
est_rectangle vaut 1 (resp 2 ou 3) si les trois points forment un triangle rectangle, langle droit tant dsign par le premier (resp second, troisime) argument
ou si lobjet gomtrique est un triangle rectangle,
est_rectangle vaut 1 (resp 2) si les quatre points forment un rectangle (resp
un carr) ou si lobjet gomtrique est un rectangle (resp un carr), et vaut 0 sinon.
On tape :

774

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


est_rectangle(1,1+i,i)

On obtient :
2
On tape :
est_rectangle(1+i,-2+i,-2-i,1-i)
On obtient :
1
On tape :
R:=rectangle(-2-i,1-i,3,C,D);est_rectangle(R[0])
On obtient :
1
En effet R[0] dsigne un rectangle car R est une liste compose du rectangle et de
ses sommets C et D.

9.19.8

Savoir si on a un carr : is_square est_carre

Voir aussi : 10.13.12 pour la gomtrie 3-d.


est_carre est une fonction boolenne ayant comme argument quatre points ou
un objet gomtrique.
est_carre vaut 1 si les quatre points forment un carr ou si lobjet gomtrique
est un carr, et vaut 0 sinon.
On tape :
est_carre(1+i,-1+i,-1-i,1-i)
On obtient :
1
On tape :
K:=carre(1+i,-1+i);est_carre(K)
On obtient :
1
On tape :
K:=carre(1+i,-1+i,C,D);est_carre(K[0])
On obtient :
1

9.19. LES PROPRITS

775

En effet K[0] dsigne un carr car K est une liste compose dun carr et de ses
sommets C et D.
Si on tape affixe(C,D), on obtient -1-i,1-i.
On tape :
est_carre(i,-1+i,-1-i,1-i)
On obtient :
0

9.19.9

Savoir si on a un losange : is_rhombus est_losange

Voir aussi : 10.13.13 pour la gomtrie 3-d.


est_losange est une fonction boolenne ayant comme argument quatre points
ou un objet gomtrique.
est_losange vaut 1 (rep 2) si les quatre points forment un losange (resp un
carr) ou si lobjet gomtrique est un losange (resp un carr), et vaut 0 sinon.
On tape :
est_losange(1+i,-1+i,-1-i,1-i)
On obtient :
1
On tape :
K:=losange(1+i,-1+i,pi/4);est_losange(K)
On obtient :
1
On tape :
K:=losange(1+i,-1+i,pi/4,C,D);est_losange(K[0])
On obtient :
1

En effet K[0] dsigne un losange car K est une liste compose dun losange et de
ses sommets C et D.
Si on tape normal(coordonnees(C,D)), on obtient [-sqrt(2)-1,-sqrt(2)+1],[-sqrt(2)+1,-sq
On tape :
est_losange(i,-1+i,-1-i,1-i)
On obtient :
0

776

9.19.10

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

Savoir si on a un paralllogramme : is_parallelogram


est_parallelogramme

Voir aussi : 10.13.14 pour la gomtrie 3-d.


est_parallelogramme est une fonction boolenne ayant comme argument
quatre points ou un objet gomtrique.
est_parallelogramme vaut 1 (resp 2, 3, 4) si les quatre points forment un
paralllogramme (resp un losange, un rectangle, un carr) ou si lobjet gomtrique
est un paralllogramme (resp un losange, un rectangle, un carr), et vaut 0 sinon.
On tape :
est_parallelogramme(i,-1+i,-1-i,1-i)
On obtient :
0
On tape :
est_parallelogramme(1+i,-1+i,-1-i,1-i)
On obtient :
1
On tape :

Q:=quadrilatere(1+i,-1+i,-1-i,1-i);est_parallelogramme(Q)
On obtient :
4
Attention
On doit taper :

P:=parallelogramme(-1-i,1-i,i,D);est_parallelogramme(P[0])
Pour obtienir :
1
En effet cest P[0] qui dsigne un paralllogramme car P est une liste compose
dun paralllogramme et de son dernier sommet D.
Si on tape affixe(D)), on obtient -2+i.

9.19. LES PROPRITS

9.19.11

777

Savoir si 2 droites sont parallles : is_parallel est_parallele

Voir aussi : 10.13.3 pour la gomtrie 3-d.


est_parallele, en gomtrie plane, est une fonction boolenne ayant comme
argument deux droites.
est_parallele vaut 1 si les deux droites sont parallles, et vaut 0 sinon.
On tape :
est_parallele(droite(0,1+i),droite(i,-1))
On obtient :
1
On tape :
est_parallele(droite(0,1+i),droite(i,-1-i))
On obtient :
0

9.19.12

Savoir si 2 droites 2-d sont perpendiculaires : is_perpendicular


est_perpendiculaire

Voir aussi : 10.13.4 pour la gomtrie 3-d.


est_perpendiculaire, en gomtrie plane, est une fonction boolenne ayant
comme argument deux droites.
est_perpendiculaire vaut 1 si les deux droites sont perpendiculaires, et
vaut 0 sinon.
On tape :
est_perpendiculaire(droite(0,1+i),droite(i,1))
On obtient :
1
On tape :
est_perpendiculaire(droite(0,1+i),droite(1+i,1))
On obtient :
0

9.19.13

Savoir si 2 cercles sont orthogonaux : is_orthogonal est_orthogonal

Voir aussi : 10.13.5 pour la gomtrie 3-d.


est_orthogonal est une fonction boolenne ayant comme argument deux droites
ou deux cercles.
est_orthogonal vaut 1 si les deux droites sont perpendiculaires ou si les deux
cercles sont orthogonaux (si les tangentes en leurs points dintersection sont orthogonales), et vaut 0 sinon.
On tape :

778

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


est_orthogonal(droite(0,1+i),droite(i,1))

On obtient :
1
On tape :
est_orthogonal(line(2,i), line(0,1+i))
On obtient :
0
On tape :
est_orthogonal(cercle(0,1+i),cercle(2,1+i))
On obtient :
1
On tape :
est_orthogonal(cercle(0,1),cercle(2,1))
On obtient :
0

9.19.14

Savoir si des lments sont conjugus : is_conjugate est_conjugue

est_conjugue permet de savoir si 4 points sont conjugus ou si 2 points ou 2


droites ou 1 droite et 1 point sont conjugus par rapport un cercle ou deux droites.
est_conjugue est une fonction boolenne ayant comme arguments deux points
(resp deux droites ou un cercle) suivi de deux points ou de deux droites ou dune
droite et dun point.
est_conjugue vaut 1 si les arguments sont conjugus, et vaut 0 sinon.
On tape :
est_conjugue(cercle(0,1+i),point(1-i),point(3+i))
On obtient :
1
On tape :
est_conjugue(cercle(0,1),point((1+i)/2),droite(1+i,2))
Ou on tape :
est_conjugue(cercle(0,1),droite(1+i,2),point((1+i)/2))
On obtient :
1

9.19. LES PROPRITS

779

On tape :
est_conjugue(cercle(0,1),droite(1+i,2),
droite((1+i)/2,0))
On obtient :
1
On tape :

est_conjugue(point(1+i),point(3+i),point(i),point(i+3/2))
On obtient :
1
On tape :
est_conjugue(droite(0,1+i),droite(2,3+i),
droite(3,4+i),droite(3/2,5/2+i))
On obtient :
1

9.19.15

Savoir si 4 points forment un division harmonique : is_harmonic


est_harmonique

est_harmonique permet de savoir si 4 points forment un division harmonique.


est_harmonique est une fonction boolenne ayant comme arguments quatre
points.
est_harmonique vaut 1 si les 4 points forment un division harmonique et vaut
0 sinon.
On tape :
est_harmonique(0,2,3/2,3)
On obtient :
1
On tape :
est_harmonique(0,1+i,1,i)
On obtient :
0

780

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

9.19.16

Ces droites sont en faisceau ? is_harmonic_line_bundle


est_faisceau_droite

est_faisceau_droite a comme argument une liste de droites.


est_faisceau_droite renvoie :
1 si ces droites sont concourantes en un point,
2 si ces droites sont parallles,
3 si ces droites sont confondues,
et 0 sinon.
On tape :
est_faisceau_droite([droite(0,1+i),droite(0,2+i),
droite(0,3+i),droite(0,1)])
On obtient :
1

9.19.17

Ces cercles sont-ils en faisceau : is_harmonic_circle_bundle


est_faisceau_cercle

est_faisceau_cercle a comme argument une liste de cercles.


est_faisceau_cercle renvoie :
1 si ces cercles forment un faisceau (cest dire si ils ont 2 2 le mme axe radical),
2 si ces cercles sont concentriques,
3 si ces cercles sont confondus,
et 0 sinon.
On tape :
est_faisceau_cercle([cercle(0,i),cercle(4,i),
cercle(0,point(1/2))])
On obtient :
1

9.20

La division harmonique, ples et polaires

9.20.1

Point divisant un segment dans le rapport k : division_point


point_div

point_div a trois arguments : deux points (ou deux nombres complexes a et b)


et un nombre complexe k.
point_div renvoie et dessine le point daffixe z tel que :
za
zb = k On tape :
point_div(i,2+i,3+i)
On obtient :
pnt((5+4*i)/(2+i),0) et le dessin de ce point
On tape :

9.20. LA DIVISION HARMONIQUE, PLES ET POLAIRES

781

point_div(point(i),point(2+i),3)
On obtient :
pnt(3+i,0) et le dessine de ce point
Remarque : 0 reprsente la couleur du point.

9.20.2

Le birapport de 4 points aligns : cross_ratio birapport

birapport a comme argument 4 nombres complexes a, b, c, d.


birapport renvoie le birapport deces 4 nombres savoir :
ca da
cb / db On tape :
birapport(0,1,2,3)
On obtient :
4/3
On tape :
birapport(i,2+i,3/2+i,3+i)
On obtient :
-1

9.20.3

Division harmonique : harmonic_division div_harmonique

Quatre points aligns A, B, C, D sont en division harmonique si on a :


CA
DA
=
=k
CB
DB
On dit aussi que C et D divisent le segment AB dans le rapport k et que le point
D est le conjugu harmonique de C par rapport A et B ou plus rapidement D est
le conjugu harmonique de A, B, C.
Quatre droites concourantes ou parallles d1, d2, d3, d4 sont en division harmonique si elles dterminent sur chaque droite scante une division harmonique. On
dit aussi que d1, d2, d3, d4 forment un faisceau harmonique.
div_harmonique a comme arguments 3 points aligns ou leur 3 affixes (resp 3
droites concourantes ou parallles) et le nom dune variable.
div_harmonique affecte le dernier argument pour que lon obtienne une division harmonique et renvoie la liste des 4 points (resp des 4 droites) et dessine les
points (resp les droites).
On tape :
div_harmonique(0,2,3/2,D)
On obtient :
[0,2,3/2,pnt(3,0,"D")] et seul le point D est dessin
On tape :

782

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


div_harmonique(point(0),point(2),point(3/2),D)

On obtient :
[pnt(0,0),pnt(2,0),pnt(3/2,0), pnt(3,0,"D")] et les 4
points sont dessins
Remarque : 0 reprsente la couleur du point.
On tape :
div_harmonique(droite(i,0),droite(i,1+i),
droite(i,3+2*(i)),D)
On obtient :
[pnt([[i,0],0]),pnt([[i,1+i],0]),
pnt([[i,3+2*i],0]),pnt([[i,-3+2*i],0,"D"])] et les 4
droites sont dessines

9.20.4

Le conjugu harmonique : harmonic_conjugate conj_harmonique

conj_harmonique a comme arguments 3 points aligns A, B, C (resp 3 droites


concourantes ou parallles).
conj_harmonique renvoie et dessine le conjugu harmonique de C par rapport
A et B.
On tape :
conj_harmonique(0,2,3/2)
On obtient :
pnt(3,0)et dessine ce point
On tape :
conj_harmonique(droite(0,1+i),droite(0,3+i),droite(0,i))
On obtient :
pnt([[0,3+2*i],0]) et dessine cette droite

9.20.5

Ple et polaire : pole et polar polaire

polaire a comme argument un cercle C et un point A (ou un nombre complexe).


polaire renvoie et dessine la polaire du point A par rapport au cercle C : cest
la droite qui est le lieu des conjugus de A par rapport au cercle C.
pole a comme argument un cercle C et une droite d.
pole renvoie et dessine le ple de d par rapport au cercle C : cest le point A
admettant d comme polaire par rapport C. On tape :
polaire(cercle(0,1),(point(1+i))/2)
On obtient :

9.21. LES LIEUX ET LES ENVELOPPES

783

pnt([[2,2*i],0]) et dessine cette droite


On tape :
pole(cercle(0,1),droite(i,1))
On obtient :
pnt(1+i,0) et dessine ce point

9.20.6

Polaire rciproque : reciprocation polaire_reciproque

polaire_reciproque a comme argument un cercle C et une liste de points et


de droites.
polaire_reciproque renvoie la liste obtenue en remplacant dans la liste argument un point (resp une droite) par sa polaire (resp son ple) par rapport au
cercle C.
On tape :
polaire_reciproque(cercle(0,1),[point((1+i)/2),
droite(1,-1+i)])
On obtient :
[pnt([[2,2*i],0]),pnt(1+2*i,0)] et dessine cette
droite et ce point

9.21

Les lieux et les enveloppes

9.21.1

Les lieux : locus lieu

lieu permet de tracer le lieu dun point qui dpend dun autre point qui doit tre
dfini avec la fonction element et lieu permet aussi de tracer lenveloppe dune
droite qui dpend dun point qui doit tre dfini avec la fonction element (voir
aussi enveloppe pour lenveloppe dune famille de droites qui dpendent dun
paramtre 9.21.2).
lieu dun point.
lieu a 2 4 arguments.
Les deux premiers argument sont deux noms de variables :
le premier argument est le nom du point dont on veut connaitre le lieu et ce
point est fonction du deuxime argument,
le deuxime argument est le nom du point qui se dplace sur une courbe C
et qui doit tre dfini par element(C).
On peut prciser ventuellement en troisime argument lintervalle o se
trouve le paramtre t utilis pour le paramtrage de C lorsque le deuxime
argument dcrit C et en quatrime argument prciser la valeur de tstep.
Remarque
Pour connaitre le paramtrage de la courbe C on utilise la commande parameq(C).

784

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D


lieu dessine le lieu du premier argument quand le deuxime argument se
dplace selon ce que lon a spcifi comme argument de element.
Lalgorithme
Si on cherche le lieu de N lorsque M se dplace sur une courbe C, lalgorithme cherche les niveaux qui se trouvent entre le niveau o se trouve la
dfinition de M et celui o se trouve la dfinition de N et choisit un paramtrage rationnel de la courbe o M se dplace, puis effectue les calculs de ces
niveaux intermdiaires, puis trace une courbe paramtre X(t)+i*Y(t)
qui dpend du t dfini dans cfg, puis affiche lquation du lieu par le calcul
de resultant(X(t)-x,Y(t)-y,t).
Il ne faut donc pas avoir dautres instructions lieu dans les instructions intermdiaires.
Conseils
Il faut avoir le moins possible dinstructions entre la dfinition de M et linstruction lieu.
On tape, pour avoir le lieu du centre de gravit G du triangle de sommets A
point(-1), B point(1) et P lorsque P dcrit la droite dquation y = 1 :
P:=element(droite(i,1+i))
G:=isobarycentre(-1,1,P)
lieu(G,P)
On obtient :
La droite parallle laxe des x passant par i/3
Attention
Il faut rgler correctement le paramtre t, cest dire les valeurs t- et t+
de la fentre de configuration graphique pour avoir le lieu entirement ! ! !
On tape, pour avoir le lieu du centre de gravit G du triangle de sommets
A point(-1), B point(1) et P lorsque P dcrit le segment [-3+i ; 3+i]. Pour
connaitre le paramtrage de la droite d:=droite(i,1+i) on utilise parameq(d) :
d:=droite(i,1+i):;parameq(d)
On obtient comme paramtrage :
t+i
P:=element(d)
G:=isobarycentre(-1,1,P)
lieu(G,P,t=-3..3)
plotparam(t+i,t=-3..3);triangle(-1,1,P)
On obtient comme lieu :
Le segment [-1+i/3; 1+i/3]
On peut prciser la valeur de tstep en quatrime argument, on tape :
lieu(G,P,t=-3..3,tstep=0.1)
enveloppe dune droite fonction dun point qui se dplace sur une courbe.
lieu a comme arguments deux noms de variables : le premier argument
est le nom de la droite dont on veut connaitre lenveloppe et cette droite est
fonction du deuxime argument. Le deuxime argument est le nom du point
qui se dplace et qui doit tre dfini avec la fonction element.
lieu dessine lenveloppe du premier argument quand le deuxime argument se dplace selon ce que lon a spcifi comme argument de element.
On tape, pour avoir le lenveloppe de la mdiatrice de F H lorsque H dcrit

9.21. LES LIEUX ET LES ENVELOPPES

785

la droite dquation x = 0 :
F:=point(1)
H:=element(droite(x=0))
d:=mediatrice(F,H)
lieu(d,H)
On obtient :
La parabole de foyer F et de directrice laxe des
y dont lquation est 2*x-y^2-1=0
enveloppe dune droite donne par une quation dpendant dun paramtre
(voir aussi la commande enveloppe 9.21.2),
Dans ce cas, il faut dire que la paramtre est laffixe dun point de la droite
y = 0.
Par exemple, enveloppe dune famille de droites dquation y + x tan(t)
2 sin(t) = 0 lorsque t R. (cf ??)
On tape :
H:=element(droite(y=0));
D:=droite(y+x*tan(affixe(M))-2*sin(affixe(M)))
lieu(D,H)
On obtient :
Lastroide dquation paramrique
2*cos(t)^3+2*i*sin(t)^3
Si on veut lenveloppe lorsque t = 0.., on tape :
lieu(D,H,t=0..pi)
On obtient :
La partie au dessus de y = 0 de lastroide
dquation paramrique 2*cos(t)^3+2*i*sin(t)^3
On peut aussi chercher lintersection de D et de E (voir leur dfinition cidessous) pour avoir lquation paramtrique du lieu.
D:=y+x*tan(t)-2*sin(t)
E:=diff(D,t)
M:=linsolve([D=0,E=0],[x,y])
P:=plotparam(affixe(M))
On obtient :
Lastroide dquation paramrique
2*cos(t)^3+2*i*sin(t)^3
en effet simplify(M) renvoie :
[2*cos(t)^3,2*sin(t)^3]

9.21.2

Les enveloppes : envelope enveloppe

enveloppe a 2 arguments : une expression Xpr dpendant de 3 variables x, y, t


(resp u, v, t) et t (resp le vecteur [u, v, t]).
Les equations Xpr = 0 sont considres comme les quations de courbes de paramtre t.
enveloppe renvoie lenveloppe de ces courbes lorsque t varie.
On tape :
enveloppe(y+x*tan(t)-2*sin(t),t)

786

CHAPITRE 9. LES FONCTIONS DE GOMTRIE 2-D

On obtient :
le dessin dune astrode
On tape :
enveloppe(v+u*tan(t)-3*sin(t),[u,v,t))
On obtient :
le dessin dune astrode
Remarque Si on a une famille de droites d qui dpendent dun paramtre a, on
peut utiliser soit enveloppe(equation(d,a)) soit la commande lieu (voir
9.21.1).
Voici un exemple simple : enveloppe de la tangente un cercle.
On tape :
c:=cercle(0,2):;
assume(a:=1);
A:=element(c,a);
d:=tangente(cercle(0,2),A);
Puis soit :
enveloppe(equation(d),a)
soit :
lieu(d,A)

9.21.3

La trace dun objet gomtrique : trace

trace a comme arguments un objet gomtrique qui dpend ou non dun


paramtre (voir aussi trace dune matrice 6.46.3).
trace dessine la trace de cet objet gomtrique lorsquon fait varier le paramtre
ou lorsquon fait bouger cet objet gomtrique en mode Pointeur.
Exemple Trouver le lieu gomtrique des points du plan quidistants dune droite
D et dun point F . Pour cela on construit un point H sur la droite D et la droite T
perpendiculaire D en H. M de T quidistant de F et de H.
On ouvre un niveau de gomtrie (Alt+g), puis on tape les instructions suivantes
en mettant une instruction par ligne.
On tape :
A:=point(-3-i);
B:=point(1/2+2*(i));
D:=droite(A,B,couleur=0);
F:=point(4/3,1/2,couleur=0);
assume(a=[0.7,-5,5,0.1]);
H:=element(D,a)
T:=perpendiculaire(H,D)
M:=inter_unique(mediatrice(H,F),T);
trace(M);
puis on fait bouger le curseur a et on obtient la trace de M.
Remarque Pour effacer les traces ou pour rajouter des traces ou pour les activer
ou les desactiver il faut utiliser le menu Trace du bouton M situ droite de lcran
de gomtrie.

Chapitre 10

Les fonctions de gomtrie 3-d


10.1

Gnralits

Les graphes ou les dessins de la gomtrie 3-d se font dans un cran graphique
3-d qui souvre automatiquement en rponse dune commande graphique 3-d.
Les dessins de la gomtrie 3-d se font en gnral dans un cran de gomtrie
3-d qui est un cran graphique muni dun diteur de commandes et dune barre de
menus at que lon ouvre avec Alt+h.
Si on clique dans la fentre graphique avec la souris, en dehors du paralllpipde
servant la reprsentation, on peut faire tourner les axes x, y ou z, soit avec les
touches x, X, y, Y, z, Z, soit en bougeant la souris sans relacher son bouton. Cela
modifie laxe de vision (axe passant par lobservateur et de vecteur directeur la direction de la vise de lobjet) et le plan de vision (plan perpendiculaire laxe de
vision dont lquation est inscrite en haut de lcran). Le plan de vision est matrialis par son intersection avec le paralllpipde servant la reprsentation, ces
droites dintersection sont dessine en pointill.
On peut aussi translater le plan de vision, le long de laxe de vision grce la molette de la souris : les plans successifs sont obtenus par une translation de vecteur
parallle laxe de vision.
On peut se servir dattributs pour faire une reprsentation graphique 3-d comme la
couleur, lpaisseur, les lignes en pointill pour cela voir 9.3. Mais, les points ont
toujours la forme dun carr et il faut mettre une epaisseur dau moins 3 si on veut
le voir (point_width=3).
On peut faire des dessins en perspective ou en repre orthonorm (en cochant
Proj_ortho dans la configuration graphique (bouton cfg)), les surfaces sont
transparentes ou non et peuvent tre claires par 8 spots que lon peut placer en
diffrents endroits reprs par leur coordonnes homognes (on configure ses spots
avec les boutons l0,l1..l7 situs dans la configuration graphique).
Ces dessins sont interactifs : on peut faire bouger, avec la souris, les points situs
dans le plan de vision, et aussi dplacer ces points, avec la molette de la souris, sur
une parallle laxe de vision .
noter que lon peut aussi faire un zoom-in ou un zoom-out laide des boutons in et out (voir 3.4).
Si dans la configuration du graphique, on coche hidden3d, la surface sera
trace sans dessiner les lignes qui sont caches et si on veut voir les lignes caches
on dcoche hiden3d (voir aussi 1.6.2).
787

788

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Pour la traduction Latex de lcran 3-d on se reportera la section 1.10.5.

10.2

Les angles dEuler

Les angles dEuler sont utiliss pour modifier le repre de visualisation. Rappel Soient deux repres : lancien (Oxyz) et le nouveau (OXY Z).
Soit Ou lintersection du plan (OY, OZ) avec le plan (Ox, Oz) que lon oriente
arbitrairement.
Soient :

Ra la rotation daxe Oy et dangle a = (Oz, Ou) qui transforme Ox en Ov
et Oz en Ou,

Rb la rotation daxe Ou et dangle b = (Ov, OX) qui transforme Ov en
OX et Oy en Ow,

Rc la rotation daxe OX et dangle c = (Ou, OZ) qui transforme Ow en
OY et Ou en OZ.
On dfinit compltement la mise en place de (OXY Z) par rapport (Oxyz) en
donnant les angles a,b,c de (OXY Z) par rapport (Oxyz) et en effectuant la
composition de ces trois rotations : Rc@Rb@Ra.
Les angles dEuler sont :

a = (Oz, Ou),

b = (Ov, OX),

c = (Ou, OZ).
Les dessins de la gomtrie 3-d se font en choissisant comme repre Oxyz,
Ox horizontal dirig vers la droite, Oy vertical dirig vers le haut et laxe des z qui
pointe vers vous.
Les mesures en degr de a, b, c sont mises dans ry, rz, rx.
Selon lorientation de Ou, les valeurs de a, b, c ne sont pas uniques :
a, b, c et a + 180, 180 b, c + 180 mettent en place le mme repre OXY Z,
Lorsque b est un angle droit, cest dire que laxe OX et laxe Oy ont le mme
support on na pas non plus unicit :
a, 90, c et a + c, 90, 0 mettent en place le mme repre OXY Z et
a, 90, c et a c, 90, 0 mettent en place le mme repre OXY Z.
On peut donc choisir, langle b dans ]90, 90[ et les angles a et c dans ]180, 180]
ou bien b dans 90, 90 c = 0 et a dans ] 180, 180].

10.3

Les axes

10.3.1

Tracer les vecteurs unitaires : vecteur_unitaire_Ox_3d


Ox_3d_unit_vector, vecteur_unitaire_Oy_3d Oy_3d_unit_vector
vecteur_unitaire_Oz_3d Oz_3d_unit_vector

vecteur_unitaire_Ox_3d(), Ox_3d_unit_vector() trace le vecteur


unitaire de laxe des x de cran de gomtrie 3-d.
vecteur_unitaire_Oy_3d(), Oy_3d_unit_vector() trace le vecteur
unitaire de laxe des y de cran de gomtrie 3-d.
vecteur_unitaire_Oz_3d(), Oz_3d_unit_vector() trace le vecteur
unitaire de laxe des z de cran de gomtrie 3-d.

10.3. LES AXES

789

Vous pouvez effacer les axes (resp les faire rapparaitre) en cochant (resp dcochant) Montrer les axes avec le bouton cfg de lcran de gomtrie.
Ces commandes nont pas de paramtre. On peut toutefois rajouter une lgende
avec la commande legende
On tape :

vecteur_unitaire_Ox_3d(),legende(point([1,0,0]),"i",vert)
On obtient :
Le vecteur unitaire de laxe des x de cran de
gomtrie 3-d avec i crit en vert
On tape :

vecteur_unitaire_Oy_3d(),legende(point([0,1,0]),"j",vert)
On obtient :
Le vecteur unitaire de laxe des y de cran de
gomtrie 3-d avec j crit en vert
On tape :

vecteur_unitaire_Oz_3d(),legende(point([0,0,1]),"k",vert)
On obtient :
Le vecteur unitaire de laxe des z de cran de
gomtrie 3-d avec k crit en vert

10.3.2

Tracer un repre : repere_3d frame_3d

repere_2d() frame_2d() trace le repre de cran de gomtrie 2-d.


Vous pouvez effacer les axes (resp les faire rapparaitre) en cochant (resp dcochant) Montrer les axes avec le bouton cfg de lcran de gomtrie.
Ces commandes nont pas de paramtre.
On tape :
repere_3d()
On obtient :
Le repre de cran de gomtrie 3-d

790

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.4

Les points

10.4.1

Dfinir un point 3-d : point

Voir aussi : 10.4.1 pour la gomtrie plane.


Pour obtenir un point il suffit dtre en mode point et de cliquer dans le paralllpipde servant la reprsentation.
On peut aussi utiliser la commande point :
point, en gomtrie 3-d, a comme argument 3 nombres rels ou une liste de 3
nombres rels [xa,ya,za].
point([xa,ya,za]) dfinit le point de coordonnes [xa,ya,za].
On tape :
point(1,2,5)
Ou
point([1,2,5])
On obtient :
Le trac du point de coordonnes [1,2,5]

10.4.2

Dfinir un point 3-d au hasard : point3d

point3d a comme argument une squence de noms de points.


point3d dfinit au hasard, les coordonnes entires (entre -5 et +5) des points
3-d donns en argument.
On tape :
point3d(A,B,C)
Puis on tape :
plan(A,B,C)
On obtient :
Le trac du plan ABC

10.4.3

Un des points dintersection de deux objets gomtriques : single_inter


line_inter inter_unique inter_droite

Voir aussi : 9.9.5 pour la gomtrie plane.


inter_unique ou inter_droite a 2 ou 3 arguments qui sont deux objets
gomtriques et ventuellement un 3ime argument qui est soit un point soit une
liste de points.
inter_unique renvoie lun des points dintersection de ces deux objets gomtriques. Si on a mis un point A comme troisime argument inter_unique
renvoie le point dintersection le plus proche de A et si on a mis une liste de points
L comme troisime argument inter_unique renvoie le point dintersection qui
ne se trouve pas dans la liste L.
On tape :

10.4. LES POINTS

791

A:=inter_unique(plan(point(0,1,1),point(1,0,1),point(1,1,0)),droite(point(0,0
On tape :
coordonnees(A)
On obtient :
[2/3,2/3,2/3]
On tape :
B:=inter_unique(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)))
coordonnees(B)
On obtient :
[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))]
On tape :

B1:=inter_unique(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)),poi
coordonnees(B1)
On obtient :
[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))]
On tape :
B1:=inter_unique(sphere(point(0,0,0),1),droite(point(1,0,0),point(1,1,1)))
coordonnees(B1)
On obtient :
[1,0,0]
On tape :

B1:=inter_unique(sphere(point(0,0,0),1),droite(point(1,0,0),point(1,1,1)),[po
coordonnees(B1)
On obtient :
[1/3,2/3,2/3]

792

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.4.4

Les points dintersection de deux objets gomtriques : inter

Voir aussi : 9.9.6 pour la gomtrie plane.


inter a 2 arguments qui sont deux objets gomtriques.
inter renvoie la liste des points (ou la courbe) dintersection de ces deux objets
gomtriques.
On tape :

LA:=inter(plan(point(0,1,1),point(1,0,1),point(1,1,0)),droite(point(0,
coordonnees(LA)
On obtient :
[[2/3,2/3,2/3]]
On tape :
LB:=inter(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)))
coordonnees(LB)
On obtient :

[[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))],[-(1/(sqrt(3))),-(1/(sqrt(3))),
On tape :
coordonnees(LB[0])
On obtient :
[1/(sqrt(3)),1/(sqrt(3))]
On tape :
coordonnees(LB[1])
On obtient :
[-(1/(sqrt(3))),-(1/(sqrt(3))),-(1/(sqrt(3)))]
On tape :

C:=inter(sphere(point(0,0,0),1),droite(point(0,0,0),point(1,1,1)),poin
coordonnees(C)
On obtient :
[1/(sqrt(3)),1/(sqrt(3)),1/(sqrt(3))]
On tape :

LB:=inter(sphere(point(0,0,0),1),plan(point(0,0,0),point(1,0,0),point(
On obtient :
un cercle

10.4. LES POINTS

10.4.5

793

Le milieu dun segment : midpoint milieu

Voir aussi : 9.9.8 pour la gomtrie plane.


milieu, en gomtrie 3-d, a comme argument 2 points ou une liste de 2 points.
milieu renvoie et dessine le point milieu du segment dfini par ces deux points.
On tape :
milieu(point(1,4,0),point(1,-2,0))
On obtient :
Le point(1,1,0) est trac

10.4.6

Lisobarycentre de n points : isobarycenter isobarycentre

Voir aussi : 9.9.9 pour la gomtrie plane.


isobarycentre, en gomtrie 3-d, a comme argument la liste ou la squence
de n points.
isobarycentre renvoie et trace un point qui est lisobarycentre de ces n points.
On tape :
isobarycentre(point(1,4,0),point(1,-2,0))
On obtient :
Le point (1,1,0) est trac

10.4.7

Point dfini comme barycentre de n points : barycenter barycentre

Voir aussi : 9.9.10 pour la gomtrie plane et 6.12.10.


barycentre ou barycenter, , en gomtrie 3-d, a comme argument des listes
de longueur 2 (resp une matrice ayant deux colonnes) :
le premier lment de la liste j (resp le jime lment de la premire colonne de
la matrice) contient le point Aj , le deuxime lment de la liste j (resp le jime
lment de la deuxime colonne) contient le coefficient rel j affect Aj .
barycentre ou barycenter renvoie et trace leP
point qui est le barycentre des
points
A
affects
des
coefficients
rels

lorsque
j 6= 0.
j
P j
Si j = 0, barycentre ou barycenter renvoie une erreur.
On tape :
barycentre([point(1,4,0),1],[point(1,-2,0),1])
Ou on tape :
barycentre([[point(1,4,0),1],[point(1,-2,0),1]])
On obtient :
Le point (1,1,0) est trac

794

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.5

Les lignes

10.5.1

Dfinir une droite 3-d : line droite

Voir aussi : 3.10.1 et9.10.1 pour la gomtrie plane.


droite, en gomtrie 3-d, a comme argument deux points ou un point et son
vecteur directeur ou deux quations de plans.
droite renvoie et trace la droite dfinit par ses arguments.
On tape :
droite([0,3,0],point([3,0,3]))
On obtient :
Le trac de la droite passant par les points de
coordonnes [0,3,0] et [3,0,3]
On tape :
droite([0,3,0],[3,0,3])
On obtient :
Le trac de la droite passant par le point de
coordonnes [0,3,0] et de vecteur directeur [3,0,3]
donc passant par le point de coordonnes [3,3,3]
On tape :
droite(x=y,y=z)
On obtient :
Le trac de la droite intersection des plans x=y et
y=z
On tape :
point3d(A,B)
Puis on tape :
droite(A,B)
On obtient :
Le trac de la droite AB
Remarque
droite dfinit une droite oriente :
Lorsque la droite est donne par deux points, son orientation est dfinie par lordre
des points donns en argument. Par exemple droite(A,B) dfinit une droite

oriente par le vecteur AB.


Lorsque la droite est donne par 1 point et son vecteur directeur, son orientation est
dfinie par le vecteur directeur donn en argument. Par exemple droite(A,[u1,u2,u3])
dfinit une droite oriente par le vecteur [u1, u2, u3].
Lorsque la droite est donne par deux quations de plans, son orientation est dfinie par le produit vectoriel des normales aux plans (en mettant les quations des
plans sous la forme " membredegauche-membrededroite=0" on dtermine les normales orientes de ces plans). Par exemple droite(x=y,y=z) est oriente par
cross([1,-1,0],[0,1,-1])=[1,1,1].

10.5. LES LIGNES

10.5.2

795

Dfinir une droite oriente en 3-d : line droite

Voir aussi : 9.10.1 pour la gomtrie plane.


droite, en gomtrie 3-d, a comme argument deux points ou deux quations de
plans : a*x+by+cz+d=0 et a*x+by+cz+d=0.
Attention lordre des arguments que lon donne droite est important et un ordre
diffrent change lorientation !
Si la droite est dfinie par deux points, ces points orientent la droite selon leur position dans les arguments. Par exemple droite(A,B) dfinit une droite oriente

par le vecteur AB.


Si la droite est dfinie par deux quations, on crit ces quations sous la forme
"membre_de_gauche-membre_de_droite=0" pour avoir les quations sous la forme
a*x+by+c=0 et a*x+by+cz+d=0. Alors, le vecteur orientant la droite est
le produit vectoriel des 2 vecteurs normaux aux 2 plans definis par les deux quations cest dire le vecteur orientant est cross([a,b,c],[a,b,c]). Par
exemple droite(x=2*y,y=3*z) est oriente par cross([1,-2,0],[0,1,-3])=[6,3,1]
et
droite(y=3*z,x=2*y) est oriente par cross([0,1,-3],[1,-2,0])=[-6,-3,-1]
.

10.5.3

La demi-droite en 3-d : half_line demi_droite

Voir aussi : 9.10.2 pour la gomtrie plane.


demi_droite, en gomtrie 3-d, a comme argument 2 points.
demi_droite renvoie et trace la demi-droite dorigine le premier argument est
passant par le deuxime argument.
On tape :
demi_droite(point(0,0,0),point(1,1,1))
On obtient :
La demi-droite dorigine O, passant par le
point(1,1,1)

10.5.4

Le segment en 3-d : segment

Voir aussi : 9.10.3 pour la gomtrie plane.


segment, en gomtrie 3-d, a comme argument 2 points.
segment renvoie et trace le segment dfini par les deux arguments.
On tape :
segment(point(0,0,0),point(1,1,1))
On obtient :
Le segment reliant O au point(1,1,1)

796

10.5.5

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Le vecteur en 3-d : vecteur

Voir aussi : 9.10.5 pour la gomtrie plane.


vecteur, en gomtrie 3-d, a comme arguments soit :
une liste reprsentant les coordonnes dun point A.

vecteur dfinit et dessine le vecteur OA o O est lorigine du repre.


deux points A, B ou deux listes reprsentant les coordonnes de ces points.

vecteur dfinit et dessine le vecteur AB


un point A (ou une liste reprsentant les coordonnes de ce point) et un
vecteur V (dfinition rcursive).

vecteur dfinit et dessine le vecteur AB tel que AB = V .


On tape :
vecteur([1,2,3])
On obtient :
Le trac du vecteur dorigine [0,0,0] et dextrmit
[1,2,3]
On tape :
vecteur(point([-1,0,0]),point([0,1,2]))
Ou on tape :
vecteur([-1,0,0],[0,1,2])
On obtient :
Le trac du vecteur dorigine [-1,0,0] et dextrmit
[0,1,2]
On tape :
V:=vecteur([-1,0,0],[0,1,2])
On tape :
vecteur(point([-1,2,0]),V)
Ou on tape :
vecteur([-1,2,0],V)
On obtient :
Le trac du vecteur dorigine [-1,2,0] et dextrmit
[0,3,2]
Remarque
En calcul formel, on travaille sur la liste des coordonnes des vecteurs que lon
obtient avec la commande coordonnees (cf 10.12.4).

10.5. LES LIGNES

10.5.6

797

Plan et droites parallles : parallel parallele

Voir aussi : 9.10.6 pour la gomtrie plane.


parallele, en gomtrie 3-d, renvoie et dessine une droite ou un plan selon ses
arguments. Si ses arguments sont :
un point A et 1 droites d, parallele(A,d) renvoie et dessine la droite
parallle la droite d passant par le point A,
une droite dd et une droite d non parallles parallele(dd,d) renvoie et
dessine le plan parallle la droite d passant par la droite dd,
un point A et un plan P , parallele(A,P) renvoie et dessine le plan
parallle au plan P passant par le point A,
un point A et 2 droites d et dd non parallles, parallele(A,d,dd) renvoie et dessine le plan parallle aux droites d et dd passant par le point A.
On tape :

parallele(point(1,1,1),droite(point(0,0,0),point(0,0,1)))
On obtient :
La droite dquation x=1,y=1 est trace
On tape :

parallele(droite(point(1,0,0),point(0,1,0)),droite(point(0,0,0),point(0,0,1))
On obtient :
Le plan dquation x+y-1=0 est trac
On tape :

parallele(point(0,0,0),plan(point(1,0,0),point(0,1,0),point(0,0,1)))
On obtient :
Le plan dquation x+y+z=0 est trac
On tape :

parallele(point(1,1,1),droite(point(0,0,0),point(0,0,1)),droite(point(1,0,0),
On obtient :
Le plan dquation x+y=2 est trace

798

10.5.7

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Plans (ou droites) perpendiculaires : perpendicular perpendiculaire

Voir aussi : 10.5.8 et, pour la gomtrie plane 9.10.7.


perpendiculaire, en gomtrie 3-d, renvoie et dessine une droite (resp un
plan) si le 2-ime argument est une droite (resp un plan).
Plus prcisemment, si ses arguments sont :
un point A et une droite d, perpendiculaire(A,d) renvoie et dessine
la droite perpendiculaire la droite d et passant par A,
une droite dd et un plan P , perpendiculaire(dd,P) renvoie et dessine le plan perpendiculaire au plan P et passant par dd.
On tape :
perpendiculaire(point(0,0,0),droite(point(1,0,0),point(0,1,0)))
On obtient :
La droite dquation y=x, z=0
On tape :

perpendiculaire(droite([0,0,0],[1,1,0]),plan(point(1,0,0),point(0,1,0)
On obtient :
Le plan dquation x=y

10.5.8

Droite orthogonale un plan et plan orthogonal une droite :


orthogonal

Voir aussi : 10.5.7 et, pour la gomtrie plane 9.10.7.


orthogonal, en gomtrie 3-d, renvoie et dessine une droite (resp un plan) si le
2-ime argument est un plan (resp une droite). Plus prcisemment, si ses arguments
sont :
une droite dd et une droite d, orthogonal(dd,d) renvoie et dessine un
plan orthogonal la droite d et passant par dd,
un point A et un plan P , orthogonal(A,P) renvoie et dessine une droite
orthogonale au plan P et passant par A.
On tape :
orthogonal(point(0,0,0),droite(point(1,0,0),point(0,1,0)))
On obtient :
Le plan dquation y=x
On tape :
orthogonal(point(0,0,0),plan(point(1,0,0),point(0,1,0),point(0,0,1)))
On obtient :
La droite dquation x=y=z

10.6. LES PLANS

10.5.9

799

La perpendiculaire commune deux droites 3-d : common_perpendicular


perpendicu- laire_commune

perpendiculaire_commune a comme argument deux droites D1 et D2.


perpendiculaire_commune(D1,D2) dessine la perpendiculaire commune
des droites D1 et D2.
On tape :
D1:=droite([1,1,0],[0,1,1]);
D2:=droite([0,-1,0],[1,-1,1]);
Puis on tape :
perpendiculaire_commune(D1,D2)
On obtient :
La perpendiculaire commune aux deux droites D1 et D2
Si on tape :
d:=perpendiculaire_commune(D1,D2);0
On obtient :
expr("pnt(pnt[line[point[1,0,-1],point[-1/3,-2/3,-1/3]],56,"d"])",0),0
Ce qui veut dire que la perpendiculaire commune D1 et D2 passe par les points
[1,0,-1] et [-1/3,-2/3,-1/3].
Puis on tape :
equation(d)
On obtient :
2/3-2*x/3+4*y/3=0,-4/3-8*x/9-4*y/9-20*z/9=0

10.6

Les plans

10.6.1

Le plan : plane plan

plan a comme argument soit trois points, soit un point et une droite, soit son quation cartsienne.
plan(A,B,C) ou plan(A,droite(B,C)) (resp plan(a*x+b*y+c*z+d=0))
trace le plan ABC (resp le plan dquation a*x+b*y+c*z+d=0) dans lespace 3d.
On tape :
plan([0,0,5],[0,5,0],[5,0,0])
Ou on tape :
plan(x+y+z=5)

800

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Ou on tape :
plan([0,0,5],droite([0,5,0],[5,0,0]))
On obtient :
Le plan dquation x+y+z=5

10.6.2

Le plan mdiateur : perpen_bisector mediatrice

Voir aussi : 9.10.11 pour la gomtrie plane.


mediatrice, en gomtrie 3-d, a comme argument un segment ou deux points
A et B.
mediatrice(A,B) trace le plan mdiateur du segment (A,B).
On tape :
mediatrice(point([0,0,0]),point([4,4,4]))
Ou on tape :
mediatrice(segment([0,0,0],[4,4,4]))
On obtient :
Le plan mdiateur du segment [0,0,0],[4,4,4]

10.6.3

Le plan tangent : tangent

Voir aussi : 9.10.8 pour la gomtrie plane et 3.10.5 pour les tangentes un
graphe.
tangent a comme argument un objet gomtrique G et un point A de G.
tangent dessine le plan tangent G passant par A.
Lorsque G est un graphe, A peut tre soit un point de G, soit la liste des coordonnes
du projet sur x0y du point de contact.
On tape :
S:=sphere([0,0,0],3)
Puis on tape :
tangent(S,[2,2,1])
On obtient :
Le plan tangent la surface sphre S au point [2,2,1]
On tape :
G:=plotfunc(x^2+y^2,[x,y])
Puis on tape :
tangent(G,[2,2])
Ou on tape car [2,2] est le projet du point [2,2,8] qui se trouve sur le graphe
z = x2 + y 2 (8 = 22 + 22 ) :
tangent(G,point([2,2,8]))
On obtient :
Le plan tangent la surface z = x2 + y 2 au point [2,2,8]

10.7. LES TRIANGLES DANS LESPACE

10.6.4

801

Plan orthogonal une droite : orthogonal

On utilise la commande ortogonal pour avoir un plan orthgonal une droite


ou pour avoir une droite orthgonale un plan (cf 10.5.8)

10.6.5

Plan perpendiculaire un plan : perpendicular perpendiculaire

On utilise la commande perpendiculaire pour avoir un plan perpendiculaire un plan ou pour avoir une droite perpendiculaire une droite (cf 10.5.7)

10.7

Les triangles dans lespace

Le principe est de rajouter, si necessaire, un paramtre pour dfinir le plan du


triangle et dfinir aussi lorientation de ce plan. Pour la gomtrie plane voir 9.11.

10.7.1

Le triangle quelconque dans lespace : triangle

Voir aussi : 9.11.2 pour la gomtrie plane.


triangle, en gomtrie 3-d, a comme arguments : 3 points triangle renvoie
et trace le triangle ayant pour sommets ces 3 points.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
C:=point(0,3,0)
Puis on tape :
triangle(A,B,C)
On obtient :
Le triangle ABC

10.7.2

Le triangle isocle dans lespace : isosceles_triangle triangle_isocele

Voir aussi : 9.11.3 pour la gomtrie plane.


triangle_isocele, en gomtrie 3-d, a trois ou quatre arguments.
Description des arguments :
- si il a trois arguments, ce sont : 3 points (les 2 premiers sommets A et B du
triangle) et le troisime argument est soit un point P , soit une liste forme par un
point P et un rel c qui dsigne la mesure en radians (ou en degrs) de langle


(AB, AC), langle (AB, AP ) tant positif.
Le point P dfinit le plan du triangle ainsi que lorientation de ce plan pour que

langle (AB, AP ) soit positif.
triangle_isocele(A,B,P) renvoie et trace dans le plan ABP orient par P

(langle (AB, AP ) est positif) le triangle ABC isocle de sommet A (AB = AC)


et tel que langle (AB, AC) = (AB, AP ), sans dfinir le point C).
On tape :

802

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D


A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)

Puis on tape :
triangle_isocele(A,B,P)
Dans le plan ABP, le triangle isocle de sommets AB,


dangle (AB, AC) = (AB, AP )
triangle_isocele(A,B,[P,c]) renvoie et trace dans le plan ABP

orient par P (langle (AB, AP ) est positif) le triangle ABC isocle de sommet

A (AB = AC) et tel que langle (AB, AC) = c radians (ou degrs), sans dfinir
le point C).
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
triangle_isocele(A,B,[P,3*pi/4])
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Dans le plan ABP, le triangle isocle de sommets AB,

dangle (AB, AC) = 3 pi/4
- si il a quatre arguments, le dernier argument est le nom dune variable qui servira
dfinir le troisime sommet.
On tape :
triangle_isocele(A,B,[P,3*pi/4],C)
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Dans le plan ABP, le triangle isocle de sommets AB,

dangle (AB, AC) = 3 pi/4
On tape :
simplify(coordonnees(C))
On obtient :
[(-3*sqrt(2)-3)/2,(-3*sqrt(2)-3)/2,(-3*sqrt(2)+6)/2]

10.7. LES TRIANGLES DANS LESPACE

10.7.3

803

Le triangle rectangle dans lespace : triangle_rectangle

Voir aussi : 9.11.4 pour la gomtrie plane.


triangle_rectangle, en gomtrie 3-d, peut avoir trois ou quatre arguments.
Description des arguments :
- si il a trois arguments, ce sont : 3 points (les 2 premiers sommets A et B du triangle) et le troisime argument est un point P ou une liste forme par un point P
et un rel k non nul.
Le point P dfinit le plan du triangle ainsi que lorientation de ce plan pour que

langle (AB, AP ) soit positif,
triangle_rectangle(A,B,P) renvoie et trace, dans le plan ABP , le
triangle ABC rectangle en A, tel que AC = AP .
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Q:=point(0,0,-3)
Puis on tape :
triangle_rectangle(A,B,P)
On obtient :
Dans le plan ABP , le triangle ABC rectangle en A
tel que AC = AP
triangle_rectangle(A,B,[P,k]) renvoie et trace dans le plan ABP ,
le triangle ABC rectangle en A : ce triangle est direct si k > 0, indirect si
k < 0 et est tel que AC = |k| AB.

Ainsi si langle (BC, BA) = radians (ou degrs), on a tan() = k.
On remarquera que si C est le transform de B dans la similitude de centre
A de rapport |k| et dangle (k/|k|) /2.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Q:=point(0,0,-3)
Puis on tape :
triangle_rectangle(A,B,[P,2])
On obtient :
Dans le plan ABP, le triangle ABC direct,
rectangle en A tel que AC=2*AB
On tape :
triangle_rectangle(A,B,[P,-2])
On obtient :
Dans le plan ABP, le triangle ABC indirect,
rectangle en A tel que AC=2*AB
- si il a quatre arguments, le dernier argument est le nom dune variable qui
servira dfinir le troisime sommet.
On tape :
triangle_rectangle(A,B,[P,2],C)

804

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D


On obtient :
Dans le plan ABP, le triangle rectangle de sommets
ABC
On tape :
simplify(coordonnees(C))
On obtient :
[-(3*sqrt(2)),-(3*sqrt(2)),6*sqrt(2)]

10.7.4

Le triangle quilatral dans lespace : equilateral_triangle


triangle_equilateral

Voir aussi : 9.11.5 pour la gomtrie plane.


triangle_equilateral, en gomtrie 3-d, a trois ou quatre arguments.
Description des arguments :
- si il a trois arguments, ce sont 3 points : les 2 premiers sommets A et B du triangle
et le troisime point dfinit le plan du triangle.
triangle_equilateral(A,B,P) renvoie et trace dans le demi-plan ABP
le triangle quilatral ABC mais sans dfinir le point C.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Q:=point(0,0,-3)
Puis on tape :
triangle_equilateral(A,B,P)
On obtient :
Dans le demi-plan ABP,le triangle quilatral de
sommets A et B
- si il a quatre arguments, le dernier argument est le nom dune variable qui servira
dfinir le troisime sommet On tape :
triangle_equilateral(A,B,P,C)
On obtient :
Dans le demi-plan ABP, le triangle quilatral de
sommets A et B
On tape :
simplify(coordonnees(C))
On obtient :
[(-3*sqrt(6)+6)/4,(-3*sqrt(6)+6)/4,(3*sqrt(6)+3)/2]

10.8. LES QUADRILATRES DANS LESPACE

805

On tape :
triangle_equilateral(A,B,Q,D)
On obtient :
Dans le demi-plan ABQ, le triangle quilatral de
sommets A et B
On tape :
simplify(coordonnees(D))
On obtient :
[(3*sqrt(6)+6)/4,(3*sqrt(6)+6)/4,(-3*sqrt(6)+3)/2]

10.8

Les quadrilatres dans lespace

Voir aussi : 9.12 pour la gomtrie plane.


Le principe est de rajouter si necessaire un paramtre pour dfinir le plan du quadrilatre et dfinir aussi lorientation de ce plan.

10.8.1

Le carr dans lespace : square carre

Voir aussi : 9.12.2 pour la gomtrie plane.


carre, en gomtrie 3-d, peut avoir de trois cinq arguments.
Les arguments sont :
- si il a trois arguments ce sont 3 points de lespace : les 2 sommets du carr et le
troisime point dfinit le demi-plan du carr.
carre(A,B,P) renvoie et trace le carr ABCD dans le demi-plan ABP contenant P , mais sans dfinir les points D et C.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Q:=point(0,0,-3)
Puis on tape :
carre(A,B,P)
On obtient :
Le carr de sommets A,B dans le demi-plan ABP
Puis on tape :
carre(A,B,Q)

806

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

On obtient :
Le carr de sommets A,B dans le demi-plan ABQ
- si il a cinq arguments, les 2 derniers paramtres sont le nom de deux variables qui
serviront dfinir les deux autres sommets. On tape :
carre(A,B,P,C,D)
On obtient :
Le carr de sommets A,B,C,D dans le demi-plan ABQ
On tape :
simplify(coordonnees(C))
On obtient :
[3-3*sqrt(1/2),3-3*sqrt(1/2),3*sqrt(2)+3]
On tape :
simplify(coordonnees(D))
On obtient :
[-3*sqrt(2),-3*sqrt(2),3*sqrt(2)]

10.8.2

Le losange dans lespace : rhombus losange

Voir aussi : 9.12.3 pour la gomtrie plane.


losange, en gomtrie 3-d, peut avoir de trois cinq arguments.
Les arguments sont :
si il a trois arguments ce sont : 2 points (les 2 premiers sommets du losange)
et le troisime argument est soit un point P , soit une liste forme par un point
P et un nombre rel a. Le point P dfinit le plan du losange et lorientation
de ce plan.
On a :
- losange(A,B,P) renvoie et trace dans le plan ABP , le losange ABCD
tel que :


AB, AD) = AB, AP ), mais sans dfinir les points C et D.
- losange(A,B,[P,a]) renvoie et trace dans le plan ABP , le losange
ABCD tel que :

AB, AD) = a radians (ou degrs), mais sans dfinir les points C et D.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
losange(A,B,P)
On obtient :

10.8. LES QUADRILATRES DANS LESPACE

807

Le losange de sommets A, B et dangle A gal


BAP , dans le plan ABP
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
losange(A,B,[P,pi/3])
On obtient si on a coch radian dans la configuration du cas (bouton
donnant la ligne dtat) :
Le losange de sommets A, B et dangle A gal
pi/3, dans le plan ABP
si il a quatre ou cinq arguments, les derniers paramtres sont les noms des
variables qui serviront dfinir les derniers sommets.
On tape :
losange(A,B,[P,pi/3],C,D)
On obtient :
Le losange de sommets A, B, C, D et dangle A gal
pi/3, dans le plan ABP
On tape :
simplify(coordonnees(C))
On obtient :
[(-3*sqrt(6)+18)/4,(-3*sqrt(6)+18)/4,(3*sqrt(6)+9)/2]
On tape :
simplify(coordonnees(D))
On obtient :
[(-3*sqrt(6)+6)/4,(-3*sqrt(6)+6)/4,(3*sqrt(6)+3)/2]

10.8.3

Le rectangle dans lespace : rectangle

Voir aussi : 9.12.4 pour la gomtrie plane.


rectangle, en gomtrie 3-d, peut avoir de trois cinq arguments.
Les arguments sont :
- si il a trois arguments ce sont : 2 points (les 2 sommets du rectangle) et le troisime
argument est soit un point P soit la liste forme par un point P et un nombre rel
k non nul.
Le point P dfinit le plan du rectangle et lorientation de ce plan.
rectangle(A,B,P) renvoie et trace dans le plan ABP , le rectangle ABCD
tel que :

AD = AP et (AB, AD) = /2, mais sans dfinir les points C et D.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)

808

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Puis on tape :
rectangle(A,B,P)
On obtient :
Le rectangle de sommets
rectangle(A,B,[P,k]) renvoie et trace dans le plan ABP , le rectangle
ABCD tel que :

AD = |k| AB et (AB, AD) = (k/|k|) /2, mais sans dfinir les points C et
D.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
rectangle(A,B,[P,1/2])
On obtient :
Le rectangle de sommets
- si il a cinq arguments, les 2 derniers paramtres sont les noms de deux variables
qui serviront dfinir les 2 derniers sommets.
On tape :
rectangle(A,B,P,C,D)
On obtient :
Le rectangle de sommets
On tape :
simplify(coordonnees(C))
On obtient :
[(-sqrt(6)+6)/2,(-sqrt(6)+6)/2,sqrt(6)+3]
On tape :
simplify(coordonnees(D))
On obtient :
[(-(sqrt(6)))/2,(-(sqrt(6)))/2,sqrt(6)]

10.8. LES QUADRILATRES DANS LESPACE

10.8.4

809

Le paralllogramme dans lespace : parallelogram parallelogramme

Voir aussi : 9.12.5 pour la gomtrie plane.


parallelogramme, en gomtrie 3-d, a trois arguments ou quatre arguments.
Les arguments sont :
- si il a trois arguments ce sont : trois points les sommets A, B, C du paralllogramme ABCD.
parallelogramme(A,B,C) renvoie et trace dans le plan ABC, le paralllo
gramme ABCD tel que : AD = BC mais sans dfinir le point D.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
C:=point(0,0,3)
On tape :
parallelogramme(A,B,C)
On obtient :
Le paralllogramme ABCD
- si il a quatre arguments le dernier paramtre est le nom dune variable qui servira
dfinir le sommet manquant.
On tape :
parallelogramme(A,B,C,D)
On obtient :
Le paralllogramme ABCD et le point D
On tape :
coordonnees(D)
On obtient :
[-3,-3,0]

10.8.5

Les quadrilatres quelconques dans lespace : quadrilateral


quadrilatere

Voir aussi : 9.12.6 pour la gomtrie plane.


quadrilatere(A,B,C,D), en gomtrie 3-d, renvoie et trace la ligne polygonale ferme (ie un quadrilatre non plan si les points ne sont pas coplanaires)
ABCD.
On tape :
quadrilatere(point(0,0,0),point(0,1,0),point(0,2,2)point(1,0,2))
On obtient :
le quadilatre (de lespace) de sommets les points
donns

810

10.9

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Les polygones dans lespace

Voir aussi : 9.13 pour la gomtrie plane.


Le principe est de rajouter si necessaire un paramtre pour dfinir le plan du polygone et dfinir aussi lorientation de ce plan.

10.9.1

Lhexagone : hexagon hexagone

Voir aussi : 9.13.1 pour la gomtrie plane.


Voir aussi : 9.13.2 pour la gomtrie plane et 10.9.2 pour la gomtrie 3-d.
hexagone, en gomtrie 3-d, a comme 3 ou 7 arguments qui sont 3 points de
lespace suivi ventuellement de 4 noms de variables. Les trois points sont les 2
sommets de lhexagone et le troisime point qui dfinit le plan de lhexagone et
lorientation du plan et les noms de variables dsignent les 4 autres sommets de
lhexagone et servent dfinir les sommets manquants.
hexagone(A,B,P) renvoie et trace lhexagone de sommets A, B dans le demiplan ABP .
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
hexagone(A,B,P)
On obtient :
Dans le demi-plan ABP, un hexagone de sommets A et B
On aurait pu taper :
hexagone(A,B,P,C,D,E,F)
pour dfinir les quatre autres sommets manquants.

10.9.2

Les polygones rguliers dans lespace : isopolygon isopolygone

Voir aussi : 9.13.2 pour la gomtrie plane.


isopolygone, en gomtrie 3-d, a quatre arguments.
Dscription des arguments : Le quatrime argument est un entier n et abs(n) reprsente le nombre de cts de lisopolygone. Selon le signe de n on aura :
n>0
les 3 premiers arguments sont 3 points de lespace : les 2 sommets de lisopolygone et le troisime point qui dfinit le plan de lisopolygone et lorientation du plan.
isopolygone(A,B,P,n) renvoie et trace lisopolygone direct de sommets A, B et ayant n cts dans le plan ABP .
On tape :

10.9. LES POLYGONES DANS LESPACE

811

A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
isopolygone(A,B,P,5)
On obtient :
Dans le demi-plan ABP, un pentagone de sommets A
et B
n<0
les 3 premiers arguments sont 3 points de lespace : le centre et un sommet
de lisopolygone et le troisime point qui dfinit le plan de lisopolygone et
lorientation du plan.
isopolygone(A,B,P,n) renvoie et trace lisopolygone indirect de centre
A et de sommet B et ayant n cts dans le plan ABP .
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
P:=point(0,0,3)
Puis on tape :
isopolygone(A,B,P,-5)
On obtient :
Un pentagone de centre A et de sommet B non situ
dans le demi-plan ABP

10.9.3

Les polygones quelconques dans lespace : polygon polygone

Voir aussi : 9.13.3 pour la gomtrie plane.


polygone, en gomtrie 3-d, a comme argument un squence de points de lespace qui sont les sommets du polygone.
polygone(A,B,C,D,E,F) renvoie et trace le polygone ABCDEF si les points
A, B, C, D, E, F sont dans un mme plan ou sinon trace la ligne polygonale ferme A, B, C, D, E, F, A.
On tape :
A:=point(0,0,0)
B:=point(3,3,3)
C:=point(0,0,3)
D:=point(-3,-3,0)
E:=point(-3,-3,-3)
Puis on tape :
polygone(A,B,C,D,E)
On obtient :
Le polygone ABCDE dans le plan x=y

812

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.9.4

Ligne polygonale dans lespace : open_polygon polygone_ouvert

Voir aussi : 9.13.4 pour la gomtrie plane.


polygone_ouvert, en gomtrie 3-d, a comme argument une squence) de n
points 3-d.
polygone_ouvert renvoie et trace la ligne polygonale ayant pour sommets ces
n points.
On tape :
polygone_ouvert(point(0,0,0),point(0,1,0),point(0,2,2),point(1,0,2))
On obtient :
Une ligne polygonale de sommets les points donns

10.10

Les cercles dans lespace : circle cercle

Voir aussi : 9.14.1 pour la gomtrie plane.


cercle, en gomtrie 3-d, a comme argument :
soit 3 points A,B,C non aligns : les deux premiers points dfinissent un
diamtre du cercle et les trois points dfinissent le plan du cercle.
soit un point A, un vecteur v et un point C non situ sur la droite dfinie par
A et v : le point A est le centre du cercle, le point B:=A+v est un point du
cercle et le plan ABC est le plan du cercle.
noter que dans les 2 cas, le premier et le troisime argument peuvent tre les
coordonnes du point.
On tape :
cercle(point(0,0,1),point(0,1,0),point(0,2,2))
Ou on tape :
cercle([0,0,1],point(0,1,0),point(0,2,2))
Ou on tape :
cercle([0,0,1],point(0,1,0),[0,2,2])
On obtient :
Un cercle de diamtre les points [0,0,1] et [0,1,0]
situs dans le plan x=0
On tape :
cercle(point(0,0,1),[0,1,0],point(0,2,2))
Ou on tape :
cercle([0,0,1],[0,1,0],point(0,2,2))
Ou on tape :
cercle([0,0,1],[0,1,0],[0,2,2])
On obtient :
Un cercle de centre [0,0,1] et passant par le point
[0,1,1] (donc de rayon 1) situs dans le plan x=0

10.11. LES CONIQUES DANS LESPACE

10.11

Les coniques dans lespace

10.11.1

Lellipse dans lespace : ellipse

813

Voir aussi : 9.15.1 pour la gomtrie plane.


ellipse, en gomtrie 3-d, a trois paramtres : ses deux foyers et un de ces points
non align avec les foyers.
ellipse(F1,F2,A) trace lellipse passant par A et de foyers F1 et F2.
On tape :
ellipse(point(-1,0,0),point(1,0,0),point(1,1,1))
On obtient :
Lellipse passant par (1,1,1), de foyers (-1,0,0) et
(1,0,0)

10.11.2

Lhyperbole dans lespace : hyperbola hyperbole

Voir aussi : 9.15.2 pour la gomtrie plane.


hyperbole, en gomtrie 3-d, a trois paramtres : ses deux foyers et un de ces
points non align avec les foyers.
hyperbole(F1,F2,A) trace lhyperbole passant par A et de foyers F1 et F2.
On tape :
hyperbole(point(-1,0,0),point(1,0,0),point(1,1,1))
On obtient :
Lhyperbole passant par (1,1,1), de foyers (-1,0,0) et
(1,0,0)

10.11.3

La parabole dans lespace : parabola parabole

Voir aussi : 9.15.3 pour la gomtrie plane.


parabole, en gomtrie 3-d, a comme paramtre trois points : son foyer F , son
sommet S et un point P de son plan non align avec F et S.
parabole(F,S,P) renvoie et dessine dans le plan F SP , la parabole de foyer
F et de sommet S.
On tape :
parabole(point(0,0,0),point(-1,0,0),point(1,1,1))
On obtient :
La parabole de foyer (0,0,0) et de sommet (-1,0,0)
dans le plan passant par (1,1,1) qui est le plan y=z

814

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.12

Les mesures

10.12.1

Labscisse dun point 3-d : abscissa abscisse

Voir aussi : 9.16.2 pour la gomtrie plane.


abscisse, en gomtrie 3-d, est une fonction ayant comme argument un point
3-d.
abscisse renvoie labscisse dd ce point.
On tape :
abscisse(point([1,2,3]))
On obtient :
1

10.12.2

Lordonne dun point 3-d : ordinate ordonnee

Voir aussi : 9.16.3 pour la gomtrie plane.


ordonnee, en gomtrie 3-d, est une fonction ayant comme argument un point
3-d.
ordonnee renvoie lordonne de ce point.
On tape :
ordonnee(point([1,2,3]))
On obtient :
2

10.12.3

La cote dun point 3-d : cote

cote est une fonction ayant comme argument un point 3-d.


cote renvoie la cote de ce point.
On tape :
cote(point([1,2,3]))
On obtient :
3

10.12.4

Les coordonnes dun point, dun vecteur ou dune droite 3d : coordinates coordonnees

Voir aussi : 9.16.4 pour la gomtrie plane.


coordonnees, en gomtrie 3-d, est une fonction ayant comme argument un
point ou un vecteur ou une droite 3-d.
coordonnees renvoie la liste de labscisse, de lordonne et de la cote du point
ou du vecteur ou renvoie une matrice de 2 lignes qui donnent labscisse, lordonne
et la cote de 2 points de la droite oriente.
On a :

10.12. LES MESURES

815

si le point A a pour coordonnes cartsiennes (xA , yA , zA ),


coordonnees(A) renvoie [xA , yA , zA ],
si le point B a pour coordonnes cartsiennes (xB , yB , zB ),
coordonnees(vecteur(A,B)) ou B-A renvoie
[xB xA , yB yA , zB zA ]

car B-A dsigne les coordonnes du vecteur AB,


si le vecteur V a pour coordonnes cartsiennes (xV , yV , zV ),
coordonnees(V) ou coordonnees(vecteur(A,V)) renvoie
[xV , yV , zV ],
si une droite d est dfinie par deux points A et B,
coordonnees(d) renvoie [coordonnees(A),coordonnees(B)],
si une droite d est dfinie par son quation,
coordonnees(d) renvoie [coordonnees(A),coordonnees(B)]
o A et B sont deux points de la droite d, le vecteur AB ayant mme orientation que d.
On tape :
coordonnees(point([1,2,3]))
Ou on tape :
coordonnees(point(1,2,3))
On obtient :
[1,2,3]
On tape :
coordonnees(vecteur(point([1,2,3]),point([2,4,7])))
Ou on tape :
coordonnees(vecteur(point(1,2,3),point(2,4,7)))
Ou on tape :
coordonnees(vecteur([1,2,3],[2,4,7])))
Ou on tape :
coordonnees(vecteur([1,2,4])))
Ou on tape :
coordonnees(vecteur([1,2,3],vecteur([1,2,4])))
Ou on tape :
point([2,4,7])-point([1,2,3])
On obtient :
[1,2,4]
On tape :

816

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D


d:=droite(point(-1,1,0),point(1,2,3))
coordonnees(d)

On obtient :
[[-1,1,0],[1,2,3]]
On tape :
d:=droite(x-2*y+3=0,6*x+3*y-5*z+3=0)
coordonnees(d)
On obtient :
[[-1,1,0],[9,6,15]]
Attention
coordonnees peut aussi avoir comme argument une squence ou une liste de
points. coordonnees renvoie alors la squence ou la liste des listes des coordonnes de ces points, par exemple :
coordonnees(point([0,1,2]),point([1,2,4]))
renvoie la squence :
[0,1,2],[1,2,4]
et
coordonnees([point([0,1,2]),point([1,2,4])])
renvoie la matrice :
[[0,1,2],[1,2,4]] mais
coordonnees([1,2,4])
renvoie la matrice :
[[1,0],[2,0],[4,0]]
car [1,2,4] est considr comme la liste de 3 points daffixe 1, 2 et 4.

10.12.5

Lquation cartsienne dun objet gomtrique : equation

Voir aussi : 9.16.7 pour la gomtrie plane.


equation permet davoir lquation cartsienne dun objet gomtrique.
Attention ! ! ! il faut auparavant purger les variables x et y en tapant purge(x)
et purge(y).
On tape :
equation(droite(point(0,1,0),point(1,2,3)))
On obtient :
(x-y+1=0,3*x+3*y-2*z=0)
On tape :
equation(sphere(point(0,1,0),2))
On obtient :
x^2+y^2+-2*y+z^2-3=0
qui est lquation de la sphre de centre (0,1,0) et de rayon 2.

10.12. LES MESURES

10.12.6

817

Lquation paramtrique dun objet gomtrique : parameq

Voir aussi : 9.16.8 pour la gomtrie plane.


parameq, en gomtrie 3-d, permet davoir lquation paramtrique fonction du
paramtre t ou des paramtres u et v, dun objet gomtrique.
Attention ! ! ! il faut auparavant purger ces variables en tapant par exemple : purge(t,u,v).
On tape :
parameq(droite(point(0,1,0),point(1,2,3)))
On obtient :
[-t+1,-t+2,-3*t+3]
On tape :
parameq(sphere(point(0,1,0),2))
On obtient :
point[2*cos(u)*cos(v),1+2*cos(u)*sin(v),2*sin(u)]
On tape :
normal(parameq(ellipse(point(-1,1,1),point(1,1,1),
point(0,1,2))))
On obtient :
[sqrt(2)*cos(t),1,sin(t)+1]
On peut vrifier, on tape :
plotparam([sqrt(2)*cos(t),1,sin(t)+1],t=0..2*pi);
F1:=point(-1,1,1);F2:=point(1,1,1);M:=point(0,1,2)
On obtient lellipse, ces 2 foyers F1 et f 2 et le point M sur lellipse.

10.12.7

La longueur dun segment : distance longueur

Voir aussi : 9.17.2 pour la gomtrie plane.


longueur a comme argument deux points (ou deux listes qui sont les coordonnes de ces points).
longueur renvoie la longueur du segment dfini par ces deux points.
On tape :
longueur(point(-1,1,1),point(1,1,1))
Ou on tape :
longueur([-1,1,1],[1,1,1])
On obtient :
2

818

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.12.8

Le carr de la longueur dun segment : distance2 longueur2

Voir aussi : 9.17.4 pour la gomtrie plane.


longueur2 a comme argument deux points (ou deux listes qui sont les coordonnes de ces points).
longueur2 renvoie le carr de la longueur du segment dfini par ces deux points.
On tape :
longueur2(point(-1,1,1),point(1,1,1))
Ou on tape :
longueur2([-1,1,1],[1,1,1])
On obtient :
4

10.12.9

La mesure dun angle : angle

Voir aussi : 9.17.5 pour la gomtrie plane.


angle a comme argument trois points ou deux droites coplanaires ou une droite
et un plan.
angle renvoie la mesure en radians (ou en degrs) de :
soit de langle non orient de sommet le premier argument, le deuxime argument
se trouve sur le premier cot de langle et le troisime argument se trouve sur le
deuxime cot,
soit de langle des deux droites coplanaires
soit de langle de la droite et du plan.
Ainsi angle(A,B,C) dsigne la mesure de langle en radians (ou en degrs) de

(AB, AC).
On tape :
angle((point(0,0,0),point(1,0,0),point(0,0,1)))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
pi/4
On tape :
angle(droite([0,0,0],[1,1,0]),droite([0,0,0],[1,1,1]))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
acos(2/(sqrt(6)))
On tape :
angle(droite([0,0,0],[1,1,0]),plan(x+y+z=0))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
acos(2/(sqrt(6)))

10.13. LES PROPRITS

819

10.13

Les proprits

10.13.1

Savoir si 1 objet gomtrique est sur un objet graphique :


is_element est_element

Voir aussi : 9.19.1 pour la gomtrie plane.


est_element(a,A) teste si lobjet gomtrique a est contenu dans lobjet gomtrique A.
On tape :
P:=plan([0,0,0],[1,2,-3],[1,1,-2])
est_element(point(2,3,-5),P)
On obtient :
1
On tape :
dd:=droite([2,3,-2],[-1,-1,-1])
R:=plan([-1,-1,-1],[1,2,-3],[1,1,-2])
est_element(dd,R)
On obtient :
0

10.13.2

Savoir si des points ou /et des droites sont coplanaires : is_coplanar


est_coplanaire

est_coplanaire teste si une liste ou une squence de points ou de droites sont


coplanaires.
On tape :
est_coplanaire([0,0,0],[1,2,-3],[1,1,-2],[2,1,-3])
On obtient :
1
On tape :
est_coplanaire([-1,2,0],[1,2,-3],[1,1,-2],[2,1,-3])
On obtient :
0
On tape :
est_coplanaire([0,0,0],[1,2,-3],droite([1,1,-2],[2,1,-3]))

820

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

On obtient :
1
On tape :
est_coplanaire(droite([0,0,0],[1,2,-3]),droite([1,1,-2],[2,1,-3]))
On obtient :
1
On tape :
est_coplanaire(droite([-1,2,0],[1,2,-3]),
droite([1,1,-2],[2,1,-3]))
On obtient :
0

10.13.3

Savoir si droites ou /et plans sont parallles is_parallel


est_parallele

Voir aussi : 9.19.11 pour la gomtrie plane.


est_parallele, en gomtrie 3-d, teste si deux droites ou, si une droite et un
plan ou, si deux plans sont parallles.
On tape :
d:=droite([0,0,0],[-1,-1,-1])
dd:=droite([2,3,-2],[-1,-1,-1])
est_parallele(d,dd)
On obtient :
0
On tape :
S:=plan([-1,-1,-1],[1,2,-3],[0,0,0])
est_parallele(S,dd)
ou on tape :
est_parallele(dd,S)
On obtient :
1
On tape :
P:=plan([0,0,0],[1,2,-3],[1,1,-2])
Q:=plan([1,1,0],[2,3,-3],[2,2,-2])
est_parallele(P,Q)
On obtient :
1

10.13. LES PROPRITS

10.13.4

821

Savoir si des droites ou/et plans sont perpendiculaires is_perpendicular


est_perpendiculaire

Voir aussi : 9.19.12 pour la gomtrie plane et 10.13.5 pour lorthogonalit


3-d.
est_perpendiculaire, en gomtrie 3-d, teste si deux droites ou, si une
droite et un plan ou, si deux plans sont perpendiculaires.
En 3-d, deux droites perpendiculaires sont coplanaires et orthogonales.
On tape :
est_perpendiculaire(droite([2,3,-2],[-1,-1,-1]),
droite([1,0,0],[1,2,8]))
On obtient :
0
On tape :
est_coplanaire(droite([2,3,-2],[-1,-1,-1]),
droite([1,0,0],[1,2,8]))
On obtient :
0
On tape :
P:=plan([0,0,0],[1,2,-3],[1,1,-2])
S:=plan([-1,-1,-1],[1,2,-3],[0,0,0])
est_perpendiculaire(P,S)
On obtient :
1
On tape :
dd:=droite([2,3,-2],[-1,-1,-1])
est_perpendiculaire(dd,P)
On obtient :
0

822

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.13.5

Orthogonalit de 2 droites ou 2 sphres : is_orthogonal


est_orthogonal

Voir aussi : 9.19.13 pour la gomtrie plane et 10.13.4 pour la perpendicularit


3-d.
est_orthogonal est une fonction boolenne ayant comme argument deux droites
ou deux sphres ou une droite et un plan ou d eux plans.
est_orthogonal vaut 1 si les deux droites ou les deux sphres (i.e si les plans
tangents en leurs points dintersection sont orthogonaux), ou la droite et le plan ou
les deux plans sont orthogonaux et vaut 0 sinon.
On tape :
est_orthogonal(droite([2,3,-2],[-1,-1,-1]),
droite([1,0,0],[1,2,8]))
On obtient :
1
On tape :
est_orthogonal(droite([2,3,-2],[-1,-1,-1]),
plan([-1,-1,-1],[-1,0,3],[-2,0,0]))
On obtient :
1
On tape :
est_orthogonal(plan([0,0,0],[1,2,-3],[1,1,-2]),
plan([-1,-1,-1],[1,2,-3],[0,0,0]))
On obtient :
1
On tape :
est_orthogonal(sphere([0,0,0],sqrt(2)),
sphere([2,0,0],sqrt(2)))
On obtient :
1

10.13.6

Savoir si 3 points sont aligns : is_collinear est_aligne

Voir aussi : 9.19.2 pour la gomtrie plane.


est_aligne est une fonction boolenne ayant comme argument une liste ou une
squence de points.
est_aligne vaut 1 si les points sont aligns, et vaut 0 sinon.
On tape :
est_aligne([2,0,0],[0,2,0],[1,1,0])

10.13. LES PROPRITS

823

On obtient :
1
On tape :
est_aligne([2,0,0],[0,2,0],[0,1,1])
On obtient :
0

10.13.7

Savoir si 4 points sont cocycliques : is_concyclic est_cocyclique

Voir aussi : 9.19.3 pour la gomtrie plane.


est_cocyclique est une fonction boolenne ayant comme argument une liste
ou une squence de points.
est_cocyclique vaut 1 si les points sont cocycliques, et vaut 0 sinon.
On tape :
est_cocyclique([2,0,0],[0,2,0],[sqrt(2),sqrt(2),0],
[0,0,2],[2/sqrt(3),2/sqrt(3),2/sqrt(3)])
On obtient :
1
On tape :
est_cocyclique([2,0,0],[0,2,0],[1,1,0],[0,0,2],[1,1,1])
On obtient :
0

10.13.8

Savoir si 5 points sont cospheriques : is_cospheric est_cospherique

Voir aussi : 9.19.3 pour la gomtrie plane.


est_cospherique est une fonction boolenne ayant comme argument une liste
ou une squence de points.
est_cospherique vaut 1 si les points sont cospheriques, et vaut 0 sinon.
On tape :
est_cospherique([2,0,0],[0,2,0],[sqrt(2),sqrt(2),0],
[0,0,2],[2/sqrt(3),2/sqrt(3),2/sqrt(3)])
On obtient :
1
On tape :
est_cospherique([2,0,0],[0,2,0],[1,1,0],[0,0,2],[1,1,1])
On obtient :
0

824

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.13.9

Savoir si on a un triangle quilatral : is_equilateral


est_equilateral

Voir aussi : 9.19.5 pour la gomtrie plane.


est_equilateral est une fonction boolenne ayant comme argument trois
points ou un objet gomtrique.
est_equilateral vaut 1 si les trois points forment un triangle quilatral ou
si lobjet gomtrique est un triangle quilatral, et vaut 0 sinon.
On tape :
est_equilateral([2,0,0],[0,0,0],[1,sqrt(3),0])
Ou on tape :
T:=triangle_equilateral([2,0,0],[0,0,0],[1,sqrt(3),0]);
est_equilateral(T)
On obtient :
1
On tape :
est_equilateral([2,0,0],[0,2,0],[1,1,0])
On obtient :
0

10.13.10

Savoir si on a un triangle isocle : is_isosceles est_isocele

Voir aussi : 9.19.6 pour la gomtrie plane.


est_isocele est une fonction boolenne ayant comme argument trois points ou
un objet gomtrique.
est_isocele vaut 1 (resp 2, 3) si les trois points forment un triangle isocle ou
si lobjet gomtrique est un triangle isocle dont le sommet de langle portant les
deux cots gaux est dsign par le premier (resp second, troisime) argument, ou
vaut 4 si les trois points forment un triangle quilatral, ou si lobjet gomtrique
est un triangle quilatral, et vaut 0 sinon.
On tape :
est_isocele([2,0,0],[0,0,0],[0,2,0])
On obtient :
2
On tape :
T:=triangle_isocele([0,0,0],[2,2,0],[2,2,2]);
est_isocele(T)
On obtient :

10.13. LES PROPRITS

825
1

On tape :
est_isocele([1,1,0],[-1,1,0],[-1,0,0])
On obtient :
0

10.13.11

Savoir si on a un triangle rectangle ou si on a un rectangle :


est_rectangle

Voir aussi : 9.19.7 pour la gomtrie plane.


est_rectangle est une fonction boolenne ayant comme argument trois ou
quatre points ou un objet gomtrique.
est_rectangle(A,B,C) vaut 1 (resp 2 ou 3) si les trois points A,B,C forment
un triangle rectangle, langle droit tant dsign par le premier (resp second, troisime) argument ou si lobjet gomtrique est un triangle rectangle,
est_rectangle(A,B,C,D) vaut 1 (resp 2) si les quatre points A,B,C,D sont
coplanaires et forment un rectangle (resp un carr) ou si lobjet gomtrique est un
rectangle (resp un carr), et vaut 0 sinon.
On tape :
est_rectangle([2,0,0],[2,2,0],[0,2,0])
On obtient :
2
On tape :
est_rectangle([2,2,0],[-2,2,0],[-2,-1,0],[2,-1,0])
On obtient :
1

10.13.12

Savoir si on a un carr : is_square est_carre

Voir aussi : 9.19.8 pour la gomtrie plane.


est_carre est une fonction boolenne ayant comme argument quatre points ou
un objet gomtrique.
est_carre vaut 1 si les quatre points sont coplanaires et forment un carr ou si
lobjet gomtrique est un carr, et vaut 0 sinon.
On tape :
est_carre([2,2,0],[-2,2,0],[-2,-2,0],[2,-2,0])
On obtient :
1
On tape :

826

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D


K:=carre([0,0,0],[2,0,0],[0,0,1]);est_carre(K)

K est le carre de sommets [0,0,0],[2,0,0],[2,0,2],[0,0,2] (il est situ dans le plan


[0,0,0],[2,0,0],[0,0,1]).
On obtient :
1
On tape :
est_carre([2,2,0],[-2,2,0],[-2,-1,0],[2,-1,0])
On obtient :
0

10.13.13

Savoir si on a un losange : is_rhombus est_losange

Voir aussi : 9.19.9 pour la gomtrie plane.


est_losange est une fonction boolenne ayant comme argument quatre points
ou un objet gomtrique.
est_losange vaut 1 (rep 2) si les quatre points sont coplanaires et forment un
losange (resp un carr) ou si lobjet gomtrique est un losange (resp un carr), et
vaut 0 sinon.
On tape :
est_losange([2,0,0],[0,1,0],[-2,0,0],[0,-1,0])
On obtient :
1
On tape :

K:=losange([0,0,0],[2,0,0],[[0,0,1],pi/4]);est_losange(K)
K est le losange ABCD de sommets [0,0,0],[2,0,0], [sqrt(2)+2,0,sqrt(2)],[sqrt(2),0,sqrt(2)],
il est situ dans le plan [0,0,0],[2,0,0],[0,0,1] et langle BAD vaut pi/4.
On obtient :
1
On tape :
est_losange([2,2,0],[-2,2,0],[-2,-1,0],[2,-1,0])
On obtient :
0

10.14. LES TRANSFORMATIONS

10.13.14

827

Savoir si on a un paralllogramme : is_parallelogram


est_parallelogramme

Voir aussi : 9.19.10 pour la gomtrie plane.


est_parallelogramme est une fonction boolenne ayant comme argument
quatre points ou un objet gomtrique.
est_parallelogramme vaut 1 (resp 2, 3, 4) si les quatre points sont coplanaires et forment un paralllogramme (resp un losange, un rectangle, un carr) ou
si lobjet gomtrique est un paralllogramme (resp un losange, un rectangle, un
carr), et vaut 0 sinon.
On tape :
est_parallelogramme([0,0,0],[2,0,0],[3,1,0],[1,1,0])
On obtient :
1
On tape :

K:=parallelogramme([0,0,0],[2,0,0],[1,1,0]);est_parallelogramme(K)
K est le paralllogramme ABCD de sommets [0,0,0],[2,0,0],[3,1,0], [1,1,0]. On
tape :
est_parallelogramme([-1,0,0],[0,1,0],[2,0,0],[0,-1,0])
On obtient :
0
Attention
On doit taper :
K:=parallelogramme([0,0,0],[2,0,0],[1,1,0],D);
est_parallelogramme(K[0])
Pour obtenir :
1
car K est une liste compose dun paralllogramme et du point D.

10.14

Les transformations

10.14.1

Gnralits

Les transformations ci-dessous :


translation, rotation, homothetie, similitude, symetrie,
inversion, projection
peuvent toujours tre considres, soit comme des fonctions (les arguments sont les
paramtres servant dfinir la transformation), soit comme agissant sur le dernier

828

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

argument (les premiers arguments sont les paramtres servant dfinir la transformation et lobjet gomtrique transformer est mis comme dernier paramtre).
Lobjet gomtrique transformer peut tre de tout type comme point, droite, plan,
polygone, polydre, cercle (en 3-d un cercle est considr comme une courbe paramtre), courbe paramtre, sphre, surface etc...
Par exemple si P est lobjet gomtrique transformer on peut avoir :
P:=point(1,1,1) ou P:=droite(z=0,x=1) ou P:=plan(z=0) ou P:=sphere(point(1,
ou P:=plotfunc(x2-y2,[x,y]) ou P:=demi_cone([0,0,0],[0,0,1],pi/6)
etc...

10.14.2

La translation : translation

Voir aussi : 9.18.2 pour la gomtrie plane.


translation, en gomtrie 3-d, a un ou deux arguments : le vecteur de translation donn par la liste de ses coordonnes et ventuellement lobjet gomtrique
transformer.
Lorsque translation a un argument, cest une fonction qui agit sur un objet
gomtrique.
On tape :
t:=translation([1,1,1])
Puis :
t(point(1,2,3))
On obtient :
Le point (2,3,4) est trac
Lorsque translation a deux arguments, translation dessine et renvoie le
transform du deuxime argument dans la translation de vecteur le premier argument.
On tape :
translation([1,1,1], point(1,2,3))
On obtient :
Le point (2,3,4) est trac
On tape :
translation([1,1,1],droite([0,0,0],[1,2,3]))
On obtient :
La droite passant par les points (1,1,1) et (2,3,4)

10.14. LES TRANSFORMATIONS

10.14.3

829

La symtrie par rapport un plan, une droite ou un point :


reflection symetrie

Voir aussi : 9.18.3 pour la gomtrie plane.


symetrie, en gomtrie 3-d, a un ou deux arguments : un point ou une droite ou
un plan et ventuellement lobjet gomtrique transformer.
Lorsque symetrie a un argument, cest une fonction qui agit sur un objet gomtrique : quand le premier argument est un point il sagit de la symtrie par rapport
ce point, quand le premier argument est une droite il sagit de la symtrie par rapport cette droite et quand le premier argument est un plan il sagit de la symtrie
par rapport ce plan.
On tape :
s:=symetrie(point(1,1,1))
Puis :
s(point(-1,2,4))
On obtient :
Le point (3,0,-2) est trac
On tape :
sd:=symetrie(droite([1,1,0],[-1,-3,0]))
Puis :
sd(point(-1,2,4))
On obtient :
Le point (3,0,-4) est trac
On tape :
sp:=symetrie(plan([1,1,0],[-1,-3,0],[1,1,1]))
Puis :
sp(point(-1,2,4))
On obtient :
Le point (3,0,4) est trac
Lorsque symetrie a deux arguments, symetrie dessine et renvoie le transform du deuxime argument dans la symtrie dfinie par le premier argument :
quand le premier argument est un point il sagit de la symtrie par rapport ce
point, quand le premier argument est une droite il sagit de la symtrie par rapport
cette droite et quand le premier argument est un plan il sagit de la symtrie par
rapport ce plan.
On tape :
symetrie(point(1,1,1),point(-1,2,4))

830

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

On obtient :
Le point (3,0,-2) est trac
On tape :
symetrie(droite([1,1,0],[-1,-3,0]),point(-1,2,4))
On obtient :
Le point (3,0,-4) est trac
On tape :
sp:=symetrie(plan([1,1,0],[-1,-3,0],[1,1,1]),point(-1,2,3))
On obtient :
Le point (3,0,4) est trac

10.14.4

La rotation : rotation

Voir aussi : 9.18.4 pour la gomtrie plane et 10.5.2 pour dfinir un axe.
rotation, en gomtrie 3-d, a deux ou trois arguments.
Lorsque rotation a deux arguments ce sont : une droite oriente par lordre de
ses arguments ou par le produit vectoriel des normales orientes des plans qui la dfinissent (laxe de rotation) et un rel (la mesure de langle de rotation). rotation
est alors une fonction qui agit sur un objet gomtrique (point, droite etc...)
On tape :
r:=rotation(droite(point(0,0,0),point(1,1,1)),2*pi/3)
Puis :
r(point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point (1,0,0) est trac
Lorsque rotation a trois arguments, ce sont : une droite oriente par lordre de
ses arguments ou par le produit vectoriel des normales orientes des plans qui la
dfinissent (laxe de rotation), un rel (la mesure de langle de rotation) et lobjet
gomtrique transformer ; rotation dessine et renvoie alors le transform du
troisime argument dans la rotation daxe le premier argument et dangle de mesure
le deuxime argument.
On tape :
rotation(droite(point(0,0,0),point(1,1,1)),2*pi/3,
point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :

10.14. LES TRANSFORMATIONS

831

Le point (1,0,0) est trac


On tape :
rotation(droite(point(0,0,0),point(1,1,1)), 2*pi/3,
droite(point(1,0,0),point(0,1,0)))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
La droite passant par (0,1,0) et (0,0,1)

10.14.5

Lhomothtie : homothety homothetie

Voir aussi : 9.18.5 pour la gomtrie plane.


homothetie, en gomtrie 3-d, a deux ou trois arguments : un point (le centre
de lhomothtie), un rel (la valeur du rapport de lhomothtie) et ventuellement
lobjet gomtrique transformer.
Lorsque homothetie a deux arguments, cest une fonction qui agit sur un objet
gomtrique.
On tape :
h:=homothetie(point(0,0,0),2)
Puis :
h(point(0,0,1))
On obtient :
Le point (0,0,2) est trac
Lorsque homothetie a trois arguments, homothetie dessine et renvoie le
transform du troisime argument dans lhomothtie de centre le premier argument et de rapport le deuxime argument.
On tape :
homothetie(point(0,0,0),2,point(0,0,1))
On obtient :
Le point (0,0,2) est trac
On tape :
homothetie(point(0,0,0),2,sqhere(point(0,0,0),1))
On obtient :
La sphre de centre (0,0,0) et de rayon 2

832

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.14.6

La similitude : similarity similitude

Voir aussi : 9.18.6 pour la gomtrie plane et 10.5.2 pour dfinir un axe.
similitude, en gomtrie 3-d, a trois ou quatre arguments : une droite oriente
par lordre de ses arguments ou par le produit vectoriel des normales orientes des
plans qui la dfinissent (laxe de rotation), un rel (la valeur du rapport k de la
similitude), un rel (la mesure a de langle de rotation en radians (ou degrs)) et
ventuellement lobjet gomtrique transformer.
Remarque : si le rapport k est ngatif, langle de la similitude est alors de mesure
a radians (ou degrs).
Lorsque similitude a trois arguments, cest une fonction qui agit sur un objet
gomtrique.
On tape :
s:=similitude(droite(point(0,0,0),point(1,1,1)),
2,2*pi/3)
Puis :
s(point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point (2,0,0) est trac
On tape :
s(sqhere(point(1,0,0),1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
La sphre de centre (0,2,0) et de rayon 2
Lorsque similitude a quatre arguments, similitude dessine et renvoie le
transform du quatrime argument dans la similitude daxe le premier argument de
rapport le deuxime argument et dangle le troisime argument.
On tape :
similitude(droite(point(0,0,0),point(1,1,1)),
2,2*pi/3,point(0,0,1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
Le point (2,0,0) est trac
On tape :
similitude(droite(point(0,0,0),point(1,1,1)),
2,2*pi/3,sqhere(point(1,0,0),1))
On obtient si on a coch radian dans la configuration du cas (bouton donnant
la ligne dtat) :
La sphre de centre (0,2,0) et de rayon 2

10.14. LES TRANSFORMATIONS

10.14.7

833

Linversion : inversion

Voir aussi : 9.18.7 pour la gomtrie plane.


inversion, en gomtrie 3-d, a deux ou trois arguments : un point (le centre de
linversion), un rel (la valeur du rapport de linversion) et ventuellement lobjet
gomtrique transformer.
Lorsque inversion a deux arguments, cest une fonction qui agit sur un objet
gomtrique.
Si inver:=inversion(C,k) et A1:=inver(A), on a CA CA1 = k.
On tape :
inver:=inversion(point(0,0,0),2)
Puis :
On tape :
inver(point(1,2,-2))
On obtient :
Le point (2/9,4/9,-4/9)
On a en effet :
[2/9,4/9,-4/9]*[1,2,-2]=2 et les points (1,2,-2) et (2/9,4/9,-4/9) sont aligns avec le point (0,0,0) centre de lnversion.
On tape
inver(sqhere(point(1,0,0),1))
On obtient :
Le plan dquation x=1
On tape :
inver(sqhere(point(1,0,0),1/2))
On obtient :
La sphre de centre (8/3,0,0) et de rayon 4/3 (elle
passe par les points (4/3,0,0) et (4,0,0))
Lorsque inversion a trois arguments, inversion dessine et renvoie le transform du troisime argument dans linversion de centre le premier argument et de
rapport le deuxime argument.
Si A1:=inversion(C,k,A) on a CA CA1 = k.
On tape :
inversion(point(0,0,0),2,sphere(point(1,0,0),1))
On obtient :
Le plan dquation x=1
On tape :
inversion(point(0,0,0),2,sphere(point(1,0,0),1/2))
On obtient :
La sphre de centre (8/3,0,0) et de rayon 4/3

834

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.14.8

La projection orthogonale : projection

Voir aussi : 9.18.8 pour la gomtrie plane.


projection, en gomtrie 3-d, a un ou deux arguments : un objet gomtrique
et ventuellement un point.
Lorsque projection a un argument, cest une fonction qui agit sur un point et
qui projette ce point sur lobjet gomtrique.
On tape :
p1:=projection(droite(point(0,0,0),point(1,1,1)))
Puis :
p1(point(1,0,0))
On obtient :
Le point (1/3,1/3,1/3) est trac
On tape :
p2:=projection(plan(point(1,0,0),point(0,0,0),
point(1,1,1)))
p2(point(0,0,1))
On obtient :
Le point (0,1/2,1/2) est trac
On tape :
p3:=projection(sqhere(point(1,0,0),1))
p3(point(0,0,1))
On obtient :
Le point (1-sqrt(2)/2,0,sqrt(2)/2) est trac
Lorsque projection a deux arguments, projection dessine et renvoie le
transform du point par la projection orthogonale sur le premier argument.
On tape :
projection(droite(point(0,0,0),point(1,1,1)),point(1,0,0))
On obtient :
Le point (1/3,1/3,1/3)
On tape :
projection(plan(point(1,0,0),point(0,0,0),
point(1,1,1)),point(0,0,1))
On obtient :
Le point (0,1/2,1/2) est trac
On tape :
projection(sqhere(point(1,0,0),1),point(0,O,1))
On obtient :
Le point (1-sqrt(2)/2,0,sqrt(2)/2) est trac

10.15. LES SURFACES

10.15

Les surfaces

10.15.1

Le cne : cone

835

cone a comme argument un point A, une direction v et un rel t.


cone(A,v,t) dessine un demi-cne de sommet A, direction v et de demi-angle
au sommet t.
On tape :
cone([0,1,0],[0,0,1],pi/3)
On obtient :
Le cne daxe parallle 0z passant par [0,1,0] et de
demi-angle au sommet gal /3

10.15.2

Le demi-cne : half_cone demi_cone

demi_cone a comme argument un point A, une direction v et un rel t.


demi_cone(A,v,t) dessine un demi-cne de sommet A, direction v et de
demi-angle au sommet t.
On tape :
demi_cone([0,1,0],[0,0,1],pi/3)
On obtient :
Le demi-cne suprieur daxe parallle 0z passant
par [0,1,0] et de demi-angle au sommet gal /3

10.15.3

Le cylindre : cylinder cylindre

cylindre a comme argument un point A, une direction v et un rel r.


cylindre(A,v,r) dessine un cylindre daxe (A,v) et de rayon r.
On tape :
cylindre([0,1,0],[0,0,1],3)
On obtient :
Le cylindre daxe parallle 0z passant par [0,1,0]
et de rayon 3 (le cercle de base est dans x0y et a
pour equation x2 + (y 1)2 = 9)

10.15.4

La sphre : sphere

sphere a comme argument soit deux points (le diamtre de la sphre) soit un
point et un rel (son centre et son rayon).
sphere(A,B) (resp sphere(A,r)) trace la sphre de diamtre AB (resp centre
A et de rayon r) dans lespace 3-d.
On tape :
sphere([-2,0,0],[2,0,0])

836

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Puis on tape :
sphere([0,0,0],2)
On obtient :
La sphre de centre lorigine et de rayon 2

10.15.5

Surface dfinie par une fonction : funcplot

funcplot a comme argument une expression de deux variables et la liste de ses


variables.
funcplot(f(x,y),[x,y]) dessine la surface z=f(x,y).
On tape :
funcplot(x^2+y^2,[x,y])
On obtient :
Le parabolode z = x2 + y 2

10.15.6

Surface dfinie par une quation paramtrique : paramplot

paramplot a comme arguments la liste forme de lquation paramtrique dune


surface et de la liste des paramtres utiliss.
paramplot([f(u,v),g(u,v),h(u,v)],[u,v]) dessine la surface dquation paramtrique : x=f(u,v),y=g(u,v),z=h(u,v).
On tape :
paramplot([u*cos(v),u*sin(v),u],[u,v])
On obtient :
Le dessin du cne de sommet lorigine, daxe 0z et
contenant le cercle dfinit par x2 + y 2 = 1 et z = 1.

10.16

Les solides

10.16.1

Le cube : cube

cube a comme argument trois points A,B,C.


cube dessine le cube direct de cot AB dont une face est dans le plan(A,B,C).
On tape :
cube([0,0,0],[0,4,0],[0,0,1])
On obtient :
Le cube de sommets [0,0,0],[4,0,0], [0,4,0],[0,0,4]...
On tape :
cube([0,0,0],[0,4,0],[0,0,-1])
On obtient :
Le cube symtrique du prcdent par rapport 0y

10.16. LES SOLIDES

10.16.2

837

Le ttradre : tetrahedron pyramid tetraedre pyramide

tetraedre ou pyramide a 3 ou 4 arguments qui sont les points A,B,C ou les


points A,B,C,D.
tetraedre ou pyramide dessine le ttradre rgulier direct de cot AB dont
une face est dans le plan(A,B,C) quand il y a 3 arguments et la pyramide ABCD
quand il y a 4 arguments.
On tape :
pyramide([-2,0,0],[2,0,0],[0,2,0])
Ou on tape :
tetraedre([-2,0,0],[2,0,0],[0,2,0])
On obtient :
Le tetradre rgulier de sommets
[-2,0,0],[2,0,0],[0,2*sqrt(3),0] et
[0,2*sqrt(3)/3,4*sqrt(6)/3])
On tape :
pyramide([-2,0,0],[2,0,0],[0,2,0],[0,0,2])
Ou on tape :
tetraedre([-2,0,0],[2,0,0],[0,2,0],[0,0,2])
On obtient :
Le ttradre de sommets
[-2,0,0],[2,0,0],[0,2,0],[0,0,2]

10.16.3

Le paralllpipde : parallelepiped parallelepipede

parallelepipede a comme argument quatre points A,B,C,D.


parallelepipede(A,B,C,D) dessine un paralllpipde de cts AB,AC,AD
(les faces sont des paralllogrammes).
On tape :
parallelepipede([0,0,0],[5,0,0],[0,5,0],[0,0,5])
On obtient :
un cube de sommet lorigine et dont 3 faces sont
contenues dans les plans du repre
On tape :
parallelepipede([0,0,0],[3,2,0],[0,3,2],[2,0,3])
On obtient :
Un paralllpipde

838

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.16.4

Le prisme : prism prisme

prisme a comme argument une liste de points [A,B,C,D...] dun mme plan
et un point A1.
prisme([A,B,C,D,..],A1) dessine un prisme de base le polygone A,B,C,D...
et de artes parallles AA1 (les faces sont des paralllogrammes).
On tape :
prisme([[0,0,0],[5,0,0],[0,5,0],[-5,5,0]],[0,0,5])
On obtient :
un prisme de base un paralllogramme et darrtes
verticales

10.16.5

Les polydres : polyhedron polyedre

polyedre a comme argument une squence de points.


polyedre dessine un polydre convexe dont les sommets sont parmi les point de
la squence donne en argument, les autres points se trouvant lintrieur ou sur
les faces du polydre.
On tape :
polyedre([0,0,0],[-2,0,0],[2,0,0],[0,2,0],[0,0,2])
On obtient :
Le tetradre de sommets
[-2,0,0],[2,0,0],[0,2,0],[0,0,2]

10.16.6

Les faces : faces

faces a comme argument un polyedre.


faces dessine et renvoie la liste des faces du polydre.
Une face est une matrice de n lignes et 3 colonnes dont les lignes sont les sommets
de la face.
On tape :

faces(polyedre([0,0,0],[-2,0,0],[2,0,0],[0,2,0],[0,0,2]))[1]
On obtient :
Le dessin dune face et dans lhistorique on a
[[0,0,0],[-2,0,0],[2,0,0],[0,0,2]]

10.16.7

Les artes : line_segments aretes

aretes a comme argument un polygone ou un polyedre.


aretes dessine et renvoie la liste des artes du polydre.
Une arte est un segment.
On tape :

10.17. LES SOLIDES DE PLATON

839

aretes(polyedre([0,0,0],[-2,0,0],[2,0,0],[0,2,0],[0,0,2]))[1]
On obtient :
le dessin du segment (-2,0,0),(2,0,0) et dans
lhistorique on a pnt(pnt[group[[-2,0,0],[2,0,0]],0])

10.17

Les solides de Platon

Pour les construire, on donne le centre, un sommet et un 3me point dfinissant


un plan de symtrie.
Pour acclrer les calculs, il peut tre utile faire seulement des calculs approchs
en utilisant evalf dans largument : on tapera, par exemple :
cube_centre(evalf([0,0,0],[3,2,1],[1,1,0]))

10.17.1

: centered_tetrahedron tetraedre_centre

tetraedre_centre a comme argument trois points A,B,C.


tetraedre_centre dessine un tetradre de centre A, de sommet B et tel que le
plan ABC contient 1 sommet du tetradre.
On tape :
tetraedre_centre([0,0,0],[0,0,5],[0,1,0])
On obtient :
Le tetradre rgulier de centre [0,0,0], de sommet
[0,0,5] et ayant un sommet dans le plan y0z

10.17.2

: centered_cube cube_centre

cube_centre a comme argument trois points A,B,C.


cube_centre dessine un cube de centre A, de sommet B et tel que le plan ABC
soit un plan de symetrie du cube.
Ce plan ABC contient une arte BD du cube issue de B et le sommet D de cette arte
est situ du mme ct que C par rapport AB.
On tape :
cube_centre([0,0,0],[3,3,3],[0,1,0])
On obtient :
Le cube de centre [0,0,0], de sommet [3,3,3] et ayant
comme sommet D [-1,5,-1]
On tape :
cube_centre([0,0,0],[3,3,3],[0,-1,0])
Ou on tape :
cube_centre([0,0,0],[3,3,3],[3,-3,3])

840

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

On obtient :
Le cube de centre [0,0,0], de sommet [3,3,3] et ayant
laxe det ayant comme sommet D [3,-3,3] et dont les
artes sont parallles aux axes
Remarques
Il existe (cf les exemples ci-dessus) 2 cubes ayant un sommet commun B,
mme centre A, et le mme plan de symtrie ABC.
En effet, si a est le ct du cube, on a AB = a 3. La donne de A et
de B dtermine donc entirement la sphre S inscrite dans le cube. Le plan
ABC coupe S selon un cercle
Cs et le cube selon un rectangle BDEF avec

BD = a et BF = a 2 car BD est une arte et BF est une diagonale


dune face du cube. Cette face est tangente S et BF est une tangente au
cercle Cs mene par B. Du point B, on peut mener, dans le plan ABC, deux
tangentes au cercle Cs. Ces 2 tangentes sont situes de part et dautre de la
droite AB (car A est le centre du cercle Cs). On choisit la tangente situe
dans le demi-plan ne contenant pas C et on dtermine ainsi, une face contenue dans le plan tangent la sphre passant par cette tangente. Par symtrie
par rapport A, on dtermine enfin tout le cube.
Si le cube a A comme centre et B comme sommet et si de plus le plan ABC
contient une arte du cube, on peut aussi dire que le point C est dans un plan
passant par A, B et une arte du cube BD issue de B et que C est du mme
ct que D par rapport AB.
Pour avoir les coordonnes des sommets du cube, on tape :

normal(cube_centre([0,0,0],[3,3,3],[0,1,0])),0
car cest le dernier argument dune liste qui dtermine le mode daffichage :
ici 0 dit que lon affiche des expressions.
On obtient :
pnt(pnt[[[[3,3,3],[-1,-1,5],[-5,1,1],[-1,5,-1]],
[[3,3,3],[-1,5,-1],[1,1,-5],[5,-1,-1]],[[3,3,3],[-1,-1,5],[1,-5,1]
[5,-1,-1]],[[-1,-1,5],[-5,1,1],[-3,-3,-3],[1,-5,1]],[[-1,5,-1],
[-5,1,1],[-3,-3,-3],[1,1,-5]],[[5,-1,-1],[1,-5,1],[-3,-3,-3],
[1,1,-5]]],0]),0
On peut aussi taper

normal(coordonnees(sommets(cube_centre([0,0,0],[3,3,3],[0,1,0]))))

10.17.3

Loctadre : octahedron octaedre

octaedre a comme argument trois points A,B,C.


octaedre(A,B,C) dessine un octadre de centre A, de sommet B et tel que le
plan ABC contient 4 sommets de loctadre.
On tape :
octaedre([0,0,0],[0,0,5],[0,1,0])
Ou on tape :

10.17. LES SOLIDES DE PLATON

841

octaedre([0,0,0],[0,5,0],[0,0,1])
Ou on tape :
octaedre([0,0,0],[5,0,0],[0,0,1])
On obtient :
Loctadre de centre lorigine et de sommets situs
sur les axes +5 et -5.

10.17.4

Le dodecadre : dodecahedron dodecaedre

a comme argument trois points A,B,C.


dodecaedre(A,B,C) dessine un dodecadre de centre A, de sommet B tel que
le plan ABC contient un axe de symetrie du dodecaedre.
On tape :
dodecaedre([0,0,0],[0,0,5],[0,1,0])
On obtient :
Un dodecadre de centre lorigine, de sommet [0,0,5]
et dont un axe de symtrie est dans le plan 0yz
On tape :
dodecaedre([0,0,0],[0,2,sqrt(5)/2+3/2],[0,0,1])
On obtient :
Un dodecadre de centre lorigine, de sommet
[0,2,sqrt(5)/2+3/2] et dont un axe de symtrie est 0z
Attention Les faces (cest dire les pentagones) sont dessines laide dun triangle et dun trapze (on a le dessin du pentagone et dune de ses diagonales).

10.17.5

Licosadre : icosahedron icosaedre

icosaedre a comme argument trois points A,B,C.


icosaedre(A,B,C) dessine un icosadre de centre A, de sommet B tel que le
plan ABC contienne un sommet parmi les 5 les plus proche de B.
On tape :
icosaedre([0,0,0],[0,0,5],[0,1,0])
On obtient :
Un icosadre de centre lorigine, de sommet [0,0,5] et
le plan 0yz contient un sommet
On tape :
icosaedre([0,0,0],[0,0,sqrt(5)],[2,1,0])
On obtient :
Un icosadre de centre lorigine, de sommet
[0,0,sqrt(5)] et les plans z=1 et z=-1 contiennent les
sommets de licosadre formant 2 pentagones

842

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

10.18

Figures et preuves dexercices avec Xcas

10.18.1

Exercice 1

Soit SABCD une pyramide de sommet S dont la base ABCD est un paralllogramme de centre O.
Soient M et N les milieux respectifs de SA et SD.
Montrer que les plans OMN et SBC sont parallles.
Pour faire la figure, on tape :
// dessin exo1
A:=point(2,2,0);
B:=point(-2,2,0);
C:=point(-3,-2,0);
D:=point(1,-2,0);
S:=point(0,0,4);
polyedre(S,A,B,C,D);
M:=milieu(S,A);
N:=milieu(S,D);
O:=milieu(A,C);
P:=plan(O,M,N);
Q:=plan(S,B,C);
est_parallele(P,Q);
Pour faire la dmonstration avec Xcas, on tape :
// demo exo1
A:=point(a,b,c);
B:=point(d,e,f);
D:=point(u,v,w);
C:=B+(D-A);
//S:=isobarycentre(A,B,C,D)+t*cross(B-A,D-A);
S:=point(k,l,m);
M:=milieu(S,A);
N:=milieu(S,D);
O:=milieu(A,C);
P:=plan(O,M,N);
Q:=plan(S,B,C);
est_parallele(P,Q);
On obtient : 1
ce qui veut dire que les plans P et Q sont parallles.
La dmonstration gomtrique :
Soit R le milieu de AB.
On a :
M est le milieu de SA et N est le milieu de SD, donc MN est parallle AD et
2*MN=AD
M est le milieu de SA et R est le milieu de AB, donc MR est parallle SB et
2*MR=SB

10.18. FIGURES ET PREUVES DEXERCICES AVEC XCAS

843

O est le milieu de AC et R est le milieu de AB, donc OR est parallle CB et


2*OR=CB
ou encore :

2 M N = AD

2 M R = SB

2 OR = CB
La base ABCD est un paralllogramme donc :

overrightarrowAD = BC
On en dduit que MNOR est un paralllogramme dont le plan est parallle la face
SBC.

10.18.2

Exercice 2

Soit SABCD une pyramide de sommet S dont la base ABCD est un carr de
centre O et tel que SO est perpendiculaire au plan ABCD.
Le plan passant par C et perpendiculaire SA coupe SA, SB, SC respectivement en
M, N et P.
Montrer que NP est parallle BD.
Pour faire la figure, on tape :
//dessin exo2
A:=point(2,2,0);
B:=point(-2,2,0);
C:=point(-2,-2,0);
D:=point(2,-2,0);
S:=point(0,0,4);
polyedre(S,A,B,C,D);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
N:=head(inter(Q,droite(S,B)));
P:=head(inter(Q,droite(S,D)));
d1:=droite(N,P);
d2:=droite(B,D);
est_parallele(d1,d2)
Pour faire la dmonstration avec Xcas, on peut taper en supposant que le plan du
carr est le plan Oxy :
// demo exo2
A:=point(a,b,0);
B:=point(c,f,0);
d:=affixe(rotation(a+i*b,pi/2,point(c+i*f)));
d1:=re(d);
d2:=im(d);
D:=point(d1,d2,0);
C:=normal(B+(D-A));
S:=point((c+d1)/2,(d+d2)/2,g);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));

844

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

N:=normal(head(inter(Q,droite(S,B))));
P:=normal(head(inter(Q,droite(S,D))));
est_parallele(droite(D,B),droite(N,P));
On obtient :
1
mais on peut simplifier les calculs, car on peut choisir les axes pour avoir A sur Ox,
on tape alors :
// demo exo2
A:=point(a,0,0);
B:=point(0,a,0);
C:=point(-a,0,0);
D:=point(0,-a,0);
S:=point(0,0,b);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
N:=normal(head(inter(Q,droite(S,B))));
P:=normal(head(inter(Q,droite(S,D))));
est_parallele(droite(D,B),droite(N,P));
On obtient :
1
La dmonstration gomtrique :
Les triangles 0AS, 0BS et 0DS rectangles en 0 sont gaux puisque 0A=OB=0D
en tant que demi diagonale dun carr.
Donc les artes SA SB et SD sont gales ainsi que les triangles isocles SAB et SAD
(la pyramide est donc rgulire).
Les triangles MSN et MSP rectangles en M sont gaux (mme ct MS et leurs angles
S sont gaux), donc SN=SP.
Puisque SB=SD, on a donc :
SN
SP
=
SB
SD
ce qui montre daprs le thorme de Thals que NP est parallle BD.

10.18.3

Exercice 3 prolongement de lexercice 2

Soit SABCD une pyramide de sommet S dont la base ABCD est un losange de
centre O et tel que SO est perpendiculaire au plan ABCD.
Le plan passant par C et perpendiculaire SA coupe SA, SB, SC respectivement en
M, N et P.
Montrer que NP est parallle BD.
Pour faire la dmonstration avec Xcas, on peut taper en supposant que le plan
du losange est le plan Oxy et que lepoint A est sur Ox, on tape alors puisque les
diagonales dun losange sont perpendiculaires en leur milieu :
// demo exo3
A:=point(a,0,0);
B:=point(0,b,0);
C:=point(-a,0,0);

10.18. FIGURES ET PREUVES DEXERCICES AVEC XCAS

845

D:=point(0,-b,0);
S:=point(0,0,c);
Q:=perpendiculaire(C,droite(S,A));
M:=head(inter(Q,droite(S,A)));
N:=normal(head(inter(Q,droite(S,B))));
P:=normal(head(inter(Q,droite(S,D))));
est_parallele(droite(D,B),droite(N,P));
On obtient :
1
La dmonstration gomtrique :
Les triangles 0BS et 0DS rectangles en 0 sont gaux puisque OB=0D en tant que
demi diagonale dun losange.
Donc les artes SB et SD sont gales ainsi les triangles SAB et SAD ont 3 cots
gaux ; ils sont donc gaux.
Les triangles MSN et MSP rectangles en M sont gaux (mme ct MS et leurs angles
S sont gaux), donc SN=SP.
Puisque SB=SD, on a donc :
SN
SP
=
SB
SD
ce qui montre daprs le thorme de Thals que NP est parallle BD.

846

CHAPITRE 10. LES FONCTIONS DE GOMTRIE 3-D

Chapitre 11

Utilisation de giac lintrieur


dun programme
11.1

Utilisation dans un programme C++

On peut utiliser giac lintrieur dun programme C++ en mettant au dbut


du programme par exemple essai.cc :
#include<giac/giac.h>
puis en compilant le compilant avec :
c++ -g essai.cc -lgiac -lgmp
et en lexcutant en mettant :
./a.out
Exemple
// -*- compile-command: "g++ -g pgcd.cc -lgiac -lgmp" -*#include <giac/giac.h>
using namespace std;
using namespace giac;
gen pgcd(gen a,gen b){
gen q,r;
for (;b!=0;){
r=irem(a,b,q);
a=b;
b=r;
}
return a;
}
int main(){
cout << "Entrer 2 entiers";
gen a,b;
cin >> a >> b;
cout << pgcd(a,b) << endl;
return 0;
847

848CHAPITRE 11. UTILISATION DE GIAC LINTRIEUR DUN PROGRAMME


}

11.2

Pour dfinir de nouvelles fonctions de giac

On peut dfinir de nouvelles fonctions qui deviendront des fonctions de giac.


Pour dfinir par exemple la fonction de nom pgcd ( et cest linstruction : const
string _pgcd_s("pgcd") ; qui dfinit le nom de la fonction), on tape :
// -*- mode:C++ ; compile-command: "g++ -I.. -fPIC -DPIC
-g -c pgcd.cpp -o pgcd.lo && ln -sf pgcd.lo pgcd.o && gcc
-shared pgcd.lo -lc -Wl,-soname -Wl,libpgcd.so.0 -o
libpgcd.so.0.0.0 && ln -sf libpgcd.so.0.0.0 libpgcd.so.0 &&
ln -sf libpgcd.so.0.0.0 libpgcd.so" -*using namespace std;
#include <stdexcept>
#include <cmath>
#include <cstdlib>
#include <giac/giac.h>
#include "pgcd.h"
#ifndef NO_NAMESPACE_GIAC
namespace giac {
#endif // ndef NO_NAMESPACE_GIAC
gen pgcd(gen a,gen b){
gen q,r;
for (;b!=0;){
r=irem(a,b,q);
a=b;
b=r;
}
return a;
}
gen _pgcd(const gen & args){
if ((args.type!=_VECT)||(args._VECTptr->size()!=2))
setsizeerr();
vecteur &v=*args._VECTptr;
return pgcd(v[0],v[1]);
}
const string _pgcd_s("pgcd");
unary_function_unary __pgcd(&_pgcd,_pgcd_s);
unary_function_ptr at_pgcd (&__pgcd,0,true);

#ifndef NO_NAMESPACE_GIAC
} // namespace giac
#endif // ndef NO_NAMESPACE_GIAC

11.2. POUR DFINIR DE NOUVELLES FONCTIONS DE GIAC

849

On compile avec la commande situe aprs compile-command de len-tte du


programme. Puis, pour linsrer dans une session Xcas, il faut taper la commande
insmod suivi du chemin absolu complet de la librairie, par exemple :
insmod("/home/user/giac-0.4.0/doc/en/libpgcd.so").
Cela suppose que le source de giac a t dsarchiv dans le rpertoire /home/user).
Le type gen
gen est le type qui sert reprsenter toutes les donnes de calcul formel : les
fonctions de calcul formel travaillent sur des gen.
Si g est de type gen ( gen g;), selon le type de g, g.type aura diffrentes
valeurs qui sont :
_INT_ si g.val est un entier de type int,
_DOUBLE_ si g._DOUBLE_val est un rel de type double
_SYMB si g._SYMBptr pointe sur un objet de type symbolique
_VECT si g._VECTptr pointe sur un vecteur de type vecteur
_ZINT si g._ZINTptr pointe sur un entier de type zint
_IDNT si g._IDNTptr pointe sur un identificateur de type idnt
_CPLX si g._CPLXptr pointe sur un complexe de type complexe

Vous aimerez peut-être aussi