Vous êtes sur la page 1sur 318

GUIDE DU CALCUL AVEC

LES LOGICIELS LIBRES


XCAS, Scilab, Bc,
Gp, GnuPlot, Maxima, MuPAD

GUIDE DU CALCUL AVEC


LES LOGICIELS LIBRES
XCAS, Scilab, Bc,
Gp, GnuPlot, Maxima, MuPAD

Guillaume Connan
Professeur agrg de mathmatiques
au lyce Jean Perrin (Rez)

Stphane Grognet
Matre de confrences lUniversit de Nantes
et directeur de lIREM des Pays de la Loire

Illustration de couverture : Digital vision

Dunod, Paris, 2008


ISBN 978-2-10-053934-5

Table des matires

I NTRODUCTION
1

2
3
4

Gnralits
a. Public vis
b. Organisation
Pourquoi des logiciels libres ?
Liste des logiciels abords
Vive le calcul !

1
1
1
1
2
2
3

Partie I INTERFACE
C HAPITRE 1 : A IDE
1.1 Installer les logiciels
1.2 Obtenir de laide
a. Aide en ligne de commande
b. Aide en ligne locale
c. Aide en ligne par internet
d. Documentation internet
1.3 Promenade avec bc
1.4 Promenade avec XCAS

C HAPITRE 2 : C OMMUNICATION
2.1 Communiquer avec un logiciel de calcul
a. criture des nombres
b. Saisie des instructions au clavier
c. Mise en forme des rsultats au format instruction
2.2 Obtenir des sorties compatibles avec le logiciel de typographie LATEX
a. LATEX et les calculs avec XCAS
b. LATEX et les sorties graphiques de XCAS
c. LATEX et GnuPlot
d. Combiner Bc, GnuPlot et LATEX
2.3 Utiliser des logiciels de calcul avec TeXmacs
2.4 Utiliser les logiciels de calcul en mode texte sous Emacs
2.5 Faire communiquer deux logiciels de calcul

5
7
7
7
7
8
8
8
8
9
13
13
13
13
14
15
15
18
20
23
26
27
29

  

a. Le copier-coller la souris
b. Communication via des fichiers
c. Appel linterprteur de commandes du systme (shell)
d. Un bon outil : la gestion des chanes de caractres
2.6 Programmation interactive

C HAPITRE 3 : L A PROGRAMMATION
3.1 Avec XCAS
a. Les procdures
b. for
c. while
d. if
e. Listes,ensembles et chanes
f. Programmation en franais
Pour
tantque
si
3.2 Avec MuPAD
a. Les procdures
b. for
c. while
d. if
e. Listes, ensembles et chanes
3.3 Avec Scilab

Partie II CALCUL
C HAPITRE 4 : A RITHMTIQUE
4.1 Calcul en prcision arbitraire
a. Avec Bc
b. Avec XCAS
c. Avec Maxima
d. Avec gp
e. Avec Yacas
4.2 Erreurs darrondi avec GnuPlot
4.3 Changement de base avec Bc
4.4 Congruences
4.5 Nombres premiers
a. Thorme des nombres
x premiers
1
b. La fonction Li :x 
dt et les nombres premiers
2 ln t
4.6 Nombres p-adiques

C HAPITRE 5 : QUATIONS
5.1 Avec XCAS

vi

29
29
29
30
30
31
31
31
32
33
33
33
36
36
36
36
37
37
38
39
39
39
41

43
45
45
45
46
46
46
46
47
48
49
50
50
52
53
55
55

  

5.2 Avec MuPAD

C HAPITRE 6 : P OLYNMES
6.1
6.2
6.3
6.4
6.5

58
61

Avec Scilab
Avec Maxima
Avec XCAS
Avec Gp
Avec Yacas

61
62
63
64
65

C HAPITRE 7 : F ONCTIONS

67

7.1 Avec Gp
7.2 Avec Maxima
7.3 Avec XCAS
a. Cas gnral
b. Dfinir des fonction non numriques : un exemple en gomtrie en classe de
Seconde
7.4 Avec Bc
7.5 Avec Scilab
a. Cas gnral
b. valuation en rafale
7.6 Avec Yacas
7.7 Avec Octave

C HAPITRE 8 : A LGBRE LINAIRE


8.1 Avec Scilab
a. Oprations lmentaires
b. Rsolution dun systme dquations linaires
c. Rduction dendomorphismes
8.2 Avec Octave
8.3 Avec Maxima
8.4 Avec XCAS, au gr dactivits diverses
a. Dterminer un projecteur
b. Puissances de matrices
c. Inverse de matrices
d. Trouver linverse dune matrice avec la mthode de Gauss-Jordan
e. Chanes de Markov
f. Chiffrement de Hill
Codage
Dcodage

C HAPITRE 9 : G OMTRIE AFFINE


9.1 Avec Scilab
a. quation de droite dans le plan
b. quation de plan dans lespace tridimensionnel
9.2 Avec XCAS
a. Proprits gomtriques

67
67
68
68
69
72
72
72
73
73
74
75
75
75
76
76
77
77
78
78
79
79
80
83
86
87
88
91
91
91
91
91
92

vii

  

Dans le plan
Dans lespace
b. Une activit de 2nde
9.3 Avec GnuPlot

92
93
95
96

C HAPITRE 10 : S TATISTIQUES

99

10.1 Des statistiques sans tableur...


a. Le problme du Duc de Toscane
Un peu de (petite) histoire
Simulation de lexprience
Simulation grande chelle
b. Lancers de ds
c. Un problme divrogne
10.2 Gnrateurs alatoires
10.3 Rgression linaire
10.4 Statistiques
10.5 Application
a. Loi uniforme
b. Loi normale
c. Pile ou face
d. Jeu de ds

C HAPITRE 11 : C ALCUL DIFFRENTIEL


11.1 Premiers contacts
a. Avec Scilab
b. Avec Maxima
c. Avec XCAS
d. Avec Gp
e. Avec Yacas
11.2 Calcul diffrentiel multidimensionnel
11.3 Courbes
11.4 Surfaces
11.5 tude mtrique des surfaces
11.6 Extrema dune fonction de R2 dans R avec XCAS
a. Extremum sous contrainte et multiplicateur de Lagrange
b. Condition ncessaire et suffisante dexistence dun extremum

C HAPITRE 12 : I NTGRATION
12.1 Primitives
a. Avec Yacas
b. Avec Maxima
c. Dcomposition en lments simples
d. Avec Scilab
e. Avec XCAS
f. Avec MuPAD
12.2 Changement de variable et intgration par parties

viii

99
99
99
99
100
101
103
105
105
105
106
106
108
109
110
113
113
113
114
114
116
116
116
117
119
125
132
132
135
139
139
139
139
140
142
143
143
144

  

a. Avec XCAS
Changement de variables
Intgration par parties
Intgrale de Wallis
b. Avec MuPAD
12.3 Calcul approch dintgrales
a. Mthode des rectangles avec XCAS
b. Application au calcul dune approximation de avec XCAS

C HAPITRE 13 : D VELOPPEMENTS LIMITS


13.1
13.2
13.3
13.4

Avec Yacas
Avec Gp
Avec Maxima
Avec XCAS
a. Gnralits
b. Visualisation de lapproximation dune fonction par le polynme de Taylor

C HAPITRE 14 : QUATIONS DIFFRENTIELLES ORDINAIRES


14.1 Avec Scilab
a. Rsolution dune quation du premier ordre unidimensionnelle
b. Rsolution dune quation du premier ordre multidimensionnelle
c. Rsolution dune quation du deuxime ordre unidimensionnelle
d. Rsolution dune quation dordre et de dimension quelconques
14.2 Avec Octave
14.3 Avec XCAS
a. Rsolution exacte
b. Rsolution approche
c. Mthode dEuler : cas gnral
d. Mthode dEuler et exponentielle : TP en Terminale S
Approximation affine
Subdivision
Trac dune ligne brise
Trac en boucle
Procdure
vous de jouer
Estimation de lerreur
14.4 Rsolution exacte avec Maxima
14.5 Avec MuPAD

C HAPITRE 15 : T RANSFORME DE L APLACE


15.1 Avec Maxima
15.2 Avec XCAS

144
144
144
145
147
148
148
149
153
153
153
154
154
154
155
157
157
157
157
160
161
161
161
161
162
162
163
163
163
163
164
164
165
165
166
167
169
169
170

ix

  


Partie III THMES


T HME 1 : XCAS AU LYCE ?

173

1.1 XCAS et la gomtrie dynamique au lyce


1.2 XCAS et les suites
1.3 Ce que ni le tableur, ni un logiciel de gomtrie ne peuvent faire
a. Preuve dun thorme
b. Illustration graphique
c. Bilan de cette activit
1.4 Moralit...

T HME 2 : L OGIQUE LMENTAIRE


2.1 Premiers contacts
2.2 Algbre de Boole
2.3 Le raisonnement par labsurde

T HME 3 : T HORMES DE M NLAS ET PAPPUS


3.1 Coordonnes barycentriques
a. Une condition dalignement
b. Une dmonstration rapide du thorme de Mnlas
3.2 Problme du Monde
3.3 Cercles de Pappus
a. Approche historique
b. Rsolution astucieuse de reprsentations paramtriques et dune inversion

T HME 4 : S UITES ET CHAOS


4.1
4.2
4.3
4.4

185
185
185
186
189
189
189
190
192
193
193
196

200
200
201
203

T HME 5 : C ONIQUES

205

5.1 tude algbrique des coniques


a. tude mathmatique au niveau Bac+1
Premier cas : ab = 0
second cas : ab = 0
b. tude mathmatique au niveau Bac+2
criture matricielle de lquation
Exemple
c. tude informatique
5.2 tude analytique des coniques
x2
a2

y2

+ b2 = 1
x2
a2

y2
b2

b. Hyperbole dquation = 1
5.3 Ensemble des points M du plan tels que MF = eMH
5.4 Foyer et directrice dune conique

173
173
179
179
182
183
183

199

Modlisation
Observation chiffre
Observation graphique
Diagramme de bifurcation

a. Ellipse dquation

171

205
205
205
206
208
208
209
210
211
211
213
214
214

  

a. Cas de lellipse
b. Cas de lhyperbole
5.5 Construction de la tangente une conique
a. Le thorme
b. Lobservation par XCAS
c. La preuve par XCAS
5.6 Activits gomtriques sur les paraboles
a. Trac dune parabole la rgle et au compas
b. Pourquoi les antennes paraboliques sont-elles paraboliques ?
5.7 Coniques et cnes
a. Section dun cne par un plan dquation x = t
b. Section dun cne par un plan dquation x = t + k z

214
215
215
215
215
217
218
218
219
220
221
222

T HME 6 : S RIES DE F OURIER

225

6.1 Exploration
6.2 Interprtation physique
6.3 Phnomne de Gibbs

225
228
229

T HME 7 : M USIQUE
7.1 Construction dune gamme avec Scilab
a. Gnration de gammes candidates
b. limination des permutations circulaires de colonnes
c. Fonction principale : mode demploi
7.2 Fabrication de sons

235
235
235
236
237
238

T HME 8 : C ARRS MAGIQUES

241

T HME 9 : C ODES CORRECTEURS D ERREURS

247

9.1 Mthode nave


a. Liste des lments de Fk2
b. Distance de Hamming
c. La procdure de test et de correction
d. Code t-correcteur
9.2 Codes cycliques et polynme gnrateur
9.3 Corps de Galois - Cration de polynmes gnrateurs

T HME 10 : S URFACES DONT LA PROJECTION EST IMPOSE


10.1 Introduction
10.2 Construction du polynme adapt
a. Dfinition mathmatique
b. Construction informatique
10.3 Dfinition semi-algbrique dun polygone convexe rgulier
a. Le polygone a un nombre pair de cts
b. Le polygone a un nombre impair de cts
c. Traduction informatique
10.4 Construction de lensemble algbrique partir de la dfinition semi-algbrique

248
248
248
249
251
253
255
259
259
260
260
260
262
262
263
264
265

xi

  

a. Carr
b. Hexagone
10.5 Prolongements

T HME 11 : TACHES DES ANIMAUX


11.1
11.2
11.3
11.4
11.5

Introduction
Affichage des donnes
Construction sur un rectangle
Construction sur un tore
Construction sur un cylindre

Partie IV ANNEXES

265
266
267
269
269
270
273
276
277

279

TABLEAUX COMPARATIFS

281

B IBLIOGRAPHIE

289

I NDEX GNRAL

291

I NDEX DES COMMANDES

297

xii

Remerciements

Je remercie chaleureusement Bernard PARISSE, dune part pour dvelopper de


manire si active le logiciel XCAS, et dautre part pour avoir bien voulu relire et
amliorer bon nombre des algorithmes prsents dans cet ouvrage.
Je tiens galement mexcuser auprs de Claire, Marie, Franois, Suzanne et
Rose qui jai tourn le dos tant de jours pour faire face mon cran et les
remercie pour leur patience.
Guillaume C ONNAN

Introduction
 

 

Cet ouvrage aborde les niveaux :

collge

lyce

suprieur

tant pour les notions mathmatiques que pour les capacits informatiques ncessaires.
Louvrage est destin :

llve ou ltudiant qui cherche une vision diffrente des notions abordes en cours,
ou qui dsire se cultiver,

lenseignant qui cherche une aide soit pour prparer des illustrations pour son cours,
soit pour prparer des activits sur machine en travaux pratiques,

au candidat professeur qui souhaite illustrer une leon mathmatique en utilisant des
programmes de quelques lignes sans rentrer dans une programmation fastidieuse,

au technicien et au scientifique de nimporte quelle discipline qui souhaite manipuler


les objets mathmatiques dont il a besoin.



 


Cet ouvrage aborde trois domaines de travail :

Comment utiliser le plus confortablement possible les logiciels de calcul ?

Quelles sont les connaissances de bases qui permettent un non-initi daborder chaque
logiciel ?

Comment traiter avec les machines quelques thmes mathmatiques un peu plus labors ?

Les textes de confort dcoulent de notre pratique ; ils sont destins ceux qui sintressent
aux mathmatiques sans exprience de la programmation et correspondent la partie 4.
Les textes de recettes de base de la partie 3.3 rpondent aux questions que nous nous sommes
nous-mmes poses : pour illustrer tel ou tel domaine des mathmatiques, quels logiciels
choisir, quels sont les outils minimums quon peut acqurir sans gros travail dapprentissage
pour manipuler les objets mathmatiques ?

 

Les thmes dtude de la partie 15.2 nous paraissent instructifs pour plusieurs raisons.
On peut utiliser les logiciels de calcul pour faciliter le travail dans un domaine mathmatique
que lon connat. Mais il apparat que les logiciels libres disponibles sont suffisamment riches
et suffisamment documents pour quon puisse aussi dcouvrir un domaine mathmatique
travers eux. La manire de penser lchange de connaissances sen trouve modifie.
Lutilisation dun logiciel pour rsoudre un problme ambitieux mne une utilisation pousse : le logiciel libre sa puissance ; des routines sont cres, qui peuvent tre utilises dans
bien dautres situations ; la solution apporte fait natre dautres envies et apporte de fcondes
suggestions.

  
 


Les logiciels libres publient les sources de leur programmes, ce qui leur offre diffrents avantages.
Le fait que tout un chacun puisse apporter des corrections est un gage de stabilit.
Le dveloppement de certains logiciels peut tre repris par de nouvelles quipes sans que le
savoir-faire ne soit perdu : cest un gage de prennit.
Leurs concepteurs visent la compatibilit avec les versions antrieures et le respect des normes
informatiques. Les logiciels libres sont destins communiquer entre eux, et le fait de pouvoir
cumuler la puissance de plusieurs logiciels pour un projet de calcul est prcieux.
Le fait de pouvoir les dupliquer lgalement est bnfique pour le budget de ltat ou des entreprises.

 
 
 
 

Plusieurs logiciels sont utiliss dans cet ouvrage. Nous pointons les diffrences de syntaxe ;
elles ne doivent pas rebuter le nophyte car elles ont leur raison dtre, et le fait dapprendre
plusieurs logiciels de calcul en mme temps apporte un recul profitable lassimilation des
rgles dutilisation. Des tableaux comparatifs sont prsents en annexe page 281.
Les logiciels libres prsents ici sont bien dans la philosophie des logiciels libres et des systmes dexploitation libres de la ligne UNIX ; loppos de la stratgie commerciale des logiciels propritaires, les logiciels libres ne cherchent pas tout faire, mais agir dans un domaine dtermin le plus proprement possible : ce quils font, ils le font bien.
Toujours dans la philosophie UNIX, les logiciels utilisent des modes de communication ouverts (ils peuvent lire et crire des fichiers texte ou dans des formats ouverts, lancer des commandes systme et donc nimporte quel autre logiciel), et collaborent entre eux. Tel logiciel
de calcul formel utilise un autre logiciel de dessin pour ses graphismes, et un autre logiciel de
calcul numrique pour ses calculs approchs.
Cette coopration apporte une puissance et un confort dutilisation introuvables dans les logiciels propritaires.

 

Fonctionne

Logiciel

Type

Fonctionne

en mode

en mode

Licence

texte

graphique

oui

Bc

calculette en prcision arbitraire

GPL

GnuPlot

traceur de figures mathmatiques

GPL

Gp(pari)

calculateur formel orient corps de nombres

GPL

oui

Maxima

calculateur formel

GPL

oui

MuPAD

calculateur formel

Propritaire

Octave

calculateur numrique matriciel

GPL

oui

Scilab

calculateur numrique matriciel

cecill

oui

oui
oui

oui

oui
oui

XCAS(giac)

calculateur formel

GPL

oui(iacas)

Yacas

calculateur formel

GPL

oui

  Logiciels abords


Les logiciels qui fonctionnent en mode texte prsentent deux avantages : ils peuvent tre installs et (modrment) utiliss sur des machines peu performantes, et peuvent tre utiliss
distance par ssh via une liaison lente. Ils fonctionnent videmment sur un terminal en mode
graphique.
Les relations des logiciels de calcul avec le logiciel de typographie LATEX sont abordes ici.

    
Nous remercions les auteurs des logiciels libres qui diffusent leur savoir lensemble de lhumanit depuis des dcennies. Les systmes libres Linux et *BSD sont des outils de travail remarquables.
Nous remercions lIREM des Pays de la Loire, le Dpartement de mathmatiques de lUniversit de Nantes, le laboratoire Jean Leray pour leurs aides diverses.
Nous remercions Bernard Parisse pour ses rponses aux questions sur XCAS.
Nous aurions aim aborder dautres logiciels, tels que geogebra, axiom, xfig, R. . .
Cet ouvrage vise encourager les utilisateurs parcourir la riche documentation des logiciels
libres, il ne vise surtout pas la remplacer.
Nous esprons que le lecteur prendra autant de plaisir que nous dcouvrir les logiciels libres
de calcul mathmatique, et utilisera ce livre en exprimentant directement les logiciels de
calcul sur sa machine, en noubliant pas son diteur de texte prfr pour crer et ajuster ses
propres programmes.

Premire partie

INTERFACE


Aide
Logiciel(s) abord(s) : Bc GnuPlot Gp Maxima Octave Scilab XCAS
Yacas

Problmatique : Comment obtenir le mode demploi ?


 
 

part MuPAD, les logiciels dcrits ici sont libres, cest--dire librement copiables avec leurs
programmes-sources.
Ils sont souvent dans larborescence de logiciels disponibles sous votre systme dexploitation
Linux ou *BSD prfr.
Sous MacOSX, il est bon dutiliser Fink, qui les place dans le rpertoire \sw. Mais certains logiciels ne sont pas disponibles par Fink : ils sont souvent sur internet sous forme dj compile
pour MacIntosh.
Sous Microsoft Windows, les logiciels sont tlcharger sur internet. On peut avoir besoin
dun simulateur UNIX comme CygWin.
Dans tous les cas, il ne faut pas hsiter consulter les sites internet correspondants et tlcharger la documentation.

    


     

Certains logiciels fournissent une aide sommaire en ligne de commande avec une instruction
du type programme -h :
ou programme -help.
bc --help
gnuplot --help
gp --help
maxima --help
octave --help
scilab --help

Ceci peut varier suivant la version du logiciel install sur la machine.


   

Certains fournissent une aide dans la norme UNIX avec la commande man de linterprteur
de commande (Shell) : man programme.







bc
gnuplot
gp
maxima
octave

Quelques logiciels fournissent une aide substantielle avec la commande info du shell :







gnuplot
maxima
octave

    

Certains logiciels offrent une aide en ligne, soit en appuyant un bouton en mode graphique,
soit en tapant une commande du type help, comme Octave, Maxima, Scilab, un point dinterrogation, comme GnuPlot, XCAS, Yacas, deux points dinterrogation, comme Gp.
Par exemple le programme Yacas lance le navigateur en mode texte  ; le logiciel Gp avec
deux points dinterrogation lance le visualiseur
 sur un document daide (en mode graphique).
Il arrive que laide fournisse une prcieuse recherche par mot-cl.



     

Certains logiciels proposent leur aide en ligne par un navigateur qui va chercher ses donnes
sur le rseau. Ceci pose problme quand on travaille hors ligne. . .



   

Une grande quantit de documents est disponible sur internet dans de nombreuses langues.
Il est intressant de tlcharger ces documents et de les consulter en travaillant.

    
Pour obtenir laide de Bc taper dans un terminal :
man bc

on obtient une rponse du genre :


Rponse du logiciel
bc(1)

bc(1)

NAME
bc - An arbitrary precision calculator language

 

 

SYNTAX
bc [ -lwsqv ] [long-options] [

file ... ]

VERSION
This man page documents GNU bc version 1.04.
DESCRIPTION
bc is a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the
syntax to the C programming language.
A standard math library is
available by command line option. If requested, the math library is
defined before processing any files. bc starts by processing code from
all the files listed on the command line in the order listed.
After
all files have been processed, bc reads from the standard input. All
code is executed as it is read. (If a file contains a command to halt
the processor, bc will never read from the standard input.)
This version of bc contains several extensions beyond traditional bc
implementations and the POSIX draft standard. Command line options can
cause these extensions to print a warning or to be rejected. This document describes the language accepted by this processor.
Extensions
will be identified as such.
OPTIONS
-l

Define the standard math library.

-w

Give warnings for extensions to POSIX bc.

-s

Process exactly the POSIX bc language.

-q

Do not print the normal GNU bc welcome.

-v

Print the version number and copyright and quit.

--mathlib
Define the standard math library.
--warn Give warnings for extensions to POSIX bc.
--standard
Process exactly the POSIX bc language.

On se dplace dans le visualiseur avec , , ou bien


quitte le visualiseur en tapant  .





. On

    !"#$


Laide est trs fournie sur XCAS.

Il existe tout dabord un index des commandes qui donne un rapide rsum des fonctionnalits. Par exemple, pour se rappeler la syntaxe de   , on tape limite puis

On obtient :


   


Pour une aide plus dtaille, on peut cliquer sur Dtails si on avait dj ouvert lindex
daide ; on peut y accder directement en tapant
puis en indiquant la notion qui
nous intresse dans la fentre.
Pour une aide plus gnrale, il existe des manuels daide sur les grands sujets gnraux.
Par exemple, si on clique sur licne interface du menu dAide, on obtient le rsum
suivant la section... Aide :
Rponse du logiciel

LE MENU AIDE
Ce menu contient les diffrentes formes daide possible.
* INTERFACE contient ce manuel, donc 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.

10

 

 

2. ALGORITHMES dcrit une partie des mathmatiques utilises pour programmer


un logiciel de calcul formel
3. GOMTRIE 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 !).
4. 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.
5. TABLEUR,STATISTIQUES contient une aide dtaille concernant le tableur et
les fonctions de statistiques ainsi que leurs utilisations dans le tableur.
6. 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.
7. AMUSEMENTS contient de nombreux exercices mathmatiques originaux traits
avec XCAS.
* INTERNET
1. FORUM permet daccder un forum de discussion.
2. SITE LYCE G. CONNAN renvoie vers un site merveilleux...
3. RESSOURCES BAC S renvoie vers les sujets de lpreuve exprimentale du
Bac S.
4. RESSOURCES AGRGATION renvoie vers les thmes utiles aux agrgatifs.
5. METTRE JOUR LAIDE permet de mettre laide jour.
* INDEX donne toutes les commandes utilisables classes par ordre alphabtique avec
une ligne dentre qui permet de se dplacer facilement dans cette liste :
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 une aide succincte qui
saffiche dans le bandeau gnral lendroit des messages, des exemples que
lon peut copier en cliquant sur lun deux et le nom des commandes proches ou
des synonymes.
Pour avoir une aide plus complte, cliquez sur le bouton Dtails Laide saffiche
soit dans un navigateur (par dfaut Mozilla sous Linux, Internet Explorer sous
Windows), soit dans une fentre part. Sous Linux, il est commode douvrir
Mozilla et de licnifier pour pouvoir ouvrir cette aide lorsque cela est ncessaire. Vous pouvez aussi taper ?nom_de_commande pour avoir en rponse laide
succincte sur cette commande.
Notez quen tapant sur le bouton bleu ? situ en bas gauche dans le bandeau
gnral, on ouvre lIndex et, notez aussi quen tapant le dbut dune commande
dans une ligne de commandes puis sur la touche de tabulation ou sur le bouton
bleu ?, on ouvre lIndex la commande commenant par ce dbut.
* TROUVE recherche le mot demand dans toutes les pages du manuel Calcul formel.

Tout est dit...

11



Communication
Logiciel(s) abord(s) : Bc GnuPlot Gp Maxima Octave Scilab XCAS
Yacas

Problmatique : Mettre en forme les productions des logiciels. Faire


communiquer les logiciels entre eux.




"

      

   
 

En notation scientifique, les nombres apparaisent sous la forme suivante, et ils sont saisir
de mme :
-1.23456e-7

reprsente le nombre 1, 23456 107 dans plusieurs logiciels. Le symbole de la partie exponentielle varie suivant les logiciels.

 
 Notation scientifique
logiciels

symboles accepts pour la


partie exponentielle

Bc Yacas
Gp GnuPlot XCAS
Maxima Scilab Octave



e,E
d,D,e,E

 
 

 
  

La plupart des logiciels de calcul obissent une ligne de commande que lutilisateur saisit
avec le clavier. La commande nest excute que quand on appuie sur la touche   .
diter une commande, cest modifier la ligne que lon est en train de saisir.
Certains logiciels prsentent des facilits dans ce domaine.
La plupart accepte deffacer le caractre gauche du curseur quand on appuie sur la touche
deffaage vers la gauche.


   


Dans certains logiciels, en utilisant les flches du clavier, on peut rappeler une commande
prcdente.
Des raccourcis-clavier autrefois introduits dans linterprteur de commande C-shell ou lditeur de textes Emacs, et maintenant devenus habituels, sont parfois repris :



pour effacer toute la ligne,



pour effacer le reste de la ligne droite du curseur,



pour placer le curseur en dbut de ligne,



pour placer le curseur en fin de ligne,



pour effacer le caractre droite du curseur

et caetera.
Leffet de ces commandes peut varier dun logiciel lautre : il est recommand de faire des
essais.
Ces commandes sont tellement pratiques quil serait dommage de sen passer.
Beaucoup de logiciels sont sensibles la hauteur de casse : dans le logiciel Scilab, linstruction

(1)
fonctionne mais linstruction
Sin(1)

ne fonctionne pas.




    

 
    
 

Pour utiliser le rsultat obtenu dans un logiciel comme entre dans un autre, comme dans la
section a. page 29, il faut que la mise en forme du rsultat soit compatible avec la saisie des
instructions.
La ligne de commande permet de modifier la vole les diffrences mineures de notation
dun logiciel lautre.
En copier-coller la souris, on peut utiliser ltape intermdiaire dun diteur de texte pour
nettoyer linstruction.
En demandant aux logiciels dcrire et de lire dans un fichier, il est possible dutiliser des diteurs de texte automatiss tels que sed, awk, Perl. . .

 


opration
Logiciel
Scilab

Maxima

obtenir la sortie au
format de lentre


  ;

exemple
x=
(0,x)
p=x2+1
(p)
x2+1;

  
x2+1;

14

Mise en forme du rsultat


obtenir la sortie au
format enjoliv

exemple

il ny a rien faire

 ;

x2+1;

 ;
x2+1;

     



     
 

 


Mise en forme du rsultat

opration
Logiciel

obtenir la sortie au
format de lentre

Gp

il ny a rien faire

il ny a rien faire

Yacas

il ny a rien faire




XCAS

il ny a rien faire

il ny a rien faire

exemple

obtenir la sortie au
format enjoliv

exemple

PrettyForm(%)



Chanes de caractres et instructions
Voici un exemple (Figure 2.2) daller-et-retour entre les chanes de caractres et les instructions dans Scilab.

   

 
 % 
    
&% %' ()!


   
 
  

Il est possible de demander XCAS de calculer partir dun fichier LATEX. Pour cela, il faut commencer par indiquer LATEX quon lautorise excuter des tches externes en modifiant le
fichier ( ou lquivalent sur des systmes non libres ) /usr/share/texmf/web2c/texmf.cnf.
Il suffit dy remplacer shell_escape=f par shell_escape= t.

15


   


Une manire moins drastique est de spcifier son diteur ( Kile, TeXmaker...) de compiler
le fichier avec loption shell_escape :
latex --shell-escape fichier.tex

Si on travaille sous Emacs avec AucTeX, il suffit de rajouter la toute fin du fichier :
%%%

Local

%%% m o d e :

Variables :
latex

%%% T e X m a s t e r :

s h e l l e s c a p e

%%% E n d :

Ensuite, voici le code LATEX placer en prambule :


\
  [12pt]{article}
\  {fancyvrb}
\

   

%c o m m a n d e

pour

faire

appel

giac

\  
{\executGiac}[1]{
\
 \ 18{giac <#1 } }
\     


Remplacer \write18{giac
Microsoft.

<#1}} par \write18{giac

#1}} sur Windows

Cette commande permet de schapper ( escape... ) momentanment de LATEX pour excuter


une commande externe dans le Shell. Ici, nous appelons giac qui correspond XCAS en
mode texte.
Ensuite, il faut crer un script qui sera lu par giac dans son langage.
Lenvironnement     de lextension   permet de placer un script dans un
fichier mis en argument, ici Xcass.in :
\ {VerbatimOut}{Xcass.}
 
(0);
Sortie: ("xcass.tex");
 
("xcass.out");
 (());
Resultat: ( (()[0]));
 (Sortie,
,Resultat);
 (Sortie);
\ 
{VerbatimOut}

Nous utilisons ensuite des commandes propres giac et donc XCAS :

16

     



     
 

 (nom fichier) qui crer un fichier ;


 
("fichier externe") qui charge un fichier externe;
 (commande ou sortie) qui transforme en code LATEX une commande ou un rsultat affich dans XCAS ;

 (fichier,Unquoted,cible) qui crit cible sans guillemets dans fichier ;


 (nom fichier) qui ferme le fichier.

On cre ensuite un nouvel environnement LATEX quon appellera Xcass pour faciliter la saisie.
On utilise nouveau lenvironnement VerbatimOut, mais cette fois-ci nous devons spcifier
loption \      pour expliquer LATEX quil sagit dun environnement en
mode Verbatim :
\     {Xcass}
{\      \ {VerbatimOut}{xcass.out}}
{\ 
{VerbatimOut}
\executGiac{Xcass.in}
\[\ {xcass}\]}

On peut maintenant faire des essais :


\ {document}
\ {Xcass}
simplify(1-8*ln(sqrt(1/e))+sqrt(2)+1/2);
\ 
{Xcass}
\ {Xcass}
solve(sin(x)1/2,x)
\ 
{Xcass}
\ {Xcass}
desolve([y+ysin(x),y(0)2],y)[0];
\ 
{Xcass}
\ 
{document}

et on remarque que seuls les rsultats des commandes sont affichs :


Rponse du logiciel

cos (x) + sin (x)


cos (x) + sin (x)
cos (x) + sin (x)

17


   




   

 
 !"
  

On peut procder de la mme manire pour obtenir des sorties graphiques produites par
XCAS.
Il faut donc maintenant placer ces commandes dans le prambule du fichier LATEX.
Pour excuter un programme giac :
\    
\   
{\executGiac}[1]{
\
 \ 18{giac <#1 } }
\     

Pour une sortie de calcul :


\ {VerbatimOut}{Xcass.in}
maple_mode(0);
Sortie:fopen("xcass.tex");
read("xcass.out");
Resultat:cat(latex(ans()[0]));
fprint(Sortie,Unquoted,Resultat);
fclose(Sortie);
\ 
{VerbatimOut}

Pour une sortie graphique :


\ {VerbatimOut}{xcasf.in}
Sortie:fopen("xcasf.tex");
courbe:read("xcasf.out"):;
Resultat:cat(latex(courbe));
fprint(Sortie,Unquoted,Resultat);
fclose(Sortie);
\ 
{VerbatimOut}

Sortie en mode maths :


\     {xcass}
{\      \ {VerbatimOut}{xcass.out}}
{\ 
{VerbatimOut}
\executGiac{Xcass.in}
\ {xcass} \ }

Sortie en mode maths centr :


\     {Xcass}
{\      \ {VerbatimOut}{xcass.out}}
{\ 
{VerbatimOut}
\executGiac{Xcass.in}
\[\ {xcass}\]}

Sortie en mode graphique :

18

     



     
 
\     {xcasf}
{\      \ {VerbatimOut}{xcasf.out}}
{\ 
{VerbatimOut}
\executGiac{xcasf.in}
\ {xcasf}}

Il ne reste plus qu faire appel cet environnement lintrieur dun fichier LATEX :

La solution de lquation diffrentielle y"+y0 avec les conditions


particulires y(0)y(0)1
est fournie par \Prog{XCAS} grce la commande \Com{XCAS}{desolve}. Il s
agit de la fonction
dfinie par~:
\ {Xcass}
desolve([y+y0,y(0)1,y(0)1],y)[0];
\ 
{Xcass}
Nous obtenons galement son
}~:

graphe grce la commande \Com{XCAS}{plot

\ {xcasf}
plot(desolve([y+y0,y(0)1,y(0)1],y)[0],x-PiPi,colorblue);
\ 
{xcasf}

qui donne :

19


   


Rponse du logiciel

La solution de lquation diffrentielle y" + y = 0 avec les conditions particulires


y(0) = y  (0) = 1 est fournie par XCAS grce la commande
 . Il sagit de la
fonction dfinie par :
cos (x) + sin (x)
Nous obtenons galement son graphe grce la commande  :

courbe



   #

Pour insrer une figure produite par GnuPlot dans un fichier LATEX, rien de plus simple. Il suffit
tout dabord dinstaller lextension gnuplottexa .
Plusieurs possibilits soffrent alors nous :

on insre directement le graphique dans le texte :


Du texte prsentant ce graphique~:
\ {gnuplot}[scale1.1]
set hidden3d
set isosamples 10,10
r(x,y)sqrt(x**2+y**2)
f(x,y)sin(r(x,y))/r(x,y)
splot f(x,y)
\ 
{gnuplot}
et du texte aprs.

ce qui donne :
a Disponible sur CTAN : http://tug.ctan.org/tex-archive/macros/latex/contrib/gnuplottex/

20

     



     
 
Rponse du logiciel

Du texte prsentant ce graphique :

f(x,y)

1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
10
5
-10

-5

0
0

-5
10 -10

et du texte aprs.


 Compilation directe de la figure GnuPlot
Le problme, cest que cette mthode fatigue trs vite la mmoire de LATEX et quon
ne peut pas demander de trop gros calculs GnuPlot et donc LATEX.
Ainsi, le dessin produit est peu prcis car on ne peut dpasser les valeurs 10 et 10 pour

  

Mieux vaut donc passer par lintermdiaire dun fichier eps pour laisser LATEX en dehors
des calculs. On inclut le graphique avec \
 :
\begin{gnuplot}






     


  tempgnu.eps




   100,100
r(x,y) (x**2+y**2)
f(x,y)(r(x,y))/r(x,y)
 f(x,y)
  

Appel
si

VENTUEL
vous

epstopdf

travaillez

avec

pour

transformer

le

fichier

eps

en

pdf

pdfLaTeX .

epstopdf --outfiletempgnu_eps.pdf tempgnu. 



\end{gnuplot}
Du texte prsentant ce graphique~:
\includegraphics{tempgnu. }
et du texte aprs.

21


   



Rponse du logiciel
f(x,y)

Du texte prsentant ce graphique :


1
0.8
0.6
0.4
0.2
0
-0.2
-0.4

10
5
-10

-5
0

-5
5

et du texte aprs.

10-10


 Inclusion de la sortie eps produite par GnuPlot

On peut galement utiliser MetaPOST : cela conomise aussi la mmoire LATEX et permet
ventuellement de changer le style de figure en retouchant le fichier .mp :

\begin{gnuplot}

   mp 
   tempgnu.mp
 



    100,100
r(x,y) (x**2+y**2)
f(x,y)(r(x,y))/r(x,y)
 f(x,y)
  
#

Appel

extrieur

pour

compiler

le

fichier

metapost

mpost tempgnu.mp
#

Appel

VENTUEL

MetaPOST

en

pdf

mptopdf
si

vous

mptopdf tempgnu.0



\end{gnuplot}
\includegraphics{tempgnu.0}

ce qui donne :

22

pour

transformer

travaillez

avec

le

fichier

pdfLaTeX .

produit

par

     



     
 
Rponse du logiciel

Du texte prsentant ce graphique :


f(x,y)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
10
5
-10

-5

-5

10 -10

et du texte aprs.


 Inclusion de la sortie produite par MetaPOST



 $% #   

Une possibilit extraordinaire des logiciels libres est de pouvoir faire travailler ensemble plusieurs logiciels pour utiliser au mieux chacun dans le domaine o il excelle.
b
Nous1 allons 1dans cet exemple illustrer la convergence de la suite de terme gnral un =
1 n vers e .
Partageons les tches :

Bc va se charger des calculs ;

GnuPlot va se charger de lillustration ;

LATEX va se charger de la mise en forme des rsultats.

Commenons par crer des commandes pour faire excuter des commandes en dehors de
LATEX.
Dabord pour Bc :
\    
\  
{\executBC}[2]{
\
 \ 18{bc -q -l

#1> #2 }}

% #1

fichier

contenant

les

commande

% #2

fichier

contenant

les

rsultats

de

bc

des

calculs

Ensuite pour GnuPlot :


\  
{\ExecuteGnuPlot}[1]{
\
 \ 18{gnuplot #1} }
\     
b Merci beaucoup Dariush G HORBANZ ADEH http://www.cnam.fr/maths/Membres/ghorbanzadeh/

23


   


Rentrons maintenant un script Bc qui va crer une liste de valeurs de la suite (un ) :
\begin{VerbatimOut}{bcK.bc}

 somme (n) {


  i,j ;
/*



pour

bc

les

indices

dmarrent

*/

( i 0; i <n; i !!) {


x[i] (1-1/(i+1))^(i+1);
/ * c a l c u l e (1 1/ n ) ^n
}
 ( j 0; j <n-1; j !!) {
 j+1, " ", x[j] , "\n" ;
} / * on c r e l e s l a b e l s * /
 n+1, " ", x[n] ;
}
  6 ; / * 6 c h i f f r e s a p r s l a v i r g u l e * /
  somme(199); / * 2 0 0 v a l e u r s * /

*/



\end{VerbatimOut}

On lance ensuite lexcution par Bc :


\executBC{bcK.bc}{donnes.dat}

On va ensuire inclure les donnes calcules par Bc au format attendu par GnuPlot dans le
fichier fich.gnu :
\begin{VerbatimOut}{fich.gnu}
" at

   1 "exp(-1)0.3679
 lt 3 



# On

-0.22, .99, 0.5

place

exp ( 1)

   

c omme

label

de

au

back

bon

endroit

  [1:200]
  [0.245:0.37]
 donnes.dat 
y

aura

la

lgende

1:2

 

 

 

  
  

3
n # l a b e l d e s a b s c i s s e s
approximation de (1-1/n)^n

format

image

en

eps

     


 out fich1.eps
 " 0.8, 0.8
 
# exp ( 1)0 . 3 6 7 9
 (-1)    


\end{VerbatimOut}

On excute le fichier fich.gnu dans GnuPlot :


\ExecuteGnuPlot{fich.gnu}

24

pas

titre

LaTeX

label

des

ordonnes

puisqu i l

     



     
 
Enfin, on inclut la figure dans le texte :
Voici une illustration exprimentale de la convergence de la suite de
terme gnral
$u_n\  (1-\{1}{n}\ )^n$ vers $\{1}{e}$~:
\ {center}
\
{fich1.eps}
\ 
{center}
On a calcul les 200 premiers termes de la suite. On saperoit que la
convergence est assez rapide.

Ce qui donne :
Rponse du logiciel

Voici une illustration


exprimentale de la convergence de la suite de terme gnral
n
un = 1 n1 vers 1e :
exp(-1)=0.3679

approximation de (1-1/n)^n

0.36

0.34

0.32

0.3

0.28

0.26

20

40

60

80

100
n

120

140

160

180

200

On a calcul les 200 premiers termes de la suite. On saperoit que la convergence est
assez rapide.


 Illustration de lim 1 n1
n

n

= e 1 avec bc,

GnuPlot et LATEX

25


   



De jolis graphiques avec LATEX


Appeler GnuPlot nest certes pas la seule manire dinsrer des graphiques dans un
fichier LATEX.
Cela peut mme poser des problmes de cohrence des polices (qui peut se rgler
en prfrant un export MetaPOST par exemple).
Il existe en fait des programmes spcialement conus pour effectuer de magnifiques dessins en totale cohrence avec LATEX : il sagit entre autres de PStricks (qui
consiste en fait en une srie dextensions LATEX), de MetaPOST et de Tikz principalement. Il crent de magnifiques dessins mais sont limits en capacits de calcul
dans des cas particuliers dtude de courbes ou de surfaces. Un nouveau venu joue
les trouble-fte depuis peu, Asymptote, qui allie les capacits esthtiques de ses
concurrents avec la puissance de calcul du C++.
Pour information, les dessins du prsent ouvrage qui ne sont pas produits par des
logiciels de calcul sont crs en MetaPOST, comme les figures des pages 220, 264,
193 ou 195 par exemple.

 * 
 
 
   (! 

Le logiciel TeXmacs permet de crer des documents la LATEX , mais en wysiwyg c . Dans
le cas qui nous occupe, il permet galement dinsrer dans le texte des sessions de certains
logiciels : giac/XCAS, Maxima, MuPAD, Yacas, PARI/Gp, GnuPlot, Shell,...
On peut ensuite exporter le document obtenu au format pdf, ps, html, LATEX.
Rponse du logiciel

AVEC XCAS
Voici un exemple de session XCAS : on lappelle en cliquant sur Insrer->Session->giac
> int(sqrt(1-x^2),x,0,1)
1
4
La commande saffiche en bleu et le rsultat en noir avec de belles polices. Notez
quun menu giac apparat avec les principales commandes.

AVEC M AXIMA
Il en va de mme avec Maxima :
(%i1) integrate(sqrt(1-x^2),x,0,1)
(%o1) 4

c What You See Is What You Get

26



    


 !    " ! 


On peut galement obtenir une sortie graphique avec GnuPlot :


Rponse du logiciel

Il faut toutefois noter que TeXmacs est gourmand en mmoire et provoque des crashs inopins. Lexport LATEX nest pas optimum.
Il peut cependant rendre de bons services lorsquil sagit de crer une feuille de TD utilisant
lun des logiciels implants.

 * 
 
 
  
) 

 + 


Plutt que dutiliser les diteurs livrs avec les logiciels (quand il y en a), on peut prfrer
rester lintrieur de son diteur prfr, Emacs, qui possde des modes permettant douvrir

27


   


des sessions XCAS ( en fait giac ), Maxima, MuPAD, Yacas...
Par exemple, pour utiliser Maxima sous Emacs on installe maxima-emacs.el. Les heureux utilisateurs de distributions Debian ou Ubuntu peuvent par exemple lancer dans un Shell en
mode super-utilisateur :

apt-get install maxima-emacs

Pour XCAS, on installera mupacs.el et on regardera laide sur le site XCAS.


Une session XCAS sous Emacs ressemble donc a :

Rponse du logiciel

Giac CAS for mupacs, released under the GPL license 2.0
| (c) 2007 B. Parisse & al (giac), F.Maltey & al (mupacs) |
>> TEXTWIDTH:=148:
// :2: syntax error, unexpected T_END_INPUT at end of input
148:undef
>> int(ln(x),x,1,e) ;
1
>> nextprime(1234894343132) ;
1234894343159
>> A:=[[1,2],[3,4]] ;
[[1,2],[3,4]]
>> A^2 ;
[[7,10],[15,22]]
>> eigenvals(A) ;
(-sqrt(33)+5)/2,(sqrt(33)+5)/2
>>

Il ne faut pas soccuper des 5 premires lignes.


Pour diter une saisie prcdente, on tape

Pour Maxima, cela donne :

28



- .

# $
 ! %! !"   
 !
Rponse du logiciel

Maxima restarted.
(%i1) S(x):=1/(x^3+x^2+x+1);
1
S(x) := --------------3
2
x + x + x + 1

(%o1)

(%i2) partfrac(S(x),x);

(%o2)

, - 

1
x - 1
--------- - ---------2 (x + 1)
2
2 (x + 1)

 +  


 

Cest ncessaire quand on a besoin la fois de calcul formel et de calcul numrique sophistiqu. En gnral quand on utilise simultanment deux domaines des mathmatiques loigns,
chacun des deux tant trait par deux logiciels distincts, il est ncessaire de les faire communiquer.

  & ' 


 

La souris est utilisable aussi sans environnement graphique (sous UNIX). Les rsultats doivent
tre au mme format que les instructions (voir la section c. page 14) dans la mesure o les
instructions voulues concident entre les deux logiciels ! Pour changer commodment les hauteur de casse dune chane de caractres, on pourra passer par lintermdiaire dun diteur de
texte comme Emacs.



   
(!

Beaucoup de logiciels fournissent des instructions pour lire ou crire des donnes dans un
fichier texte. En crivant le rsultat obtenu par un logiciel dans un fichier, et en lisant ce fichier
avec un autre logiciel, on ralise une communication entre logiciels.



 ' )     



*
+ ,
!-

Linterprteur de commande des systmes UNIX est particulirement adapt la communication entre les logiciels grce au tubage de processus. Certains logiciels de calcul prsentent

29


   


des commandes pour faire excuter des instructions par le Shell.
Par exemple Scilab fournit la commande  . Linstruction :

 (ls)
fonctionne souvent mieux que la commande interne  sur certains systmes. On peut aussi
augmenter la prcision du calcul. . . unix_w("echo 4*a(1) | bc -l")

 ("echo

4*a(1) | bc -l")

Il faut noter la manire dont les apostrophes sont protges ici.



.   /  
 
! 0
  + 

Pour fabriquer des noms de fichiers o crire, pour fabriquer des instructions GnuPlot (par
exemple) placer dans un fichier, pour utiliser ce qui prcde en gnral, il est pratique de
manipuler les chanes de caractres dans le logiciel de calcul. Par exemple dans Scilab :
un="echo "
deux="*a(1) | bc -l"
x=12
y=3
z= (x/y)
chaine=[#/bin/sh;
un+z+deux;
exit 0]
instr="date +%d:%m:%Y-%H:%M:%S"
D= (instr);
nom=essai+D+sh
 (nom,chaine)
 (sh +nom)

Pour inclure la date et lheure dans le nom du script, on utilise linstruction 

.  

.

     

Des fichiers spciaux qui ne sont pas des fichiers rguliers sont bien utiles : les entres-sorties
standard. On les obtient par les variables #$%& ; #$'& dans Scilab; elles peuvent tre
utilises dans un script Shell par exemple par la commande  
.
Lintrt nest pas que cosmtique : quand on veut tester beaucoup de paramtres diffrents
pour un calcul donn cela fait gagner beaucoup de temps !

30


La programmation
Logiciel(s) abord(s) : MuPAD Scilab XCAS

Problmatique : Description des techniques de contrle de flux dans


les instructions et de quelques astuces.




# !"#$

   

La syntaxe est proche de celle du langage C++ :a


Nom_de_la_procedure(variables):{

.

le programme proprement dit

.
}

On commence par ouvrir une session programme en tapant simultanment sur


par le menu Edit->Ajouter->Programme.
On accde ainsi lditeur de programme. On rentre :



et

ou

double(x):{
 (2*x)
}

On clique sur OK pour vrifier si tout va bien. Normalement, on obtient un message encourageant :
Rponse du logiciel
Success
// Success compiling double

Dans une session de calcul, on rentre alors


a XCAS est crit en C++, ce qui le rend beaucoup plus maniable et rapide : il peut tre facilement excut par un autre

programme et est donc directement compil par les librairies C++ de lordinateur, sans passer par un noyau propre
comme MuPAD ou MAPLE.


      

double(37)

et on obtient le rsultat escompt...


On peut rendre le rsultat plus convivial :
double(x):{
"Le double de "+x+" est "+ 2*x
}

 

On concatne ainsi des chanes avec un + .





La syntaxe suit le mme principe :


p:1; / / i n i t i a l i s a t i o n
( k:1; k<7; k:k+1){ / / k v a r i a n t d e 1
p:p*k;
/ / p d e v i e n t p * k e t on r e c o m m e n c e

avec

un

pas

de

On calcule ainsi 7 !
On aurait pu remplacer lincrmentation k:=k+1 par lcriture quivalente k++, comme en...
C++.
Mais pour incrmenter dune valeur diffrente de 1, on utilise k:=k+incr


Il ne faut pas utiliser i comme variable locale car i est un complexe !

On aurait pu crire une procdure pour faire plus joli :


factofor(n):{
 k,p; / / o n i n t r o d u i t
p:1;
( k:1; k<n; k:k+1){
p:p*k;
}

 
}

32

n+"

"+p;

deux

variables

internes

au

programme

&    


Le rsultat est certes plus lisible avec la dcoration du point dexclamation, mais
cela le rend aussi inutilisable par la suite en tant que rsultat lintrieur dun autre
calcul.
On pourra donc tre amen remplacer return n+" ! ="+p; par return p;



1!

Reprenons le calcul prcdent avec un test darrt tant que :


p:1; k:1;
 ( k<7){
k:k+1; p:p*k;
}

Ou, sous forme de procdure :


factowhile(n):{

 k,p;
p:1;
k:1;
 ( k<n){
p:p*k;
k:k+1;
}

 

p;





On ne change pas une quipe qui gagne :


factif(n):{
 (n0)   1;
  n*factif(n-1);
}

et en plus on voit une procdure rcursive.





%

 ! 0

Il faut bien distinguer

les ensembles (set ) qui sont des collections non classes dexpressions toutes diffrentes spares par des virgules et encadres par des accolades prcdes de % ou bien
entre crochets prcds de 

33


      

ens1: [2,4,1]; ens2:%{2,5,8,5%}

On peut effectuer les oprations usuelles sur les ensembles


ens1

  

ens2; ens1



ens2; ens1



ens2;

lensemble vide se note

 []
%{%}

les suites (sequence) qui sont des collections classes dexpressions (cest--dire
avec des lments dindice 0, 1, etc.), diffrentes ou non, spares par des virgules et
encadres ou non par des parenthses.
s:5,7,5,1,2,3

On peut aussi utiliser les oprateurs   et $ pour des suites dfinies par une formule
explicite

 (k^2,k15)
(p^2) (p15)
m 5

les listes (li st ) qui sont des collections classes dexpressions spares par des virgules
et encadres par des crochets. La diffrence, cest que lon peut avoir des listes de listes
et si une instruction a plusieurs arguments, une suite ne peut pas tre lun de ces arguments.
Notez au passage quelques fonctions utiles :
s1:(j) (j-22); s2:a,b,c,d,f;
" (s2); / / s i z e c omme t a i l l e  .
s2[0];
s2[14];
s3:(s1,s2); / / l e s s u i t e s s e c o n c a t n e n t n a t u r e l l e m e n t
L1:[s1]; L2:[s2];
/ / une l i s t e e s t une s u i t e e n t r e
" (L2);
/ / nombre d o p r a n d e s
L2[3]; L2[0];
/ / n o t e z b i e n que l e p r e m i e r o p r a n de
numro

crochets

porte

le

L2[24]
 (L1,L2)
   (x->x>0,L1);   (x->x<0,L1);
(L1,232); (L2,3()));
supprimer

un

//

pour

substituer

ou

oprande

(L2,);
"((x,y)->x*y,L1,L2);

34

les chanes de caractres (st r i ng ) sont des juxtapositions de caractres qui ne sont pas
values par XCAS si ce nest en tant que simple sigle muet . On place les lments de
la chaines entre guillemets "".

&    
C:"-&_ehdslqjbch123+4/*5-6*

^"

On concatne les chanes avec loprateur + :


D:"tralala"; F:", pouet pouet
G:D+F

"

mid(C,5,2) renvoie une partie de la chane C de longueur 2 partir du 6e caractre :


(C,5,2)


Pour XCAS, comme pour les mathmaticiens, le premier entier naturel est 0.

Pour des utilisations particulires, je vous renvoie laide. Voici par exemple un petit
programme qui transforme un nombre entier en une chane de lettres : on groupe les
chiffres deux par deux puis on traduit le nombre obtenu en lettreb en utilisant son code
ASCII. Ce programme sert en particulier pour le dcodage RSA.
alph(n):{
//
 l,L;
L:[];l: (n);
chane

forme

on

rentre

//
de

ses

un

est

entier

une

liste ,

cat

transforme

en

la

chiffres

 (k:0;k<" (l);k:k+2){


L: (L, ( 
(l,k,2)))

//

expr

transforme

de

nombres

une

chane

en

nombre

  (L);
lettres

selon

//
les

la

liste

codes

ASCII

est

transforme

en

Ou bien un autre qui crit en majuscules un mot rentr en minuscules :


majuscule(c):{
C:""; / / l a f u t u r e c h a n e m a j u s c u l e , v i d e a u d p a r t
(j:0;j<" (c);j++){C:C+( (c[j])-32 )} ;
}

Notez que ** ++(r)envoie la liste des codes ASCII des caractres de la chane et
(liste) fait linverse. Voir aussi la section f. page 86.
b En ASCII, les majuscules ne sont codes que par des nombres de deux chiffres.

35


      


Connaissez-vous le code ASCII ?


La mmoire de lordinateur conserve toute donne sous forme numrique. Pour
coder chaque touche du clavier, on utilise depuis les annes 60 le code ASCII (American Standard Code for Information Interchange).
On dit que cest un code 7 bits, cest--dire que chaque caractre est cod par une
liste de 7 chiffres gaux 0 ou 1 : combien de caractres diffrents peut-on ainsi
coder ?...
Par exemple les codes 65 90 reprsentent les majuscules, les codes 97 122 reprsentent les minuscules, dans le mme ordre. Il suffit donc de soustraire 32 au code
de la minuscule pour obtenir la majuscule correspondante.
Une fonction XCAS donne ces nombres : (caractre) et ([liste de
nombres]) effectue lopration rciproque.



      2 

XCAS offre la possibilit dutiliser les instructions prcdentes traduites en franais.


Les boucles for deviennent des boucles
avec une syntaxe diffrente :
s:0;
 j

de 2*1-1

,

2*6-1

, avec la mme syntaxe quen anglais ou bien





s:s+j;;

donne la somme des six premiers entiers naturels impairs.

 
Les boucles while deviennent des boucles   , avec la mme syntaxe quen anglais ou
bien avec une syntaxe diffrente :
k:1;
 

6^k%11

1%11 

k:k+1;

   ;

donne le premier entier naturel non nul k tel que 6k 1[11].

Et cest pareil avec  au lieu de if :


test_syr(u):{
 u%20%2  u:u/2;
 u:3*u+1;

36

&   '!(

;
}

Ce code effectue un petit test pour construire la suite de Syracuse.

Tortue XCAS : programmation pour petits et grands...


En tapant sur  +  on ouvre une fentre tortue pour permettre de jeunes
enfants de sinitier la programmation en dessinant. Vous consulterez laide trs
complte ce sujet.
Voici par exemple des instructions permettant de construire une petite frise
grecque :
n:100;   (n>0)

  

  

n; 

 ;n:n-10;

et on obtient :

 # / #0



   

La syntaxe gnrale:
Nom_de_la_procedure:(variables)

 


le programme proprement dit

37


      




Par exemple
double:(x)

 
2*x



On valide. Normalement, on obtient un message encourageant :



double(x)

On rentre alors
double(37)

et on obtient le rsultat escompt...


On peut rendre le rsultat plus convivial :
double:(x)
 
 (
, ' (2*x)."



est le double de ". ' (n));

On concatne ainsi des chanes avec un . .





La syntaxe suit le mme principe :


p:1:
 k 
p:p*k

;

 

On calcule ainsi 7 !
On aurait pu crire une procdure pour faire plus joli :
factofor:(n)
 k,p;
 
p:1:
 k  1  7   1

p:p*k

;
 (
, ' (n)."!". ' (p));



38

&   '!(



1!

Reprenons le calcul prcdent avec un test darrt tant que:


p:1: k:1:
 k<7

k:k+1: p:p*k

 :
p;

Ou, sous forme de procdure :


factowhile:(n)
 k,p;
 
p:1; k:1;
 k<7

k:k+1: p:p*k

 :
 (
, ' (n)."!". ' (p));







On ne change pas une quipe qui gagne :


factif:(n)
 
 n0  


n*factif(n-1)


;

:

qui est une procdure rcursive.





% 

 ! 0

Cest un peu le mme principe que sous XCAS.

les ensembles
ens1:{2,4,1}; ens2:{2,5,8,5};

On peut effectuer les oprations usuelles sur les ensembles


ens1

  

ens2; ens1



ens2; ens1



ens2;

lensemble vide se note


{}

39


      


les suites
5,7,5,1,2,3;

On peut aussi utiliser l oprateur $ pour des suites dfinies par une formule explicite :
p^2 p15;
m 5;

les listes
Notez quelques fonctions utiles :
s1:i i-22;
s2:a,b,c,d,e;
L1:[s1]; L2:[s2];
(L2);
/ / nombre d o p r a n d e s
L2[3];
/ / e x t r a i t l e 3 me o p r a n d e
L2[35];
   (L1,x->x>0)
(L2,b32); (L1,2z); (L2,5());
tant

la

liste

//

null ()

vide

(L2,);
"(L1,L2,(x,y)->x+y);
L3:L1.L2; / / p o u r c o n c a t n e r

les chanes de caractres


C:"-&_ehdslqjbch123+4/*5-6* ^";
K:"tralala"; F:", pouet pouet !"; H:""
G:K.F.H

 (C,5,2) renvoie une partie de la chane C de longueur 2 partir du 6e caractre :

 ("123456789",4,

2)

Pour des utilisations particulires, je vous renvoie laide. Voici un petit programme qui
transforme un nombre entier en une chane de lettres qui peut servir pour le dcodage
RSA.
alph:(n)
/ / on
 l,L;
 
L:[];l: ' (n);
forms

des

chiffres

rentre

un

entier

//
de

est

une

 k  0    (l)-1   2



L:L.[ ' ( (l,k,2))]
la

chane

en


:
40

la

chane

//

text2expr

transforme

nombre


:
 -- .(L);
lettres

liste ,

//

la

liste

est

transforme

en

chane

de

&&    


 # $


Pour excuter un fichier dans Scilab, on peut taper  nomDuFichier. Le logiciel Scilab
naime pas les appels rcursifs des fichiers pour les excuter dans des procdures : sa pile
sature. Il vaut mieux tout placer dans des fonctions. On excute les fichiers juste pour dfinir
les fonctions, qui, elles, peuvent tre appeles dans des procdures intriques.
Les instructions de contrle de flux de Scilab sont dcrites dans le chapitre Programming de
laide en ligne. La syntaxe na rien de surprenant. Voici une boucle qui stocke des nombres
dans un tableau vertical, en affichant llment chaque tape.
t1:3
T[]
 it,

(i,i);
T[T;i];

On construit maintenant une fonction test qui effectue diffrentes procdures suivant les
valeurs de la variable. Il faut noter la manire dont sont protges les apostrophes dans les
chanes de caractres. La premire boucle  est tout ordinaire.

  ytest(x)


a"Cest ltape"
btrois
yx
 x3  

(b,a) ;


 or([xt])   ;
 y (x)+" nappartient



 

pas t"

La seconde boucle  permet de terminer la fonction rapidement si la variable x appartient


au tableau t dja dfini. Elle peut tre crite aussi bien

 and([x~t])  
y (x)+" nappartient


pas t"

Pour exploiter la fonction test, il suffit dexcuter la boucle

 i[3*t

t],

test(i)

Le logiciel Scilab travaille essentiellement avec des fonctions, des nombres rels en virgule
flottante, des chanes de caractres, des tableaux forms partir de ces lments, et des fonctions. En gnral, il ny a pas dclarer de types de variables.

41

Deuxime partie

CALCUL


Arithmtique
Logiciel(s) abord(s) : Gp Yacas XCAS Scilab Octave Maxima Bc
GnuPlot




"  %
   
  $

Pour calculer avec 1000 dcimales, taper dans un terminal :


bc -;

on obtient une rponse du genre :


Rponse du logiciel
bc 1.05
Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type warranty.

Il suffit de taper

 1000
pour obtenir la prcision voulue en ajustant la variable  , et
4*(1)

pour obtenir le quadruple dArctan(1) :


Rponse du logiciel
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
45432664821339360726024914127372458700660631558817488152092096282925\
40917153643678925903600113305305488204665213841469519415116094330572\
70365759591953092186117381932611793105118548074462379962749567351885\
75272489122793818301194912983367336244065664308602139494639522473719\
07021798609437027705392171762931767523846748184676694051320005681271\
45263560827785771342757789609173637178721468440901224953430146549585\
37105079227968925892354201995611212902196086403441815981362977477130\


   


99605187072113499999983729780499510597317328160963185950244594553469\
08302642522308253344685035261931188171010003137838752886587533208381\
42061717766914730359825349042875546873115956286388235378759375195778\
18577805321712268066130019278766111959092164201988

Le temps de rponse est variable suivant les machines, et augmente fortement quand on augmente encore la prcision.
Le rsultat est-il juste ?



   

On rgle la prcision avec /  ou /01023 qui doit tre un nombre entre 1 et 1000

/ :1000:;
4* ( (1))
Voir aussi 5.1 page 56.



   3

On rgle la prcision avec  , puis on utilise  :

  : 1000;
 (4*atan(1));



  

La prcision daffichage est donne ou fixe par linstruction \.


\p

4
4* (1)
\p 1000

4

Le rsultat est-il le mme que pour Bc ?



  4 

La prcision des calculs approchs est donne par linstruction

1 4 ()
Pour obtenir ponctuellement des calculs en prcision arbitraire, il suffit de le demander lors
du calcul approch.

((4,1000)
Pour basculer la valeur de la prcision, taper

46

 ! )
 
 * !

4 (1000)
((4)
Pour revenir la prcision prcdente, taper

4 (10)
((1/4)
((4)
Mais la prcision maximale est conserve pour la valeur .

 )
    
Le logiciel GnuPlot pose quelques problmes avec des nombres trop grands ou trop petits
comme le montre la retranscription de session suivante :
gnuplot>



2**(30)
Rponse du logiciel

1073741824

gnuplot>



2**(31)
Rponse du logiciel

-2147483648

gnuplot>



2**(32)
Rponse du logiciel

gnuplot>



2**(-30)
Rponse du logiciel

9.31322574615479e-10

gnuplot>



2**(-31)
Rponse du logiciel

-4.65661287307739e-10

47


   


gnuplot>



2**(-32)
Rponse du logiciel

gnuplot> print 2**(-32)


^
undefined value

Le logiciel rpte la dernire instruction accompagne dun commentaire pour avouer son
impuissance.

 "'   
  1
Le logiciel Bc dtecte naturellement une entre en base 16 avec la saisie des chiffres A, B, C, D,
E. Le rsultat par dfaut est en base 10.
Voici un exemple daddition en base 16 avec le rsultat en base 7 :

 7
F+E

et Bc fournit le rsultat 41.


Pour rentrer des nombres dans une base diffrente de 10, il faut changer la variable  ,
ce qui demande un peu dattention. Dans la retranscription suivante, les instructions saisies
sont repres par un point-virgule final.
% bc -lq

 ;

Rponse du logiciel
10

 ;
Rponse du logiciel
10

 7;
  ;
A;
Rponse du logiciel
13

48

  ! 

66+22;
Rponse du logiciel
121

 A;
 A;
2*7;
Rponse du logiciel
14

 ;

 " 

Les congruences de nombres entiers sobtiennent souvent dans les logiciels de calcul par une
instruction qui ressemble mod(x,p). Les rsulats ne sont pas toujours positifs, cest--dire
dans lintervalle [0, p 1] N.
Cherchons reprsenter lentier relatif 5 dans Z/3Z :
Avec Gp

5
(-5,3)
Avec Maxima

5/)3:3;

(-5);
5/)3:6.)3;
Avec Octave
mod(-5,3)

Avec Scilab


(-5,3)
 
(-5,3)
Avec Yacas

5
(-5,3)
Avec XCAS
-5%3

On peut bien sr calculer dans Z/nZ :

49


   


x:7%9; y:4%9;
3*x^2-5* y^2

donne
Rponse du logiciel
4 % 9

Si lon veut connatre le chiffre des units de 20082007

2009

, on peut faire :

(2008)^(2007^2009)%10

...mais cela ne donne rien de probant. Mieux vaut travailler tout de suite modulo 10 :
(2008%10)^(2007^2009)

rpond instantanment que le reste est 2. On peut prfrer demander directement le reste
avec la commande  (n,p) :



((2008)^(2007^2009),10)

Si lon veut limage de p%n par lapplication canoniquement associe de Z/nZ sur N, il suffit
dutiliser %0 :
k:5%11;
k^(2785);
k^(2785)%0

Pour dautres utilisations du calcul modulaire, voir le thme 7.2 page 247 et la section f.
page 86.

, 2 
% 

!  + 
 
 

Le sujet est plus que vaste ! Contentons-nous dune petite exprimentation sur le thorme
des nombres premiers.
Conjectur par G AUSS (encore lui !) et L EGENDRE, approch par T CHEBYSHEV , ce thorme a
fini par tre prouv indpendamment et simultanment par Jacques H ADDAMARD et CharlesJean de L A VALLE P OUSSIN en 1896.

50

# + 

Thorme des nombres premiers


En dfinissant, pour tout rel positif x, le nombre (x) comme le nombre de
nombres premiers infrieurs x, le thorme des nombres premiers snonce de la
faon suivante :
(x)

x
ln(x)

Construisons une fonction qui compte le nombre dentiers premiers infrieurs un nombre
donn n. On utilise   qui teste si un entier est premier.
On peut dabord penser une dfinition rcursive :
pir(n):{
(n<2){  0;} / / p o u r s a v o i r s a r r t e r
 (  (n)){  pir(n-1)+1;} / / o n
premier

 

et

on

rajoute

si

le

nombre

est

descend

pir(n-1);

}:;

a marche en ayant pris soin de rgler le niveau de rcursion du CAS au maximum (dans la
fentre de configuration du CAS).
Cependant, le niveau de rcursion nest pas infini et la fonction bloque sur notre ordinateur
pour n = 4200.
Nous allons donc plutt utiliser un compteur et une boucle for :
pif(n):{
k:0;
(j:0;j<n;j++){
(  (j)){k:k+1;}
premier

et

on

//

regarde

le

on

rajoute

au

compteur

si

est

suivant

k}
}:;

Mais plutt que de tester les nombres un par un, on peut utiliser la commande
qui donne le premier nombre premier suprieur n :
pin(n):{
k:0;
(j:2;j<n;j: 
k:k+1;}
k}:;

  (n)

(j)){

Il est noter que XCAS utilise en arithmtique la librairie de PARI/Gp.


Ainsi,   affiche en ralit le plus petit entier pseudo-premier suprieur ou gal n.

51


   


Il existe en effet deux tests :  (n) et  
 (n). Le premier test est sr mais
peut devenir trs lent pour de trs grands nombres. Le deuxime est plus rapide mais nest
fiable que pour une rponse ngative. Sil rpond 1, on peut juste penser que le nombre a de
bonnes chances dtre premier car il a pass un certains nombres de tests de primalita .
Pour de plus amples renseignements, vous pouvez galement consulter le manuel PARI/Gp
disponible dans la rubrique Aide de XCAS.
1
Maintenant, comparons cette fonction avec x 
:
ln(x) 1
p:polygone_ouvert( ( ([50*k,pin(50*k)]),k02000))
les

points

( k , pin ( k ) )

avec

//

on

relie

un

 de 50 jusqu 100 000


c: (x/((x)-1),x3100000, + 
 7)
En 81 secondes, on obtient :
Rponse du logiciel

  Les courbes reprsentatives de et x 

x
ln x1

sont extrmement proches



   /x 

x
2

1
t  
 
 

ln t

G AUSS conjectura la fin du XVIII sicle que (x) tait quivalent Li(x) au voisinage de +.
tablissons un petit tableau comparatif avec XCAS. Mais dabord, dfinissons la fonction Li :
Li(x): ( (1/(t),t,2,x))
Li(100000)
a B EL ABAS , Karim Site officiel de PARI/GP . URL: http://pari.math.u-bordeaux.fr/.

52

, + p -
%!

Nous obtenons :
Rponse du logiciel
[9681.171008,9661.54761,9659.001899,9658.438958,9658.302243,9658.268308,
9658.25984,9658.257723,9658.257194,9658.257062,9658.257029]

Que se passe-t-il ? XCAS renvoie en fait une srie dapproximations plus ou moins fines de
lintgrale : mthode des trapzes, point milieu, Romberg, etc., la plus fine tant la dernire.
Modifions donc notre dfinition de Li :
LI(x):{
r: ( (1/(t),t,2,x));
r[" (r)-1]; / / o n p r e n d l e d e r n i e r
}

de

la

liste

On peut alors crer un tableau comparatif :


[["x","(x)","Li(x)","1/((x)-1)"], ([10^k,pin(10^k),Li(10^k), 
(1/((10^k)-1))],k28)]

et on obtient, aprs environ 8 minutes de compilation :


Rponse du logiciel

(x)

Li(x)

100

25

29.1

1000

168

176.6

10000

1229

1246.5

100000

9592

9658.3

1000000

78498

78984.6

10000000

664579

668749.5

100000000

5761455

5801743.9

1/(ln(x)-1)

27.7

169.3

1218.0

9512.1

78030.4

661469.0

5740303.8

. 2 
p 3

Le logiciel Gp connat les nombres p-adiques. Il suffit de les rentrer avec la notation de Landau
des dveloppements limits.
a:a49+O(5^3)
a/5
a*5
 (a)

53


quations numriques
Logiciel(s) abord(s) : XCAS MuPAD

,

# !"#$

Comme pour de nombreux logiciels de calcul formel, XCAS permet dobtenir dans certains cas
les solutions dune quationa sous forme exacte grce la fonction  :

 (x^2+3*x+10) / / x e s t
 (t^2+3*t+10,t)
 (x^2+3*x+1) / /  0 p e u t
 (x^2+x+10) / / n e p a s

l inconnue

tre

par

dfaut

omis

oublier

de

cocher

" complex "

dans

" Cas

Configuration "

 (x^2+a*x+10,x)
 (x^2+a*x+10,a)
Notez que le paramtre a est considr par dfaut comme tant rel. Si lon veut travailler
avec des variables complexes, il faut cocher 8   dans le menu de configuration cas.
Il faudra alors utiliser la fonction assume pour mettre des hypothses sur a :

 (x^2+a*x+10,x)
 ( (x^2+a*x+10,x)[0])
 (a,real)
 ( (x^2+a*x+10,x)[0])

//

partie

//

est

relle

de

maintenant

la

premiere

suppos

Toutefois, nous atteignons parfois les limites du calcul formel :

 (x+(x)+1000)
et cest une approximation numrique que nous obtenons.
a Nous examinerons plus prcisment les quations polynomiales la section 5.2 page 61.

rel

racine


  !


Configuration du CAS
Selon les cas, il faudra veiller bien configurer le CAS b :
-  ou non pour avoir des rsultats exacts ou approchs;
- 8  ou non pour avoir des rsultats (exacts ou approchs) sous forme relle
ou complexe;
- 8   ou non pour travailler avec des variables complexes ou relles.

Il existe de nombreuses mthodes dapproximation. La plus clbre est celle de Newton. On


peut lutiliser directement sous deux formes :

  (x^2-2,x1) / / x  1 p r c i s e
 (x^2-20,x1,newton_solver)

le

dpart

de

l algorithme

Pour connatre la prcision de notre calcul :

  (x^2-2,x1)- (2)
Nous avons donc 15 bonnes dcimales.
Si nous en voulons plus, il existe deux appels optionnels la fonction newton : le nombre
maximum ditrations et la prcision minimum recherche. Par dfaut, ces valeurs sont respectivement fixes 12 et 108 .

  (x^2-2,x,1,12,1 -50)- (2)

//

1 e 50

signifie

10^( 50)

XCAS nous affiche -2.828427. Reflexion faite, ce nest pas tonnant : la variable /  qui
fixe le nombre de chiffres significatifs est par dfaut fix 10. Si nous voulons plus de prcisions, il faut faire varier /  :

/ :100
  (x^2-2,x,1,12,1 -50)- (2)
et nous avons 100 bonnes dcimales.
Nous avons dailleurs besoin de moins de 12 itrations pour arriver ce rsultat. Voici un petit
programme indiquant le nombre ditrations ncessaires pour obtenir une prcision donne :
Newton(f,pre,u0):{
 un,aun,fp,k;
fp: 
(f);
k:0;
aun: (u0);
un: (u0-f(u0)/fp(u0));
 ((un-aun)>pre) {
aun:un; un: (un-f(un)/fp(un));
b Dans Cfg -> Cas Configuration

56

#    
k:k+1;
}

 

un+" est la solution trouve "


+ (pre) + " prs aprs "+ k +" itrations";

Excutons ce programme :
Newton(x->x^ 2-2,1 -100,2);

Il nous assure que 8 itrations sont ncessaires pour obtenir AU MOINSc 100 bonnes dcimales...
Pour des cas plus lourds , nous pouvons utiliser la mthode de Steffenson qui acclre celle
de Newton :

 (x^2-20,x0,1 -10,steffenson_solver)


Bizarre... Cest quen fait la mthode de Steffenson comme celle de Newton est trs rapide,
mais elle ncessite une bonne premire approximation de la racined .
Mieux vaut donc rentrer :

 (x^2-20,x1,1 -10,steffenson_solver)


Cet inconvnient est encore plus mis en valeur avec lquation
 x + ln(x) + 100 = 0. En effet, si

on appelle f la fonction associe, lim f (x) = et f e100 = e100 100 + 100 > 0, donc la
x0

solution appartient lintervalle ]0 ; e100 [, ce qui indique que la solution est assez petite...

 (x+(x)+1000,x (-100))- (-100)


nous indique que nous sommes malgr tout assez proche de e100 .
Pour un choix de la mthode de rsolution numrique dun systme dquations linaires ou
non, voir lexemple page 196.

Format de nombre
Le format de nombre approch utilis par XCAS est par dfaut le format double (53
bits de prcision relative, soit environ 1016 ). Si /01023<16 (la precision est alors
independante de Digits, seul laffichage change). Si /01023  16, la librairie multiprcision mpfr est utilise. Donc on peut demander la prcision souhaite jusqu
DIGITS:=1000.

c Cest un-aun ( cest--dire u

n+1 u n ) qui doit tre infrieur la prcision dans notre programme : cela est suffisant
mais pas ncessaire pour avoir la prcision voulue.
d Voici un problme qui dborde du cadre de ce livre, mais quil serait trs intressant dexplorer, par exemple en
tudiant M ARLE , Charles-Michel/P ILIBOSSIAN , Philippe Mthodes numriques itratives . Paris: Ellipses, 2006

57


  !


Calcul avec des flottants
Attention au calcul avec des flottants : laddition nest pas toujours associative, 1 x
avec x de lordre de 10100 peut tre gal 1, enfin (0, 13)0, 3 nest pas forcment
nul car les nombres sont cods en base 2, donc seuls les entiers et les rationnels
dont le dnominateur est une puissance de 2 peuvent tre reprsents exactement.
Ceci entrane des rsultats qui peuvent surprendre. Voir le cours de maths assistes
par ordinateur de Bernard Parisse sur http://www-fourier.ujf-grenoble.fr/
~parisse/francais.html\//mat249

, # / #0
Loutil gnral est solve :

 (x^2-4*x+30,x);  (x^2-x+30,x);


Cest assez classique. Ce qui lest moins, cest la capacit de rsoudre des quations dpendant de paramtres.
S: (x^2 - s*x+p0,x):

Vous avez remarqu que les solutions des premiers exemples sont affiches entre accolades.
Interrogeons MuPAD :

 ( (x^2-4*x+30,x));
La rponse /5 32 nous indique quil sagit dun ensemble. Ceci a une grande importance si
nous voulons rinvestir les solutions trouves. Pour en revenir notre quation du deuxime
degr, lensemble des solutions comportera deux lments, ou plutt oprandes en langage
MuPAD. Nous pouvons demander le premier lment de cet ensemble grce la commande :

(S,1);
qui affiche le premier oprande de lensemble S.
Nous pouvons tre galement amens rsoudre des quations non pas sur C mais sur un
intervalle donn. Par exemple, si nous voulons rsoudre lquation x 2 = 4 sur R+ , nous indiquerons MuPAD que notre x doit tre positif :

 (x>0);
 (x^24,x);
On peut sinon utiliser les ensembles habituels avec les notations suivantes :

58

#   '!(

NonNegInt

PosInt

NegInt

Integer

2Z

Even

2Z + 1

Odd

Q
R

Real

R+
iR

Rational

PosRat

NonNegative

Positive
Imaginary

iZ

NegRat

NonNegRat

NonZero

Negative

IntImaginary

  Ensembles de nombres et MuPAD

Prime

 (x  2 --4  ):


 (x^2-40,x);
Une autre ruse permet de selectionner les solutions :
S :  ((x*PI/7)  0, x);
S    / --0  (-22, 22)
//

on

demande

des

solutions

dans

[ 22 ,22]

On peut rsoudre galement des systmes linaires :

  ():
 ({x+2*y+a*z-1,a*x+y+z2,2*x+a*y-z3},{x,y,z});
Il existe des outils dalgbre linaire plus adapts que nous verrons plus tard.
On peut rsoudre des inquations

 (x^2-2*x-4>2*x,x);
des quations trigonomtriques

 ((x)(x),x);
vous dimaginer dautres situations...
Un tudiant taquin nous a par exemple propos

 ((x)0*(x),x);
Pour avoir une approximation de la solution, on utilise float et hold(solve)

 (
( )(x+(x)+10));
ou numeric::solve(equation,inconnue)

 -- (x+(x)+10,x);
Au-del, MuPAD semble jetter lponge :

 (
( )(x+(x)+100));
puisque la rponse propose est lensemble vide.
Mais MuPAD utilise la mthode de Newton et a donc besoin dune bonne approximation de
dpart :

 -- (x+(x)+100,x1e-50 ( (-10)),9  


3 );
indique MuPAD de chercher une approximation de la solution dans [1050 , e10 ].

59

 
Polynmes

Logiciel(s) abord(s) : Yacas Gp XCAS Maxima Scilab

Problmatique : Manipuler les oprations lmentaires sur les polynmes, notamment la recherche de racines.

.

# $

Le logiciel Scilab peut traiter les polynmes. On peut dfinir la variable :


x(0,x)

dfinir le polynme x 2 + x + 1 :
Px^2+x+1

et calculer ses racines :

 (P)
Le polynme peut tre construit avec ses coefficients
Q([3
 (Q)

2 1],x,coeff)

Il est noter que si lon ne prcise pas le drapeau coeff, le polynme est dfini par ses
racines :
R([3
 (R)

2 1],x)

Le polynme driv sobtient comme suit :

  (R)
La matrice compagne du polynme P est obtenue par :
A

(P)

On peut retrouver le polynme :


 "  #$

(x*  ()-A)
Les racines de P sont comparer au spectre de la matrice compagnon (voir le chapitre 7.7) :

 (A)
Voici lexemple dune session Scilab qui cherche les racines de x 3 + x + 1 ; les commandes
sont marques (->) :
Rponse du logiciel
-->x=poly(0,x)
x =
x
-->P=x^3+x+1
P =
3
1 + x + x
-->roots(P)
ans =
! - 0.6823278
!
!
0.3411639 + 1.1615414i !
!
0.3411639 - 1.1615414i !
-->

. # /+ 
Le logiciel Maxima traite les polynmes et les fractions rationnelles en gnral. Trouver les
racines du polynme P se fait comme suit :
P(x):=x^2+2*x+3;

 (P(x),x);

La drive est la drive formelle de toutes les fonctions :

(P(x),x);
Voici lexemple dune session Maxima qui cherche les racines de x 3 + x + 1 ; les commandes
sont marques (Ci) et les rponses (Di) :

62

,&   
Rponse du logiciel
(C1) P(x):=x^3+x+1;
(D1)
(C2) solve(P(x)=0,x);

3
P(x) := x + x + 1

SQRT(3) %I
1
---------- - SQRT(31)
1 1/3
SQRT(3) %I
1
2
2
(D2) [x = (--------- - -)
(- ---------- - -) - --------------------,
6 SQRT(3)
2
2
2
SQRT(31)
1 1/3
3 (--------- - -)
6 SQRT(3)
2
SQRT(3) %I
1
- ---------- - SQRT(31)
1 1/3 SQRT(3) %I
1
2
2
x = (--------- - -)
(---------- - -) - --------------------,
6 SQRT(3)
2
2
2
SQRT(31)
1 1/3
3 (--------- - -)
6 SQRT(3)
2
SQRT(31)
1 1/3
1
x = (--------- - -)
- --------------------]
6 SQRT(3)
2
SQRT(31)
1 1/3
3 (--------- - -)
6 SQRT(3)
2
(C3)

. # !"#$


Le logiciel XCAS traite les polynmes plusieurs variables.
On rentre le polynme de manire symbolique :
P(x):x^2+2*x+3

Trouver les racines du polynme P se fait comme suit :

 (P(x))
La drive est la drive formelle de toutes les fonctions :

(P(x),x)
On peut obtenir un polynme alatoire de variable u, de degr infrieur ou gal 6 et coefficients entiers de valeur absolue strictement infrieure 100.


(u,6)
Voici lexemple dune session XCAS qui cherche les racines de x 3 + x + 1 ; les commandes sont
spares des rponses par des lignes de tirets :

63


 "  #$
Rponse du logiciel
P(x):=x**3+x+1
-----------------------------------------// Parsing P
// Success compiling P
3
x ->x +x+1
-----------------------------------------roots(P)
-----------------------------------------Evaluation time: 0.17
3
Unable to isolate x in ([x])->x +x+1

XCAS ne trouve pas de solution exacte. Il peut toutefois trouver des approximations :

 (P(x))
Rponse du logiciel

[0.682328, 0.3411639019 + 1.1615414 i, 0.3411639019 1.1615414 i]

Pour un autre exemple dactivit sur les polynmes, voir aussi la section b. page 151.

. # %
Le logiciel Gp traite les polynmes aussi avec des coefficients dans Z/pZ et dans les corps padiques.
Trouver les racines du polynme P se fait comme suit :
P(x)x^2+2*x+3
 (P(x))

La drive est la drive formelle de toutes les fonctions :

 (P(x),x)
Voici lexemple dune session Gp qui cherche les racines de x 3 + x + 1 :

64

,#   .


Rponse du logiciel
(21:15) gp > P(x)=x^3+x+1
(21:15) gp > polroots(P(x))
%2 = [-0.6823278038280193273694837397 + 0.E-28*I, 0.3411639019140096636847418698
- 1.161541399997251936087917687*I, 0.3411639019140096636847418698 + 1.161541399
997251936087917687*I]~
(21:15) gp >

., # 4

Le logiciel Yacas traite les polynmes comme les logiciels prcdents.


Trouver les racines du polynme P se fait comme suit :
Px^2+2*x+3
4 (P,x)

La drive est la drive formelle de toutes les fonctions :

/(x)

Voici lexemple dune session Yacas qui cherche les racines de x 3 + x + 1 :


Rponse du logiciel
In> Q:=x^3+x+1
Out> x^3+x+1;
In> PSolve(Q,x)
Out> {(Sqrt(31/108)-1/2)^(1/3)-(1/2+Sqrt(31/108))^(1/3),Complex((1/2+Sqrt(31/108))
^(1/3)/2-(Sqrt(31/108)-1/2)^(1/3)/2,Sqrt(3/4)*(Sqrt(31/108)-1/2)^(1/3)+Sqrt(3/4)*(
1/2+Sqrt(31/108))^(1/3)),Complex((1/2+Sqrt(31/108))^(1/3)/2-(Sqrt(31/108)-1/2)^(1/
3)/2,-(Sqrt(3/4)*(1/2+Sqrt(31/108))^(1/3)+Sqrt(3/4)*(Sqrt(31/108)-1/2)^(1/3)))};
In>

Les logiciels traits ici prsentent de nombreuses fonctions arithmtiques sur les
polynmes.

65

 
Fonctions
Logiciel(s) abord(s) : Bc Scilab Octave Yacas XCAS Gp Maxima

Notions informatiques : Dfinir une fonction. Utiliser une fonction.

Problmatique : Les fonctions sont centrales dans lutilisation des


logiciels de calcul. Tous les logiciels nont pas les mmes conventions pour dfinir une fonction mathmatique, ni pour lvaluer en
un point. Les fonctions sont construites partir doprations lmentaires et des fonctions classiques qui sont dans la bibliothque
du logiciel. Tous les logiciels nont pas la mme bibliothque : la
fonction scante qui est connue de Maxima et XCAS ne lest pas
pour Gp ; seul Maxima connat la scante hyperbolique. . .. La bibliothque de Bc mme avec loption : est trs rduite.

5

# %

Le logiciel Gp accepte les fonctions comme des expressions donnes par un galit-dfinition.
Pour dfinir la fonction machin, il suffit dentrer linstruction :
machin(x)1/(x)

Pour calculer sa valeur en 2, on tape


machin(2);

5 # /+ 
Le logiciel Maxima considre les galits comme des quantits valuer ; une galit-dfinition
est indique par linstruction -.
machin(x):=1/(x);

Lvaluation demande forcment du travail, suivant le type de rsultat que lon dsire.
machin(2);

donne la valeur algbrique ;


 %  &

 (machin(2));
donne une valeur approche et

 (machin(2));
donne un rsultat quivalent.

5 # !"#$




  

Le comportement de XCAS est sans surprise au vu de ce qui prcde.


machin(x):1/log(x)

dfinit une nouvelle fonction tout comme :


machin:x->1/log(x)

machin(2)

donne sa valeur algbrique au point 2 et

(machin(2))
en donne lapproximation tout comme
machin(2.0)

On peut transformer une expression en fonction avec

(expression,variable)

f:(x);
f(2);
f:(f,x);
f(2);

On peut galement dfinir la fonction drive dune fonction :


fp: 
fp(3)

68

 (+2*
);

/&   


Fonction et expression
Comme en mathmatiques, il ne faut pas confondre fonction et expression.
Par exemple,  
 attend comme argument une fonction et non
pas une expression. Ainsi le code :
fp: 

 ((x)+2*x);

renvoie une erreur.


Si lon prfre travailler sur les expressions, alors mieux vaut utiliser

(expression,variable) :
df(x):
((x)+2*x,x);

qui renvoie cos(x) + 2, puis :


fp:(fp(x),x);

qui renvoie x  cos(x) + 2


ou plus directement :
fp:(
((x)+2x),x)

qui renvoie x  cos(x) + 2.


Voir aussi c. page 115.



 ( 
   "
/  3     
 

  

Il existe depuis de nombreuses annes des logiciels de gomtrie dynamique qui sont utiliss
au collge et au lyce. Cependant, ntant vous qu dessiner ou ventuellement donner
quelques rsultats numriques, leur utilisation est limite et leur syntaxe, par souci dergonomie informatique, loigne les lves du problme mathmatique.
XCAS cependant, par sa puissance et sa souplesse, permet de coller au cours de mathmatiques tout en permettant dobtenir des rsultats performants.
Considrons par exemple le problme classique suivant donn en classe de Seconde :
On considre un triangle ABC rectangle en A tel que AC = 3 et AB = 4. Soit M un point quelconque du segment [AC]. On construit le rectangle AMNP tel que N appartienne [BC] et P
[AB].
tudiez laire du rectangle AMNP en fonction de la position de M.
Commenons par ouvrir une fentre de gomtrie en tapant simultanment sur  et 
puis dfinissons les points A et B dans un repre judicieusement choisi :
A: (0,0)
B: (0,-4)
libre

pour

//
//
y

plaons
plaons

tracer

la

A
B

tel

courbe

que

AB
la

4
fin

en
de

laissant
la

le

1 er

quadrant

sance

69


 %  &

Dfinissons ensuite le point C tel que le triangle ABC soit direct, rectangle en A et que lon ait
AC = 34 AB laide de la commande     :

    (A,B,3/4,C)


Crons maintenant un rel quelconque de [0; 3] que lon pourra faire varier la souris laide
de la commande   :
t: 

 (0 

3)

Dfinissons maintenant le point M. Nous qui sommes moiti mathmaticiens, nous savons
que nous allons crer en fait une fonction de [0; 3] dans le plan P qui un rel x de lintervalle
[0 ; 3] associe le point du plan de coordonnes (0 ; x).
Pour les lves, la notation :
M(x): (x,0)

est naturelle et rappelle que le point M dpend de la donne de son abscisse x.


Pour dfinir N, commenons par dfinir la perpendiculaire en M la droite (AC). La syntaxe
est tout fait naturelle grce   (Point,Droite). Noublions pas quen fait d est
une fonction de x :
d(x):  
 (M(x),
 (A,C))

Dfinissons ensuite N comme lintersection de d et (BC) grce  


N(x): 

 :

 (d(x),
 (B,C))

Pour obtenir P, nous commenons par dfinir la parallle (AC) passant par N (qui est bien
sr une fonction de x) laide de   (Point,Droite) :
D(x):  (N(x),
 (A,C));

puis lintersection de D et (AB) :


P(x): 

 (D(x),
 (A,B))

Il ne reste plus qu dfinir le rectangle APNM grce la commande  :


R(x): (A,P(x),N(x),M(x))

et dessiner le rectangle dpendant du paramtre t :

 (R(t),, + )


En faisant varier t la souris, le rectangle bouge .
Dfinissons maintenant la fonction qui x associe laire du rectangle :
f(x): (R(x))

Donnons son expression simplifie :

  (f(x))
70

/&   
Rponse du logiciel

4
3

x2 + 4x

Dfinissons le point X de la courbe reprsentative de f dabscisse t :


X: (t,f(t))

Traons enfin la courbe reprsentative de f laide de la fonction  :

 (f(x),x03,  )


Voici une visualisation statique :

  Le rectangle et la courbe reprsentative de f


Pour une autre activit gomtrique de Seconde, voir section b. page 95.

71


 %  &


assume ou element ?

Il aurait peut-tre t plus simple pour des lves de faire la construction en la


voyant pas pas tout en gardant une valeur formelle pour les expressions en utilisant  au lieu de   .
Il suffit, dans le code prcdent, de remplacer :
t: 

 (03)

par :

 (t[1,0,3])
o 1 reprsente une valeur arbitraire modifiable la souris.
On te ensuite toute rfrence la variable formelle x qui devient inutile puisque t
garde un rle formel.
Par exemple, le code contient :
M: (t,0)
d:  
 (M,
 (A,C))

5 # 1
Dans la calculette en mode texte appele par linstruction
dfinie comme suit :


 

 :, la nouvelle fonction est

machin(x){
1/(x)}

Lvaluation se fait naturellement.


machin(2)

5, # $




  

Dans le logiciel de calcul matriciel Scilab, la dfinition dune fonction est plus dlicate.

  ymachin(x)


y1/(x)

 
Lvaluation se fait naturellement en un point.

72

/,   .



machin(2)



     

Lvaluation en rafale qui est possible avec Scilab requiert un peu dattention. En utilisant ce
qui prcde,
t2:9
machin(t)

ne donne pas le rsultat voulu. Les oprations lmentaires peuvent tre forces la place
des oprations matricielles en les prcdant dun point : ; la place de ;. Lexponentielle
matricielle  et lexponentielle coefficient par coefficient  sont distinctes. Pour poursuivre lexemple, il faut alors dfinir la fonction en utilisant la division ponctuelle : attention
lespace derrire le nombre 1 !

  ymachin(x)


y1 ./(x)

 
t2:9
machin(t)

On a le bon rsultat, ce qui permet de tracer un graphe directement :

 (t,machin(t))
Le nombre de points dvaluation est volontairement limit.
Lvaluation marche avec des matrices quelconques :
v1:5
uv*t
machin(u)

5. # 4

Le logiciel Yacas dfinit les fonctions de manire similaire aux autres logiciels de calcul formel.
machin(x):1/)(x)

Pour calculer sa valeur en 2, on tape :


machin(2)

Pour obtenir une valeur approche, il suffit de le rclamer pour le rsultat prcdent.

((%)
73


 %  &


55 #  


Le logiciel Octave traite les matrices. Pour dfinir des fonctions, la procdure ressemble
celle de Scilab.

  ymachin(x)


y1 ./(x) ;

 
machin(2)
t[2;3]
machin(t)

Le point-virgule est ncessaire dans le corps de la dfinition de la fonction, car sinon la machine retournerait deux fois lvaluation.

74

 
Algbre linaire
Logiciel(s) abord(s) : Scilab Octave Maxima XCAS

Notions informatiques : Les logiciels Scilab et Octave sont avant


tout destins au calcul matriciel. Maxima peut faire des calculs sur les
matrices, XCAS est destin tout calcul...

Problmatique : Calculer avec des matrices.

6


# $
 
   

Construisons un vecteur colonne u et un vecteur ligne v :


u[2;3;5]
v[7 11 13]

Le produit scalaire t et la matrice A de rang un associe sobtiennent par multiplication :


tv*u
Au*v

On obtient les dimensions et le rang directement

" (u)
" (A)
(A)
Le logiciel Scilab prsente une sorte de produit tensoriel ;
u .*. A

La norme dun vecteur est par dfaut la norme euclidienne  (v). On peut rclamer la
norme Lp :  (v,p) ou L :  (v,inf).
Pour les matrices, ces instructions donnent les normes linaires associes aux normes Lp sur
les vecteurs, au sens des applications linaires : la norme de A est le maximum des normes
de Av pour v parcourant la boule unit. Linstruction  (A) donne la norme spectrale,
cest--dire le maximum des modules des valeurs propres.


 '     


La norme sur les matrices donne par la formule
par linstruction  (A,fro).





tr t A A , souvent utilise, est obtenue

5
 )
*
+ ) " 
  

On se donne un systme de trois quations trois inconnues dont les donnes sont alatoires.
A
(3,3)
B
(3,1)
V (A)*B

On vrifie que le vecteur AV B a des coordonnes proches de la prcision de la machine.


A*V-B

On se place maintenant dans un cas dgnr : on cherche lespace propre associ la valeur
propre 1.
A[0 1 0;1 0 1;1 1 0]
R ((A,t))
BA-R(2)*  (3,3)

Lespace propre est engendr par la famille V ici rduite un vecteur.


Z" (3,1)
[U,V] (B,Z)

Ce cas particulier se rsout aussi par linstruction


V  (B)



5  ) !




Pour obtenir les vecteurs propres v p et la matrice diagonalise D correspondant la matrice A, il suffit de taper :
[vp,D] (A)

On vrifie en tapant
A*vp(:,1)/D(1,1)
A*vp/D

La dcomposition de Schur donne les valeurs propres sur la diagonale de la matrice triangulaire T.
[U,T](A)

76

0    


6 #  
La syntaxe de base dOctave est commune avec Scilab. Les instructions ci-dessous sont encore valables.
u[2;3;5]
v[7 11 13]
tv*u
Au*v
" (u)
" (A)
(A)

Les instructions ci-dessous donnent aussi des rsultats similaires.


A
(3,3)
B
(3,1)
V (A)*B
A*V-B

Linstruction (A) donne les coefficients du polynme caractristique de A. On peut calculer le pseudo-inverse de la matrice dgnre.
p(A)
R (p)
BA-R(2)*  (3,3)
c (B)
c*B
B*c

La dcomposition de Schur est la mme que pour Scilab :


[U,T](A)

6 # /+ 


On dfinit une matrice avec
(%i1)

  :

  ([1,2],[3,4]);

On calcule son dterminant :


(%i2)

  (%i1);

Elle est donc inversible. On demande son inverse :


(%i3)

  (%i1);

Calculons le produit pour vrifier. On utilise le produit non commutatif symbolis par , un
point :
(%i4) )%i1%o3;

77


 '     


et on obtient bien lidentit.
Les valeurs propres sobtiennent avec     :
(%i5)

   (%i1);

On vrifie quil sagit bien des solutions du polynme caractristique donn par  :
(%i6)

 ((%i1,x)=0,x);

On calcule la puissance quatrime. On utilise << :


(%i7) (%i1)^^4;

6 # !"#$7     





     6

Quest-ce que lendomorphisme de R2 dexpression analytique canonique

x

y

1
2
x y
5
5
3
6
x+ y
5
5

On dtermine la matrice associe :


A:[[-1/5,-2/5],[3/5,6/5]]
Rponse du logiciel

1
5
3
5

2
5
6
5

On dfinit donc la matrice en donnant les vecteurs-ligne.


Calculons son carr :
A^2

On retrouve A; il sagit donc de la matrice dun projecteur dtermine par son noyau :

 (A)
Rponse du logiciel
[[2,-1]]



cest--dire Vect (2 ; 1) , et son image :

78

0   1
! 2 )
 2  

  (A)
Rponse du logiciel
[[-1,3]]






   

Dterminons les puissances entires de B =


1

B:[[1,a],[0,1]]

Calculons jusqu la puissance cinquime :

 (B^2); (B^3); (B^4); (B^5)


Rponse du logiciel



2a

 
,

3a

 
,

4a

 
,

5a

7 
    

Soit A =
1

1
. Pour quelles valeurs de a, la matrice A est-elle inversible ?
1

A:[[1,0,a],[1,a,-1],[a,0,1]]

On cherche les valeurs de a qui annulent le dterminant :

 (
(A)0,a);
Rponse du logiciel
[-1,0,1]

Il y en a trois.
On peut ensuite dterminer linverse de cette matrice :

 (A)
79


 '     


Rponse du logiciel



a
((a)3 )+a
a1
((a)3 )+a
((a)2 )
((a)3 )+a

((a)2 )
((a)3 )+a
a+1
((a)3 )+a
a
((a)3 )+a

0
((a)2 )+1
((a)3 )+a

   ) 
 )       !  # 

&8  

Crons une matrice :


M:[[1,0,1],[0,1,1],[1,1,0]]
Rponse du logiciel

Compltons-la par la matrice identit de mme taille. Profitons-en pour crer une petite procdure avec la commande   (M1,M2) qui place la matrice M2 au bout de la matrice
M1 si elles ont le mme nombre de lignes :
GJ(A):{
n:(A); / / o n c o m p t e
Id:
(n); / / o n c r e l a
  (A,Id) / / o n l a m e t
}:;

le

nombre

matrice
au

de

colonnes

identit

de

bout

Ainsi :
T:GJ(M)
Rponse du logiciel

80

de

taille

correspondant

0   1
! 2 )
 2  
Pour effectuer une combinaison linaire des lignes, on peut utiliser 9.

(k,M,i,j) qui
renvoie la matrice construite partir de M en remplaant la ligne L j par L j + k Li . Noubliez
pas que XCAS commence compter partir de 0 :
T:

9.

(-1,T,0,2)
Rponse du logiciel

On effectue L3 L3 L2 :
T:

9.

(-1,T,1,2)
Rponse du logiciel

On multiplie L3 par 12 avec


T:

=2=,(q)ui remplace L j par k L j :

9(-1/2,T,2)
Rponse du logiciel

1
2

1
2

1
2

On effectue L1 L1 L3 :
T:

9.

(-1,T,2,0)
81


 '     


Rponse du logiciel

1
2

1
2

1
2

1
2

1
2

1
2

et enfin L2 L2 L3 :
T:

9.

(-1,T,2,1)
Rponse du logiciel

1
2
1
2
1
2

1
2
1
2
1
2

1
2
1
2
1
2

Il ne reste plus qu extraire la matrice de droite avec une petite procdure maison :
JG(A):{
p:(A);
A[0p-1,p2*p-1]

//

on

extrait

les

lignes

p 1

}:;

Ici :
MM:JG(T)
Rponse du logiciel

1
2
1
2
1
2

1
2
1
2
1
2

1
2
1
2
1
2

et on a bien le produit des deux matrices :


MM*M

82

p 1

et

les

colonnes

0   1
! 2 )
 2  

qui vaut :
Rponse du logiciel

Bien sr, on aurait pu obtenir la matrice directement avec


dune matrice :

 (Matrice) qui donne linverse

 (M)
Mais cette session peut tre loccasion de montrer le mcanisme de calcul des tudiants.



! 0
  9

Nous ne rentrerons pas dans les dtails probabilistes.


Les chanes de Markov sont issues de la thorie des probabilits et utilisent des outils dalgbre linaire qui nous intressent ici. Elles permettent de simuler des phnomnes alatoires
qui voluent au cours du temps. Nous allons les dcouvrir travers ltude dun exemple
simple.
Zlot, Brzxxz et Morzgniouf sont trois villes situes respectivement en Syldavie, Bordurie et
Bouzoukstan. Des trafiquants de photos ddicaces du groupe ABBA prennent leur marchandise le matin dans nimporte laquelle de ces villes pour lapporter le soir dans nimporte quelle
autre. On notera pour simplifier V1 , V2 et V3 ces villes et p i j la probabilit quune marchandise
prise le matin dans la ville Vi soit rendue le soir dans la ville V j . La matrice (p i j )16i 6316 j 63
est appele matrice de transition de la chane de Markov.
Supposons que P soit connue et vaille

0, 8 0, 3 0, 2

P=
0, 1 0, 2 0, 6
0, 1

0, 5

0, 2

Donnons linformation XCAS :


P:[[.8,.3,.2],[.1,.2,.6],[.1,.5,.2]]

Vrifions au passage que la somme des lments de chaque colonne vaut bien 1. On utilise
 :



(P)
Rponse du logiciel

[1.0,1.0,1.0]

83


 '     


Les trafiquants se promenant de ville en ville, il peut tre utile de visualiser leurs dplacements
par le diagramme de transition suivant
0,8
V1

0,2

0,1
0,1

0,3

0,5
V3

V2
0,2

0,6

0,2

On notera xi(k) la proportion de trafiquants qui se trouvent au matin du jour k dans la ville Vi .
En probabilits, on appelle vecteur dtat tout lment (x1 , , xn ) de R+n tel que x1 + +xn =
1.


Ainsi, x (k) = x1(k) , x2(k) , x3(k) est un vecteur dtat.
On montre que les vecteurs dtat de la chane sont lis par la relation
x (k) = P x (k1)
et donc
x (k) = Pk x (0)
Supposons que le chef de la mafia locale dispose de 1000 trafiquants qui partent tous le matin
du jour 0 de la ville de Zlot.
X:[[1000],[0],[0]]

Quelle sera la proportion de trafiquants dans chacune des villes au bout dune semaine ?
P^7*X
Rponse du logiciel

563.887400

226.069100

210.043500

Le parrain voudrait que la proportion moyenne de trafiquants soit stable dun jour sur lautre.
Il recherche donc les vecteurs dtat x vrifiant lquation P x = x.

84

0   1
! 2 )
 2  

On recherche donc le sous-espace propre associ la valeur propre 1.


Il faudrait dabord vrifier que 1 est bien une valeur propre :

  (P)
Rponse du logiciel
1.0,0.5472135955,-0.3472135955

On aurait pu chercher les racines du polynme caractristique. Comme  renvoie


les coefficients du polynme caractristique, on utilise ' (liste,variable) qui
renvoie le polynme sous forme symbolique :

 (' ((P),x)0,x)


On demande maintenant de donner une base du sous-espace propre associ. On utilise 
qui donne une matrice de passage de vecteurs propres quand la matrice est diagonalisable :

 (P)
Rponse du logiciel

0.340000

0.140000

0.130000

0.179443
0.094721
0.084721

0.000557

0.005279

0.004721

Lordre correspond aux valeurs donnes par   . Pour le vrifier, extrayons le premier
vecteur colonne avec (matrice,numro de colonne) :
v:(  (P),0)
P*v

et on retrouve v.
On aurait pu trouver ce vecteur autrement en cherchant le noyau de P Id laide de la commande   :
w: (P-
(3))
Rponse du logiciel
[[-2.615384615,-1.076923077,-1]]

On regarde les doubles crochets : il sagit donc dune liste de liste. Il vaut donc mieux dfinir
le vecteur comme tant le premier lment de cette liste :
w: (P-
(3))[0]

85


 '     


Rponse du logiciel
[-2.615384615,-1.076923077,-1]

Cest bien un vecteur cette fois.


On peut le rendre unitaire puisquil sagit dun vecteur dtat avec   :

 (w)
Rponse du logiciel
[-0.8717948718,-0.358974359,-0.3333333333]

Avons-nous dfini le mme espace vectoriel ? Plusieurs mthodes soffrent nous. On peut
par exemple dterminer le sous-espace engendr par ces deux vecteurs avec  et
voir quelle est sa dimension :

 ([v,w])
Rponse du logiciel
[[-2.615384615,-1.076923077,-1]]

Un seul vecteur : v et w sont donc bien lis.


On aurait pu tout simplement normaliser v :

 (v)
Rponse du logiciel
[0.8717948718,0.358974359,0.3333333333]

et la colinarit saute aux yeux.


Pour une tude sur la rduction de formes quadratiques et la recherche de valeurs propres,
voir la section b. page 208.



!:   ;

Nous ne sommes pas obligs de travailler avec des matrices coefficients dans R. Survolons
par exemple le chiffrement de Hilla .
a D AL ANG , Robert C./C HAABOUNI , Amel Algbre linaire . Lausanne: Presses polytechniques et universitaires ro-

mandes, 2001.

86

0   1
! 2 )
 2  


On considre les 26 lettres de lalphabet plus un espace caractris par @.
On voudrait coder chaque caractre par un nombre, en commenant par 0 pour @, puis 1
pour A, 2 pour B, etc. en finissant par 26 pour Z.
La commande  nous permet dobtenir le code ASCII dun caractreb .
Le problme, cest que A est associ 65.
Nous allons donc dcaler les codes ASCII pour notre usage :
code(c):(x->(x-64),(c))

On soustrait 64 chaque lment de la liste c. Pour effectuer lopration inverse, on utilise


 qui renvoie le caractre correspondant au code ASCII :
decode(L):((x->x+64,L))

//

on

rajoute

64

cette

fois ci

On va chiffrer un message laide dun 3-chiffrement de Hill le message suivant :


Je ne suis pas un numro, je suis un homme libre !
Nous allons commencer par mettre toutes les lettres en majuscules et enlever les signes de
ponctuations.
On peut ensuite associer au message une liste de nombres :
L:code("JE>NE>SUIS>PAS>UN>NUMERO>JE>SUIS>UN>HOMME>LIBRE")

On va ensuite regrouper les nombres 3 par 3 en colonnes et travailler dans Z/27Z. On utilise
 '  (Liste,nb de colonnes) qui transforme une liste en une matrice ayant un certain
nombre de colonnes. On transpose ensuite cette matrice :
clair:  ( '

 (L,3))%27

On choisit une cl constitue dune matrice carre de taille 3 coefficients dans Z/27Z et
inversible :
A:[[1,22,25],[0,25,1],[25,3,1]]%27
Rponse du logiciel

1%27

0%27

2%27

5%27
2%27
3%27

2%27

1%27

1%27

Calculons son dterminant :

(A)
b Cf section e. page 33.

87


 '     


Rponse du logiciel
13 % 27

Cette matrice est bien inversible puisque 13 est premier avec 27. On peut donc calculer son
inverse :

 (A)
Rponse du logiciel

10%27

9%27

4%27

2%27
6%27

2%27

8%27

13%27

4%27

Codons le message clair en multipliant la matrice par A puis en transformant la transpose de


la matrice en liste :
cryptemod:

 ' (  (A*clair))

Le problme, cest que XCAS utilise les restes symtriques. Nous allons donc ruser en utilisant
%0 qui permet dobtenir le nombre entier associ la classe modulo 27 puis  qui donne
le reste de la division euclidienne :
crypte:(x-> (x%0,27),cryptemod)

Il ne reste plus qu associer ces nombres des lettres :


message:decode(crypte)
Rponse du logiciel
LQVPQNDUGNPENPAEZ@RYUTFEULHYJXVPLEZ@OJOOQPQKETQF

(
On cre une liste avec message :
Lb:code(message)

On cre la matrice 3 lignes associe :


brouille:  ( '

 (Lb,3))%27

On utilise linverse de la cl pour dcoder :


clarifie:A^(-1)*brouille

88

0   1
! 2 )
 2  

On transforme en liste :
decryptemod:

 ' (  (clarifie))

On retourne dans N :
decrypte:(x-> (x%0,27),decryptemod)

On transforme les nombres en lettres :


messageinit:decode(brouille)
Rponse du logiciel
JE@NE@SUIS@PAS@UN@NUMERO@JE@SUIS@UN@HOMME@LIBRE@

Un espace sest ajout au bout pour obtenir un nombre de caractres multiple de 3.


Pour une activit plus sophistique sur le codage, voir section 7.2 page 247.

89

 
Gomtrie affine
Logiciel(s) abord(s) : Scilab XCAS

Problmatique : Manipuler des objets lmentaires de gomtrie affine.

8

# $

Utilisons le calcul matriciel dans le logiciel Scilab.

"      


  

On cherche la pente a et lordonne lorigine b dune droite passant par deux points A et B.
A[1;0];B[-1;2]
x[A(1) B(1)]
y[A(2) B(2)]
[a,b] (x,y)



"      
)
   


On cherche une quation du plan passant par les points A, B, C sous la forme z = a1 x +a2 y +b.
La matrice U contient les abscisses et ordonnes, la matrice V contient les cotes.
A[1;0;2];B[-1;2;3];C[4;5;6]
U[A(1:2) B(1:2) C(1:2)]
V[A( ) B( ) C( )]
[a,b] (U,V)

On vrifie en tapant :
a*U+b

qui donne V.

8 # !"#$
Les fonctions de gomtrie affines sont... innombrables, et laide est exhaustive.


 )  *
 +
Vous pouvez par exemple tracer une droite de diffrentes manires. On ouvre une session 2D
en tapant   :

 (2*x+5*y-10) / / p a r t i r

 ( (1,2), (-3,1))


les

d une
//

quation

passant

par

cartsienne
deux

points

dont

on

connat

coordonnes

 (1+,-3+) / / p a s s a n t p a r d e u x p o i n t s d o n t o n c o n n a t

 ([5+t,-2+2*t],t) / / p a s s a n t p a r l e p o i n t ( 5 , 2 ) e t d e
directeur

les

affixes

vecteur

(1 ,2)

et dans lespace affine de dimension 3, on ouvre une session 3D en tapant



 ([1,2,3],[-1,2,0]) / / o n c o n n a t d e u x p o i n t s

 (x+y+z0,x2*y) / / i n t e r s e c t i o n d e d e u x p l a n s

 ([1+2*t,-1+t,-3+5*t],t) / / r e p r s e n t a t i o n p a r a m t r i q u e

   
   "

(  
tudions par exemple la symtrie orthogonale daxe la droite dquation y = x :
d:
 (yx) / / o n t r a c e l a
M: (4,2) / / o n t r a c e u n
m:  (d,M) / / o n t r a c e

droite
point
son

quelconque

symtrique

Dplacement dun point la souris


Notons que lon peut faire bouger M la souris en se plaant en mode Pointeur.
On place le pointeur de la souris devant le point M : un symbole
apparat. Faites
un clic droit en maintenant enfonc et dplacez volont le point M.

P: (1,-3) / / u n a u t r e p o i n t
p:  (d,P) / / e t s o n i m a g e
  (d,
 (m,M)) / /

la

droite

? XCAS r p o n d 1 p o u r
oui et 0  non
   (
 (m,M),
 (p,P))
elles parallles ?

 (m,P) / / o n t r a c e l a d r o i t e ( mP )

 (M,p) / / e t l a d r o i t e ( Mp )

( mM )

est e l l e

orthogonale

axe

92

//

les

droites

( mM )

et

( pP )

sont

3   
est_faisceau_droite(
 (m,P),
 (M,p),d)
elles

concourantes

//

( mP ) ,

( Mp )

et

(d)

sont

 (M,P)- (m,p) / / l e s d i s t a n c e s s o n t e l l e s c o n s e r v e s ?


R: (3,-6);r:  (d,R) / / u n 3 e m e p o i n t e t s o n i m a g e
 (M,P,R) / / u n e m e s u r e e n r a d i a n d e l a n g l e ( MP , MR )
 (m,p,r) / / u n e m e s u r e d e s o n i m a g e : l e s a n g l e s s e m b l e n t d e m e s u r e
opposes

A:   (   (P,R)) / / A
a:  (d,A) / / s o n i m a g e
   (a,   (r,p)) / /
sont

est

un

lment

quelconque

appartient i l

[ pr ]

de

[ PR ]

Les

barycentres

conservs .

 (
 (M,P)) / / l q u a t i o n r d u i t e
 (
 (m,p)) / / l q u a t i o n r d u i t e
 ( (  (
 (M,P)),x)) / /
dans

l quation

inverss

par

la

de

( MP )

les

rles

de

de

( MP )

de

( mp )

on
x

exprime
et

de

en

ont

fonction

donc

de

rflexion .

Pour explorer dautres possibilits, voir la section 5.5 page 215 sur les tangentes une ellipse
et le thme sur le thorme de Pappus page189.

( ,
On ouvre une fentre 3D en tapant



. On peut par exemple tudier un cube :

P: ([2,2,-2]) / / u n p o i n t P
cube(P,4) / / u n c u b e d a r t e 4 d e s o m m e t P
M:   (   (F,G)) / / M u n l m e n t q u e l c o n q u e d e [ FG ]
I: (  (H,F))
J: (  (F,C))
s1:   (G,E)
s2:   (G,B)
s3:   (H,M)
s4:   (C,M)
N:( (s1,s3))[0] / / N e s t l i n t e r s e c t i o n d e [ GE ] e t [ HM ]
R: (s2,s4)[0]
 (   (N,R), +line_width_2) / / o n t r a c e [ NR ]
 (   (E,B), +line_width_2)
   (   (I,J),   (N,R)) / / l e s d r o i t e s ( I J )
elles

parallles

 (  (E,B,G),+ )

//

on

colorie

le

plan

et

( NR )

sont

( EB G )

et on obtient :

93


 )  *
 +

  Paralllisme dans un cube


Pour faire du calcul formel, on prend une longueur darte quelconque. On cre un cube ABCDEFGH darte a :

 (a>0) / / o n s a s s u r e q u e a e s t p o s i t i f
P: ((E+G)/2) / / u n e a u t r e m a n i r e d e d f i n i r
Q: ((F+C)/2)
M: ((P+Q)/2)
 ( (E,P)) / / o n d e m a n d e l a l o n g u e u r
Rponse du logiciel

1
2a
2

On peut demander dautres longueurs :

 ( (A,P))
 ( (A,G))
Rponse du logiciel


1
sqrt(6)a a 3
2

Pour obtenir la figure, on fixe une valeur pour a :

94

le

EP

milieu

de

[ EG ]

3   

  Cube obtenu avec a=5


Pour tudier des sections planes de surfaces avec XCAS, voir section 5.7 page 220.



.    <

Voici par exemple une petite activit :


OAB est un triangle isocle en O avec OA = 6 cm, OB = 6 cm. On place M sur [OA] et on note x =
OM. On place N sur [OB] tel que BN = OM. Quand le point M varie sur [OA], le triangle OMN
varie. On souhaite tudier laire du triangle OMN en fonction de x.
On ouvre une fentre graphique en tapant



O: (0,0) / / o n p l a c e l e p o i n t d e c o o r d o n n e s ( 0 , 0 )
A: (6,0)
B: (0,-6)
   (A,B) / / t r a c e l e s e g m e n t ( A , B )
a:   (0  6) / / c h o i s i t u n l m e n t q u e l c o n q u e e n t r e 0 e t 6
M: (a,0)
N: (0,-6+a)
   (M,N)
 (  (O,M,N),  + ) / / o n c o l o r i e l e t r i a n g l e e n v e r t
f:x-> (  ( (0), (0,-6+x), (x,0))) / / o n d f i n i t l a
fonction

" aire "

P: (a,f(a)) / / o n p r e n d l e p o i n t d e l a c o u r b e y  f ( x ) d

 (P) / / o n d e m a n d e l e s c o o r d o n n e s d e P
 (f(x),x06,   ) / / o n t r a c e l a c o u r b e y  f ( x )
f(x) / / o n d e m a n d e l a f o r m u l e d o n n a n t l a i r e e n f o n c t i o n d e

abscisse

Voici la sortie graphique :

95


 )  *
 +

 
Aire maximale dun triangle
Pour une autre activit gomtrique de Seconde, voir section b. page 69.

8 #  


Voici par exemple comment tracer une surface avec des lignes de niveauxa
#

dfinition

Lignes

f(x,y)x*x+y*y

de

de

la

niveau

xval2
dx0.1
lignex(x,y) (x> xval-dx && x<xval
#

Lignes

de

  
#

les

: d / comme nt er

lignes

   


   levels
#

si
10 ,

de

de

niveaux

xval

f(x,y):1/0)
y

yval

f(x,y):1/0)
z

zval

%4.3g

ATTENTION
enlever

lignes

niveau

yval3
dy0.1
ligney(x,y) (y> yval-dy && y<yval

zval30

fonction

on

de

les

deux

lignes

suivantes

pour

afficher /

niveaux

discrete zval
veut

des

lignes

de

niveaux

rgulires

de

10

en

100

a Merci Denis L E F UR. Retrouvez sur http://mathsp.tuxfamily.org/spip.php?rubrique39 dautres conseils

concernant GnuPlot.

96

3&   * !

# set

cntrparam

levels

xmin-5
xmax5

incr

0 ,10 ,100

Borne

de

et

  [xmin:xmax]
ymin-7
ymax7
  [ymin:ymax]
#

zmin0
zmax100
# set

Borne

de

z r a n g e [ zmin : zmax ]

nx50
ny50

   

dfinition

du

maillage

dfinition

de

la

nx,ny

1
 1
 " coefx,coefy

taille

du

graphique

coefx
coefy

 
  
 " 

  

des

axes

Angle

de

vie

39,16

#
# set

Graduation

1
1
10

title

  
  
 " 

" Exemple

de

Dfinition

des

labels

surface "

"x"
"y"
"z"

Gestion

des

parties

caches ,

des

couleurs
# set

hidden3d

# set

nosurface

# set

p m3d

# set

palette

gray

97


 )  *
 +
#

  





Affichage

de

la

lgende

P( %0.3g,xval, ; %0.3g,yval, ; %0.3g,f(xval,yval)," )"


at screen 0.85,0.20  
  ligne x  %2.3g,xval tc lt 1 at screen 0.85,0.15  
  ligne y  %2.3g,yval tc lt 4 at screen 0.85,0.10  
  ligne z  %2.3g,zval tc lt 3 at screen 0.85,0.05  
  "P" at xval,yval,f(xval,yval)+5 font " ,24" front  



Affichage

du

graphique

f(x,y)   lines lt 2 notitle,lignex(x,y)


ligney(x,y)   lines lt 4 notitle

 

lines lt 1 notitle,

# splot

f (x , y)

with

lines

lt

# splot

f (x , y)

with

lines

lt

2 , lignex (x , y)

with

lines

lt

# splot

f (x , y)

with

lines

lt

2 , ligney (x , y)

with

lines

lt

14

ce qui donne :

Pour une tude similaire avec le logiciel Scilab, voir la section 11.4 page 119

98

 
Statistiques
Logiciel(s) abord(s) : XCAS, Scilab

Notions informatiques : O on apprend quil est plus efficace dtudier statistiques et probabilits sans tableur. On profite des capacits
de Scilab pour obtenir de belles sorties graphiques.

Problmatique : On simule des expriences alatoires. On profite des


capacits de

9


0

 




  +    
 

-   .
/ 
 

Cosme II de Mdicis (Florence 1590-1621), Duc de Toscane, fut le protecteur de lillustre Gallile (n Pise le 15 fvrier 1564 et mort Florence le 8 janvier 1642), son ancien prcepteur.
Profitant dun moment de rpit du savant entre lcriture dun thorme sur la chute des corps
et la cration de la lunette astronomique, le Grand Duc lui soumet le problme suivant : il a
observ quen lanant trois ds cubiques et en faisant la somme des numros des faces, on
obtient plus souvent 10 que 9, alors quil y a autant de faons dobtenir 9 que 10, savoir six.
Aprs quelques rflexions, Galile rdigea un petit mmoire sur les jeux de hasard en 1620
expliquant le phnomne.

0

  ,1

Nayant pas la mme exprience du jeu que le bon Cosme, nous allons utiliser XCAS pour
simuler un grand nombre de parties et tudier statistiquement les rsultats obtenus.
1. Nous utiliserons en premier lieu


(n) qui renvoie un entier appartenant [0 ; n[.

Comment utiliser cette commande pour obtenir le rsultat du lancer dun d ?


(6)+1


 2  0 


2. Plutt que dappuyer 100000 fois sur la touche   , nous allons utiliser une commande
plus pratique,  (1,nombre dexpriences,exprience) qui renvoie une liste de
nombre dexpriences rsultats de lexprience.
Par exemple  (1,10000,rand(3)) renverra 10000 nombres entiers gaux 0, 1 ou
2.
3. On utilisera galement
la liste liste.

 (n,liste) qui compte le nombre dapparitions de n dans

(liste).
5. Pour visualiser les rsultats laide dune bote moustache, on utilise   (liste).
4. Pour calculer une moyenne, on forme une liste et on utilise
Rponse du logiciel
"Sur 10000000 essais, la frquence de sortie de 9 est de 11.25786%,
et celle de 10 est de 12.53457%"
Evaluation time: 147.46

  Comparaison du nombre de sorties du 9 et


du 10

0

 3   
Voici un exemple de simulation de ce problme :
toscane(taille,essais):{
 neuf,dix,T,n,d,s,k,mn,md;
neuf:()); dix:()); / / o n c r e 2 l i s t e s v i d e s a u d p a r t
(k:1;k<essais;k++){ / / o n v a f a i r e p l u s i e u r s e s s a i s
T: (1,taille,
(6)+
(6)+
(6)+3); / / o n l a n c e
fois

taille

ds

Pour compter le nombre dapparitions dune occurrence dans une liste, on utilise 
neuf:neuf, (9,T);
dix:dix, (10,T);
}

//

on

compte

les

//

on

compte

les

10

On calcule ensuite les moyennes dapparition de 9 et 10 avec


n: (
d: (

100

([neuf])/taille)*100;
([dix])/taille)*100;

/ / mean

en

 :
anglais

 :

4  ( 
%! 
 
!

On totalise le nombre total de lancers :


s:taille*essais;

On construit les botes moustache correspondant chaque face :


mn: (
md: (

  ([neuf]),, + + 


 );
  ([dix]), + + 
 );

On affiche enfin les rsultats et les graphiques :

 ("Sur

"+s+" essais, la frquence de sortie de 9 est de "+n+", et


celle de 10 est de "+d+);
mn,md;
}:;



 
 

On lance 10 fois de suite une pice de monnaie et on sintresse au nombre maximal de rsultats conscutifs gaux. On cre un programme qui simule autant de sries de lancers que
lon dsire, qui calcule la moyenne des rsultats obtenus et les rsume dans un histogramme
et une bote moustaches.
piece(essais):{
S,k,P,j,H,m,M,s,p,h;



On cre une liste vide pour y mettre les longueurs maximum des trajets :
S:());

On entame une boucle ayant comme argument le nombre dessais souhaits :

(k:1;k<essais;k++){
On cre une liste vide pour y mettre les nombres de rsultats conscutifs gaux :
s:());

On effectue 10 lancers de 0 ou 1 :
P:

 ' (

(1,10,
(2)));

On commence regarder le premier lancer :


p:0;

Tant quon nest pas au bout de la liste :

 (p<9){
On regarde le suivant :
j:p+1;

Et tant que le suivant est gal, on continue :



(P[j]P[p]


j<9){j:j+1}
101


 2  0 


On enlve p j car on a commenc p+1 et on colle cette valeur dans notre liste s :
s:s,j-p;

On va ensuite voir le prochain rsultat diffrent


p:j;
}

Le test termin, on classe les lments de s dans lordre dcroissant grce 3 / :
s:SortD([s]);

On prend ensuite le premier de la liste car cest le plus grand en utilisant  


:
h: 
(s);

On le stocke dans une liste avant de refaire une srie de 10 :


S:S,h;
}

On cre lhistogramme correspondant cette liste avec


H: (  ([S]),, +

  (liste) :

);

On calcule la moyenne de S :
m: (

([S]));

On cre la bote moustache correspondant en rajoutant un paramtre y donnant sa taille


verticale :
M: (

  ([S],y-0.15-0.05), + + 


 7);

On affiche une phrase donnant les rsultats avec  :

 ("Sur

"+essais+" sries de 10 lancers, la


de rsultats conscutifs gaux est "+m);

 

On trace les deux graphiques :


H,M;
}:;
Rponse du logiciel
"Sur 1000 sries de 10 lancers, la moyenne du nombre maximal
de rsultats conscutifs gaux est 3.513"
Evaluation time: 0.55

102

du nombre maximal

4  ( 
%! 
 
!

  Histogramme et bote moustache pour


1000 sries de 10 lancers.
On peut mme se lancer dans une animation avec... 
variations de u)

 (suite

dpendant de u,

  ( (piece(10*u),u1100))



.  + ) 

Un ivrogne fait alatoirement un pas en avant ou un pas en arrire. Au bout de combien de


pas aura-t-il avanc de n pas ?
Une situation o la mdiane est plus parlante que la moyenne...
On va crer une procdure dpendant du nombre algbrique de pas n et du nombre de simulations souhaites p :
Ivrogne(n,p):{
 A,B,C,s,k,j,M,Mo,tmp,dir;
M:());
//

nous

allons

faire

(k:1;k<p;k++){

simulations

On appelle s le nombre de pas et on cre une liste de 1500 nombres entre 0 et 999 999
s:0;
A: (1,1500,1000000)[0];
 (j:1;j<1500;j++){

On demande darrter la boucle si le n e arbre est dpass, en faisant attention au signe de n :

(n>0){

(s>n)

 ;}  {

(s<n)

 ;}

Pour simuler la dcision alatoire de reculer ou avancer, on va se rfrer la parit du j e terme


de A : si le j e terme est pair, on avance, sinon on recule.

(A[j] 
20){s +1}  {s+-1}
}

103


 2  0 


On rajoute ensuite le nombre de pas trouv notre liste :
M:M,j;
}

On traduit le signe de n par des instructions plus parlantes et on transforme M en liste pour
utiliser les fonctions de statistiques :

(n>0){dir:"
M:[M];

 "}  {dir:"

gauche"}

On construit la bote moustache :


Mo: (

  (M,y-0.150.15), + + 


 7);

On affiche le message avec  et on trace la graphique :

 ("Il a fallu en   "+( ( (M)))+"  livrogne


 atteindre le "+ n +"-ime arbre "+dir+" et la mdiane est "+
(M
));
Mo;
}:;
Rponse du logiciel
"Il a fallu en moyenne 131 pas livrogne
pour atteindre le 2-ime arbre droite et la mdiane est 9.0"
Evaluation time: 37.51

  Bote moustache correspondant n = 2


Rponse du logiciel
"Il a fallu en moyenne 113 pas livrogne
pour atteindre le -2-ime arbre gauche et la mdiane est 9.0"
Evaluation time: 34.34

  Bote moustache correspondant n = 2

104

4 *2 2
!
2


9  
 

Le logiciel Scilab fournit un gnrateur alatoire de matrices. Pour savoir quel est le type de
rpartition par dfaut, taper
str
(info)

La distribution uniforme donne des nombres rels quirpartis entre 0 et 1. Linstruction


A
(9,3,normal)

donne une matrice de nombres rpartis suivant la distribution gaussienne de moyenne 0 et


de variance 1.

9 :

  
tant donns deux familles de nombres x et y de mme taille, on cherche la meilleure relation
affine entre les deux, cest--dire le segment de droite qui approxime le mieux le nuage de
points dont les coordonnes sont dans x et y.
x5*
(1,9)
y3*
(1,9)-2
[a,b] (x,y)
 (x,y,ms);X[0,5]; (X,a*X+b)

Les rels a et b reprsentent respectivement la pente et lordonne lorigine. Sur le dessin,


les points sont reprsents par des carrs magenta.
La rgression linaire peut tre tendue en dimension suprieure ; le nombre de colonnes
de x et y doit tre le mme : cest le nombre dchantillons. Les matrices a et b sont censes
approcher au mieux y par la quantit ax +b. Cette instruction est utilise pour rechercher des
quations de sous-espaces affines voir f. page 91.

9 $  


Le logiciel Scilab fournit de nombreux outils tels la variance et lcart-type, les moyennes
arithmtique, gomtrique et harmonique, la mdiane, lchantillonnage alatoire :
x5*
(1,9)
 (x)

(x)
(x)
  (x)
 (x)

(x)
ssample(22,x)

On peut extraire les frquences et lamplitude :

105


 2  0 


m (s)
n (s)
a  (x)

La rpartition par quartiles se fait avec linstruction :

 (s)
La rpartition par quantiles se fait en utilisant les centiles ; ordonnons dabord la matrice s
pour mieux visualiser la situation :

 (s)
q[10 50 90]
p  (s,q)
Lanalyse en composantes principales existe dans Scilab, elle consiste approcher des nuages
de points par des ellipsodes.
z
(7,8,normal)
[lambda,facpr,comprinc]pca(z)

9, #%%  


  

Pour illustrer la loi de rpartition uniforme, on prend mille chantillons. Lhistogramme prsente une rpartition effectivement assez uniforme.
Y
(1,1000);
 ();bar(Y)

  Histogramme des valeurs de la variable Y


Un zoom prsente le mme aspect.

106

4# 


  Histogramme des valeurs de la variable Y :


dtail
En classant les chantillons dans lordre croissant, on peut tracer la fonction de rpartition
par centile.
X (Y,g,i);
q1:99;
p  (X,q)
xp(:,1);yp(:,2);
 (); (x,y)

1000
900
800
700
600
500
400
300
200
100
0
0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1.0

  Rpartition de la variable Y par centiles


Une rpartition proportionnelle la mesure de Lebesgue donnerait la droite diagonale sur
le graphique. Un rsultat quivalent est obtenu en traant lhistogramme de lchantillon ordonn.

 ();bar(X)
107


 2  0 



 
 Histogramme des valeurs de la variable X
Les histogrammes par rpartition donnent le mme rsultat indpendamment de lordre des
valeurs ; plus le rsultat sapproche dune droite horizontale, plus la rpartition est uniforme.

 ();  (100,Y)

 
 Histogramme des frquences normalises de
la variable Y



   

Pour illustrer la loi de rpartition normale ou gaussienne, il suffit de modifier la premire instruction ci-dessus en :
Y
(1,1000,normal);

108

4# 


Les autres instructions illustrent la fonction de rpartition de la loi normale. Le trac pardessus le dernier histogramme de la courbe reprsentative de la fonction
 2
exp t2

2
par la commande
t-3:.1:3;z (-t .^ 2 ./2)/ (2*%pi); (t,z)

illustre la rpartition normale.

 

Histogramme des frquences normalises de


la variable Y suivant la loi gaussienne, avec le graphe de
la fonction de Gauss



   

Une pice deux faces ( !) est tire au hasard 1000 fois.


piece[pile,face]
echantillonsample(1000,piece)
t (echantillon)
bar(t(2))

La fonction  a lavantage sur la fonction   de pouvoir travailler avec des chanes
de caractres. Le dessin des frquences nous permet de voir si Scilab est pip ou pas. . .

109


 2  0 



 
Premier tirage pile ou face

 
Deuxime tirage pile ou face



8  

Le tirage de d seffectue comme pour le tirage de pile ou face. Comme les chantillons ne
sont pas des nombres, on applique un effet miroir sur la liste des frquences pour que les
numros correspondent aux noms.
de[I II III IV V VI]
echantillonsample(1000,de)
t (echantillon)
z" (de);
Zt(2);
 k1:6,
z(k)Z(7-k);

;

110

4# 


bar(z)

Pour le tirage de deux ds, la machine peut nous donner les frquences de chaque couple.
couple[];
 kde,
couple[couple;de+ +k];

;
echantillonsample(1000,couple);
t (echantillon);
yt(1);zt(2);Yy;Zz;
 k1:36,
Z(k)z(37-k);Y(k)y(37-k);

;
Z   (Z,[6,6]);
 
(Z)

 
 Histogramme des frquences pour un tirage
de deux ds
Ltude des sommes de points se fait aisment, les sommes son calcules ici sans utiliser le
retournement Z ci-dessus par souci de gnralit.
somme[12:-1:7 11:-1:6 10:-1:5 9:-1:4
 [0];
 k1:11,
indvectorfind(somme,k+1,c);
zzz(ind);
 [ ; (zz)];

;
 ();bar( )

8:-1:3 7:-1:2];

111


 2  0 



 
 Histogramme des frquences pour les somme
des points dans un tirage de deux ds

112


Calcul diffrentiel
Logiciel(s) abord(s) : Maxima XCAS Gp Yacas Scilab

Problmatique : Calcul diffrentiel du lyce jusqu lagrgation.




 
  

   

Le logiciel Scilab calcule des drives approches par des taux de variation. Pour fabriquer
la drive de lapplication e 2x , il est bon de faire excuter le programme suivant.

  yf(x)


y (2*x)

 
  yfprime(x)
y
   (f,x)

 
Pour tracer simultanment le graphe de f et de sa drive restreintes lintervalle [1; 1]
comme sur la figure 11.27, il est ncessaire de rentrer les valeurs successives de f  dans un
vecteur.
t-1:.1:1;
y[]
 xt
y[y fprime(x)];

 (t,f(t),t,y)


    
4 


15

10

0
1.0

0.8

0.6

0.4

0.2

0.0

0.2

0.4

0.6

0.8

1.0

 
 Une partie de lhlice

Scilab et les couleurs

Le logiciel Scilab change de couleur automatiquement, la premire est toujours


bleue. . . mme sil est difficile de sen rendre compte sur la figure 11.27.



   3

Le logiciel Maxima donne des drives formelles avec la commande


. Linstruction

( (2*x),x);
donne le rsultat escompt.



   

Le logiciel XCAS se comporte comme Maxima. La mme commande


est disponible :

( (2*x),x)
Elle donne le rsultat escompt, mais il y en a dautres...

114

(expression,variable)

    


Fonction drive et nombre driv


XCAS est trs cheval sur la diffrence entre expression et fonction. Il distingue

donc, comme le mathmaticien, nombre driv et fonction drive.


Pour obtenir lexpression gnrale de la fonction drive, quon nomme couramment f  (x) pour une certaine fonction f , on peut utiliser
, mais aussi

 (expression,variable) :
derive( (2*x),x)

On ne peut pas lutiliser tel quel pour calculer f  (2). On utilise alors
 
 (fonction) :
f:x-> (2*x);
fd: 
 (f);
fd(2)

On peut aussi utiliser des fonctions pr-programmes sur XCAS :

 
 ( > +
)
Rponse du logiciel

( x)->cos( x)*1/2*1/(sin( x))*sqrt(sin( x))+1

Le symbole @ correspond la compose de fonction.

On obtient le calcul approch du nombre driv avec /  (expression,variable,pas),


le pas valant par dfaut 0, 001, par la mthode du milieu. Par exemple :

/  (((x)),x,0.00001)
Rponse du logiciel
(ln(ln(x+0.001))-ln(ln(x-0.001)))*500.0

et on transforme cette expression en fonction :


fp:((),x)

pour demander f  (2) :


fp(2)

115


    
4 



  #

Le logiciel Gp se comporte diffremment.

 ( (2*x),x)
donne un dveloppement limit (voir section b. page 153).



  4 

Le logiciel Yacas se comporte sans surprise ; il est toutefois sensible la hauteur de casse des
commandes.

/(x)  (2*x)
donne le rsultat escompt.
Le logiciel Yacas connat quelque chose du calcul diffrentiel vectoriel.
V(x):{x^3*y,x^2*z,x*y}
8(V(x,y,z),{x,y,z})

donne le rotationnel du champ de vecteur tridimensionnel V.


La suite de ce chapitre utilise Scilab.

 " ; 

  
 

Pour une fonction diffrentiable f valeurs relles, le gradient est le vecteur associ la diffrentielle par le produit scalaire euclidien.

  yf(x)


y (x)^2

 
  yg(x)
y
   (f,x)

 
x[1;1;1]
g(x)

La matrice hessienne est celle de lapplication linaire tangente du gradient dans la base canonique.

  Hh(x)


[J,H]
   (f,x,order2,H_formblockmat)

 
x[1;1;1]
h(x)

Le rotationnel est le double de la partie antisymtrique de lapplication linaire tangente dun


champ de vecteurs.

116

& !

  yV(x)


y (x)^2*x(1)*x

 
  yrot( ,x)
J
   ( ,x)
yJ-J

 
x[1;1;1]
rot(V,x)

Le rotationnel du gradient est nul : on le voit sur lexemple  $= &.

 " 

Pour tracer une hlice (figure 11.28), il faut dfinir sparment les fonction coordonnes.

  xX(t)


x(t)

 
  yY(t)
y(t)

 
  zZ(t)
zt

 
t0:.1:3*%pi
 
(X(t),Y(t),Z(t))

10
9
8
7

6
5
4
3
2
1
0
1.0

0.6

0.2
Y

0.2

0.6

1.0

1.0

0.6

0.2

0.2

0.6

1.0

 
 Une partie de lhlice

117


    
4 

On dfinit le vecteur tangent unitaire :

  Mc(t)


M[X(t);Y(t);Z(t)]

 
  vvitesse(t)
v
   (c,t)

 
  vT(t)
vvitesse(t)
vv/ (v)

 
On dfinit le vecteur normal et la courbure :

  vTprime(t)


v
   (T,t)

 
  ykappa(t)
y (Tprime(t))/

 
  vN(t)
vTprime(t)
vv/ (v)

 

(vitesse(t))

On dfinit le vecteur binormal grce au produit vectoriel :

  vB(t)


AT(t)*N(t)-N(t)*T(t)
zA(1,2)
xA(2,3)
yA(3,1)
v[x;y;z]

 
On peut vrifier que la base est orthonorme en un point :
A[T(1) N(1) B(1)]
A*A

La matrice AA doit tre proche de lidentit. On dfinit alors la torsion :

  vBprime(t)


v
   (B,t)

 
  ytau(t)
yBprime(t)*N(t)/

 

(vitesse(t))

Courbure et torsion devraient tre constantes dans le cas de lhlice ; comme on fait des drives approches jusqu lordre trois, il y a beaucoup derreur dans la torsion (figure 11.29) ;

118

 !5


 '
(t,kappa,style5)
 '
(t,tau,style13)

 
 La courbure de lhlice en rouge et sa torsion
en vert

 $<

On se donne un domaine pav plan et une fonction f de ce rectangle dans R, de classe C 2 .


Le graphe de f est un exemple de nappe dans R3 . Dfinissons par exemple la selle, dont la
courbure de Gauss est ngative :

  zf(x,y)


zx*y

 
et lhmisphre unit, dont la courbure de Gauss est constante gale un :

  zff(x,y)


z (1-x^2-y^2)

 
Lespace tangent en un point de coordonnes (x1 , x2 , f (x1 , x2 )) est dirig par les vecteurs

0
u(x1 , x2 ) =
,
f

(x1 , x2 )
x1

1
v(x1 , x2 ) =
.
f

(x1 , x2 )
x2

Une nappe paramtre est une application F de classe C 2 du 2-pav dans R3 . La fonction
suivante paramtre le graphe

  Fnappe(nom)


chaineM[x(1);x(2);+nom+(x(1),x(2))]

(MF(x),chaine)

 
119


    
4 


Largument de la fonction nappe ci-dessus est la chane de caractres qui nomme
la fonction valeurs relles.

Lespace tangent en un point de coordonnes M = F(x1 , x2 ) est limage de lapplication linaire


tangente de F.

  J   (F,x)


J
   (F,x)

 
Pour dessiner simplement le graphe dune fonction de R2 dans R, linstruction  
convient. Lexemple ci-dessous provient dun problme du baccalaurat franais de juin 2007 ;
on vite lannulation du dnominateur en dcalant les valeurs des coordonnes. Les deux
derniers arguments prcisent les angles de prise de vue. Lutilisateur peut changer le point de
vue grce au bouton   de la fentre graphique. Le rsultat est sur la figure 11.30.
x.1:.3:12;
yx;
  zf(x,y)
z3*x*y/(x+y)


 
 (); 
(x,y,f,alpha60,theta-120)

   Extrait dun problme du bac de 2007


(France)
Linstruction

 
%(x,y,f,alpha60,theta-120)
120

 !5


donne des couleurs qui reprsentent la cote, donc la valeur de la fonction f (figure 11.31).
Pour obtenir le mme rsultat partir de la commande  
, il faut appuyer sur le bouton  de la fentre graphique, et choisir Figure properties, cela ouvre une fentre de dialogue. Dans larborescence gauche : descendre jusquau dernier lment, puis dans longlet Style de la partie droite de la fentre de dialogue, choisir le drapeau de couleur (Color
flag) numro 1.

   Extrait dun problme du bac de 2007


(France) : les couleurs reprsentent la cote
Lexemple suivant est tir du dun problme du baccalaurat de juin 2007 en Polynsie franaise.
x0:.2:6;
y0:.2:8;

  zf(x,y)


z2*x^2-8*x+y^2-6*y+18

 
a5
t-130
 (); 
%(x,y,f,alphaa,thetat)
Pour dessiner le plan dquation y = 2, on rajoute un rectangle avec linstruction  
 qui
dessine des surfaces quadrangules : une seule cellule suffit. On remarque sur le graphique
prcdent que la cote varie entre 0 et 60. Il faut prendre garde respecter les angles de prise
de vue.
X[0 0;6 6];Y[2 2;2 2];Z[0 60;0
 
(X,Y,Z,alphaa,thetat)

60];

Pour tracer lintersection du plan et du graphe de f , il suffit de tracer une partie du graphe
dont lamplitude en ordonne est trs rduite autour de la valeur 2.

 
(x,[1.9:.01:2.1],f,alphaa,thetat)
Pour tracer les points A = (3, 2, 3) et B = (5, 2, f (5, 2)), il suffit de tracer des graphes corresondant une lgre variation horizontale (figure 11.32).

121


    
4 

Bun[4.9:.01:5.1];Bdeux[1.8:.001:2.2];
 
(Bun,Bdeux,f,alphaa,thetat)
  zg(x,y)
z3

 
 
(Bun-2,Bdeux,g,alphaa,thetat)

 
Extrait dun problme du bac de 2007
(Polynsie franaise) : intersection dun graphe et du
plan y = 2
Le point B apparat comme une tache noire. Le point A est cach sous la surface. Il faut appuyer sur le bouton  de la fentre graphique, et choisir Current axes properties, cela ouvre
une fentre de dialogue. Dans larborescence gauche : le premier lment est slectionn,
dans longlet Viewpoint de la partie droite de la fentre de dialogue, remplacer la valeur 5
de langle de rotation par la valeur 185. Par-dessous, on voit maintenant sur la figure 11.33 la
surface, la courbe dintersection, et les deux points A et B.

  Extrait dun problme du bac de 2007


(Polynsie franaise) : intersection dun graphe et du
plan y = 2, avec deux points

122

 !5

Si le plan y = 2 tait nimporte quelle surface transverse au graphe de f , la procdure serait
plus substantielle. Le paramtrage de la courbe intersection se rsout sur une famille T dabscisses t qui subdivise lintervalle [0; 6], en demandant une rsolution approche de lquation
non linaire en dimension 3 :

xt

y 2

z f (x, y)

Voici lensemble complet des instructions :


x0:.2:6;
y0:.2:8;

  zf(x,y)


z2*x^2-8*x+y^2-6*y+18

 
a5;
t-130;
 (); 
%(x,y,f,alphaa,thetat)
X[0 0;6 6];Y[2 2;2 2];Z[0 60;0 60];
 
(X,Y,Z,alphaa,thetat)
/ / f p l o t 3 d ( x , [ 1 . 9 : . 0 1 : 2 . 1 ] , f , a l p h a a , t h e t a  t )
Bun[4.9:.01:5.1];Bdeux[1.8:.001:2.2];
 
(Bun,Bdeux,f,alphaa,thetat)
  zg(x,y)
z3.1

 
 
(Bun-2,Bdeux,g,alphaa,thetat)
//

t0

La

fonction

qui

dfinit

//

n est

plus

utilis

intersection

  yinter(x)


y[x(1)-t,x(2)-2,x(3)-f(x(1),x(2))]

 
//

paramtrage

de

l intersection

T0:.1:6;
abscisse[];ordonnee[];cote[];
 tT,
M ([t;0;0],inter) ;
abscisse[abscisse M(1)];ordonnee[ordonnee M(2)];cote[cote M(3)];

//

dessin

 
(abscisse,ordonnee,cote,[alphaa,thetat])

123


    
4 


Les angles de vue ne se rentrent pas de la mme manire dans  
et
dans  
; de plus lexcution par le logiciel de la dernire instruction ne respecte pas les angles de prises de vue.

Il faut ouvrir la bote de dialogue des proprits de la figure. Dans la partie gauche, cliquer sur
le bouton  de la ligne Axes, slectionner Polyline, dans la ligne Line, augmenter lpaisseur
du trait : voir la saisie dcran 11.34.

  Bote de dialogue de la fentre graphique de


Scilab
Dans la ligne Axes, dans longlet viewpoint on ramne les angles 185 et 130 pour obtenir la
figure 11.35. (En slectionnant les lignes correspondantes, on peut augmenter ou diminuer la
graisse des dessins qui reprsentent A et B.)

124

# 6!  2%!  !5




   Extrait dun problme du bac de 2007 (Polynsie franaise) : nouvelle mouture du dessin
En zoomant sur le point A et en ajustant les angles de prise de vue, on obtient la figure 11.36
qui visualise la non-appartenance du point A au graphe de f , comme le montre le calcul
de f (3, 2) par Scilab, qui donne 4.

   Le point A nappartient pas au graphe de f

, = 

  

<

Le vecteur normal unitaire la surface est dfini grce au produit vectoriel des drives partielles.

  vn(F,x)


J   (F,x)
unJ(:,1) ; deuxJ(:,2)
Aun*deux-deux*un
zA(1,2)
xA(2,3)
yA(3,1)
125


    
4 

v[x;y;z]
vv/ (v)


 

La premire forme fondamentale de la surface est la restriction de la forme quadratique euclidienne lespace tangent.
La seconde forme fondamentale de la surface est associe la matrice des drives de la normale unitaire dans lespace tangent de faon tre indpendante du paramtrage. Lapplication de Gauss est constitue des drives partielles de la normale unitaire.

  VGauss(F,x)


h1e-4
un[h;0]
deux[0;h]
V[n(F,x+un)-n(F,x) ,

 

n(F,x+deux)-n(F,x)]/h

La drive de n est valeurs dans lespace tangent puisque le produit scalaire de n avec lune
de ses drives partielles est la moiti de la drive de sa norme, constante gale un :



n
1 
n,
n2 = 0 pour i = 1et 2.
(x1 , x2 ) =
xi
2 xi
Par commodit, construisons ensuite la matrice N qui envoie les deux premiers vecteurs de la
base canonique sur la drive de n et le troisime sur la normale unitaire.

  VN(F,x)


V[Gauss(F,x),n(F,x)]

 
La seconde forme fondamentale est la restriction lespace tangent de la forme quadratique
reprsente par le produit de lapplication de Gauss par le pseudo-inverse de lapplication
tangente. Les valeurs propres de la seconde forme fondamentale sont appeles courbures
principales et se lisent dans la matrices courbures donne par la fonction elements :

  [directions,courbures]elements(F,x)


J   (F,x)
GGauss(F,x)
M (J)*G
[directions,courbures] (M)

 
La courbure de Gauss est le produit des valeurs propres. Deux fonctions donnent des rsultats
proches.

  Kkappa(F,x)


J   (F,x)
K
(N(F,x))/ (
(J*J))

 
  Kcourbure(F,x)
126

# 6!  2%!  !5



[directions,courbures]elements(F,x)
K
(courbures)


 

La courbure moyenne est la somme des courbures principales.

  KCM(F,x)

[directions,courbures]elements(F,x)
K  (courbures)


 

Il ne reste plus qu initialiser les paramtrages, et obtenir quelques valeurs...


Fnappe(f)
FFnappe(ff)
x[.2;.5]
y[-.8;.5]
O" (2,1)
[directions,courbures]elements(FF,O)
[directions,courbures]elements(FF,x)
[directions,courbures]elements(FF,y)
courbure(FF,O)
kappa(FF,O)
courbure(FF,x)
courbure(FF,y)
CM(FF,O)
CM(FF,x)
CM(FF,y)
[directions,courbures]elements(F,O)
[directions,courbures]elements(F,x)
[directions,courbures]elements(F,y)
courbure(F,O)
kappa(F,O)
courbure(F,x)
courbure(F,y)
CM(F,O)
CM(F,x)
CM(F,y)

La pseudosphre est la surface de rvolution de la tractrice.

  MH(x)


ax(1);bx(2)
r (1-a^2-b^2)
c (r)-r
M[a;b;c]

 
courbure(H,x)
courbure(H,y)

127


    
4 

Sa courbure est constante, gale 1.
courbure(H,x)
courbure(H,y)

On dessine maintenant sur une grille soigneusement choisie pour les exemples cits ici.

  dessin(F)


maille30
I1:maille;
JI;
Z" (maille,maille);
couleurZ;
 tI
 uJ
point[t/maille-.55;u/maille-.55];
zF(point);
Z(t,u)z(3);
couleur(t,u)courbure(F,point);

;


" (Z)
 ();XI/maille-.55;YJ/maille-.55;surf(X,Y,Z)
 ();surf(X,Y,couleur)
 ();surf(X,Y,Z,couleur)

 
Linstruction
dessin(H)

demande un peu de calcul : la grille contient 900 nuds. La courbure reste proche de 1.

   La pseudosphre : les couleurs reprsentent


la cote

128

# 6!  2%!  !5




   La courbure de la pseudosphre : les couleurs


reprsentent la cote

   La pseudosphre : les couleurs reprsentent


la courbure
Les instructions
dessin(F) ; dessin(FF)

donnent des figures suggestives.

129


    
4 


   La selle : les couleurs reprsentent la cote

   La courbure de la selle : les couleurs reprsentent la cote

130

# 6!  2%!  !5




 
La selle : les couleurs reprsentent la courbure

  La sphre : les couleurs reprsentent la cote

131


    
4 


  La courbure de la sphre : les couleurs reprsentent la cote

   La sphre : les couleurs reprsentent la courbure

. )+    <    


R2

 !"#$

3 

        

nonons ce thorme que nous ne dmontrerons pas ici :

132



, "
)!  5   R2
 R
 

Extremum sous contrainte


Si f et g sont deux fonctions indpendantes telles que :

f et g ont des drives partielles continues dans un voisinage dun point


P(x0 , y 0 ) ;

f prsente un extremum au point P sous la contrainte g (x, y) = k, o k est


une constante ;

g valu au point P est diffrent du vecteur nul,

alors  f (x0 , y 0 ) = g (x0 , y 0 ) pour un scalaire appel multiplicateur de Lagrange.


Par consquent, un extremum dune fonction f soumise une contrainte g ne peut
tre observ qu un point P o les gradients de f et g sont parallles. La contrainte
est alors tangente la courbe de niveau de f passant par le point P. Pour trouver cet
ventuel extremum, il faut rsoudre le systme :

 f (x, y) = g (x, y)

g (x, y) = k

On veut par exemple dterminer les extrema de la fonction f : (x, y)  y 2 x 2 sur le disque
unit.
f:(x,y)->y^2-x^2

La fonction est continue sur un compact, elle atteint ses extrema en un point intrieur ou
limitrophe au disque unit.
Les points critiques sobtiennent en galant les drives partielles 0 :

 ([
(f(x,y),x)0,
(f(x,y),y)0],[x,y])
Rponse du logiciel
[[0,0]]

Cette fonction na quun seul point critique lintrieur du disque unit.


Il faut galement trouver les extrema sur la frontire du disque, i.e. sous la contrainte g (x, y) =
x 2 + y 2 = 1. On utilise le thorme prcdent et la commande 
(f(x,y),[x,y]) :
g:(x,y)->x^2+y^2;
 ([
(f(x,y),[x,y])lambda*
(g(x,y),[x,y]),g(x,y)1],[x,y,lambda
])

133


    
4 

Rponse du logiciel

0
0
1
1

La fonction ne peut donc atteindre un extremum qu un des points (0 ; 0), (0 ; 1), (0 ; 1),
(1 ; 0) ou (1 ; 0) :
f(0,0);f(1,0);f(-1,0);f(0,1);f(0,-1)
Rponse du logiciel

0, 1, 1, 1, 1

Par consquent la fonction atteint son maximum de 1 aux points (0; 1), (0; 1) et sa valeur minimale 1 aux points (1; 0), (1; 0). Ces rsultats peuvent tre confirms par la reprsentation
graphique de la surface en utilisant   :

 (f(x,y),[x-11,y-11],  0.05, 0.05,+ 


)

   Surface dquation z = y 2 x 2


et la reprsentation des courbes de niveau de la fonction et de la contrainte.
On utilise   (f(x,y),[x,y],liste des valeurs des lignes) et
   (g(x,y)-1,x,y) :

134

, "
)!  5   R2
 R
 

  (f(x,y),[x,y],[-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1],  


0.05, 0.05),
   (x^2+y^2-1,x,y)
qui affiche :
y
1

0.5

-0.5

-1

-2

-1

   Courbe de niveau de f avec la contrainte


g (x, y) = 1



  

  
=
 )3
 ) 3 

Rappelons ce rsultat classique que nous ne dmontrerons pas :

Test de la drive seconde


Soit f : x  f (x, y) une fonction telle que :

les drives partielles de premier et second ordre sont continues dans un voisinage dun point (x0 , y 0 );

 f (x0 , y 0 ) = 0 .

Posons r = f x2 (x0 , y 0 ), s = f xy (x0 , y 0 ) = f yx (x0 , y 0 ) et t = f y2 (x0 , y 0 ). Alors, si
f (x,y )

f (x,y )
(x0 , y 0 )
y 2

< 0, alors f atteint un

f (x,y )

f (x,y )
(x0 , y 0 )
y 2

> 0, alors f atteint un

= r t s 2 > 0 et x 2 (x0 , y 0 ) < 0 ou


maximum relatif au point (x0 , y 0 );

= r t s 2 > 0 et x 2 (x0 , y 0 ) > 0 ou


minimum relatif au point (x0 , y 0 );

= r t s 2 < 0, alors f prsente un point de selle au point (x0 , y 0 );

= r t s 2 = 0, alors le thorme ne permet pas de conclure.

135


    
4 

Cherchons les extrema relatifs de la fonction f : (x, y)  6x y 2 2x 3 3y 4 qui est de classe
C sur R2 .
f:(x,y)->6*x*y^2-2*x^3-3*y^4

Cherchons ses points critiques :

 ([
(f(x,y),x)0,
(f(x,y),y)0],[x,y])
Rponse du logiciel

Il y a donc trois points critiques. Essayons de les classer avec le thorme prcdent.
On va utiliser la fonction  (()f(x,y),[x,y]) ou
(f(x*y),[x,y],2) qui donnent la
matrice hessienne de f qui est la matrice des drives dordre 2, cest--dire :

 (F(x,y),[x,y])
Rponse du logiciel

F(x,y )
x 2
F(x,y )
x y

F(x,y)
x y
F(x,y)
y 2

Drives partielles et XCAS


On obtient
et

Ici :

136

F(x,y )
x y

F(x,y )
x 2

en rentrant diff(F(x,y),x,2)

en rentrant diff(F(x,y),[x,y],[1,1])

, "
)!  5   R2
 R
 
H: (f(x,y),[x,y])
Rponse du logiciel

(6 2 x)
12 y

62 y


6 x 2 12 3 (y)2

Il sagit de dterminer le dterminant de cette matrice qui, attention, est une expression. On
utilisera donc astucieusement la commande  (ancien=nouveau) :
delta:(a,b)->
f2:(a,b,V)->

( (
(H),xa,yb)

( (
(f(x,y),V,2),xa,yb)

Alors :
delta(1,1);delta(1,-1);delta(0,0)

et :
f2(1,1,x);f2(1,-1,x);f2(0,0,x)

nous permettent daffirmer que f atteint un maximum relatif aux points (1 ; 1) et ( ; 1).
La reprsentation graphique va nous permettre de confirmer ce rsultat et de constater que
(0 ; 0) est un point de selle :

   Surface dquation z = 6x y 2 2x 3 3y 4


Pour un expos vivant, intressant, abordable, bref qubcois de ces notions, voira .
a A MYOTTE , Luc Introduction au calcul avanc et ses applications en sciences . Qubec: ERPI, 2004.

137



Intgration
Logiciel(s) abord(s) : Yacas Maxima Scilab XCAS MuPAD

Problmatique : Des primitives formelles et des intgrales numriques peuvent tre obtenues.




  

  4 

Pour trouver une primitive avec Yacas, il suffit de taper :

0  (x) 3(x)


et pour obtenir son intgrale sur lintervalle [0, ] :
A:0  (x,0,4()) 3(x)
((A,20)

La dernire commande donne le rsultat approch avec une prcision arbitraire de vingt dcimales. Des primitives plus compliques ne lui font pas peur :

0  (x) )(x)


Mais Yacas a ses limites :

0  (x)

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

ne donne rien.



   3

Pour obtenir une primitive de sin(x), avec le logiciel Maxima, il suffit de taper :

  ((x),x);
et pour obtenir son intgrale sur lintervalle [0, ] :

  ((x),x,0,%pi);
Des primitives plus compliques ne lui font pas peur :


     

  ((x),x);
  ( (1+( (x))^2),

x);

Pour la dernire, il faut savoir que la notation .30(@ dsigne largument sinus hyperbolique,
not Argsh en mathmatiques. Maxima peut trouver la primitive dune fraction rationnelle :
R(x):=1/(x^3+x^2+x+1);

  (R(x),x);

Mais une autre fraction rationnelle peut lui faire baisser les bras :
S(x):=1/(x^3+x+1);

  (R(x),x);

Dans ce cas, il y a peut-tre une solution en utilisant les bonnes vieilles mthodes de lge du
papier et du crayon.



 
   



La dcomposition en lments simples consiste dcomposer en facteurs irrductibles dans R


le dnominateur de la fraction (mise sous forme irrductible) ; la fraction se dcompose en
somme de fractions construites partir de ces facteurs. Intgrer sparment chaque terme
est souvent plus facile que le problme de dpart. Commenons par le cas dont on connat
dja le rsultat ;
R(x):=1/(x^3+x^2+x+1);
RR(x):= (R(x),x);
RR(x);

La fraction est dcompose en

1
x 1

2(x + 1) 2(x 2 + 1)

Linstruction

  (RR(x),x);
donne le mme rsultat que la primitive de R, quoique un peu moins bien simplifi.
Prenons maintenant le cas difficile. La dcomposition en lments simples ne fonctionne pas
non plus.
S(x):=1/(x^3+x+1);

 (S(x),x);

La diffrence, cest que nous pouvons attaquer le problme sous langle des polynmes, o la
bote outils est bien fournie.
P(x):=x^3+x+1;
A: (P(x)=0);
PP(x):=(x-(A[1]))*(x-(A[2]))*(x-(A[3]));
Q(x):=1/PP(x);

140

   

La fraction Q est la mme que S, sauf que nous avons indiqu la machine la factorisation du
dnominateur.

Attention : partir du degr 5, il ny a plus de formule algbrique universelle pour


extraire les racines dun polynme. . .

T(x):= (Q(x));
TT(x):=  (Q(x),x);

donnent des rponses complexes.


Pour obtenir des rponses relles,

  (T(x));
entrane la question de Maxima :
Rponse du logiciel

Is

SQRT(31)
1 1/3
SQRT(31)
1 2/3
3 (--------- - -)
x - 3 (--------- - -)
6 SQRT(3)
2
6 SQRT(3)
2

+ 1

positive or negative?

Il faut rpondre lalternative par exemple :

  ;
De mme, linstruction

  (TT(x));
avec la mme rponse que prcdemment donne une expression formelle pour une primitive de la fonction S. Mais Maxima narrive pas calculer une valeur pour lintgrale sur un
intervalle donn.
On peut utiliser alors une fonction de calcul approch pour les intgrales :

  (S(x),x,2,3);
qui donne une valeur numrique.

Attention : Linstruction romberg(Q(x),x,2,3); ne fonctionnerait pas. . .

141


     



   

Le logiciel Scilab calcule des intgrales approches avec linstruction   mais elle naccepte pas les fonctions internes du logiciel. La commande intg(0,%pi,sin) est invalide. La
bonne procdure est la suivante :
function y=f(x)
y=(x)
endfunction
intg(0,%pi,f)

Pour tracer le graphe de la primitive du logarithme nprien qui sannule en 1, on commence


par dfinir les fonctions ncessaires.
function y=f(x)
y=(x)
endfunction
function y=F(x)
y=intg(1,x,f)
endfunction
t=1:1:3;

Mais l, aucune des instructions fplot2d(t,F), /plot(t,F(t)), plot(t,t*log(t)-t) nest


valide. Il faut accumuler les valeurs scalaires dans un vecteur :
Y=[]
for x=t
Y=[Y F(x)];
end
plot(t,Y)

ce qui donne la figure 12.49.

1.4

1.2

1.0

0.8

0.6

0.4

0.2

0.0
0.0

0.5

1.0

1.5

2.0

2.5

 
  Graphe de x log(x) x + 1

142

3.0

   



   

Les instructions de base de XCAS ressemblent celles de Maxima et les rsultats sont similaires.

  ((x),x)
  ((x),x,0,)
Le passage par les dcompositions en lments simples est plus rapide. Les instructions suivantes donnent les mmes rsultats que sous Maxima.
R(x):1/(x^3+x^2+x+1)
 (R(x),x)
  (R(x),x)
S(x):1/(x^3+x+1)
 (S(x),x)
  (S(x),x)

Mais le logiciel XCAS ne sait pas trouver les racines du dnominateur de S. Linstruction

  (S(x),x,2,3)
donne le calcul approch sans problme. Passons un calcul de primitive plus intressant. . .
XCAS peut passer le Grand Oral de lX :

 ( (( (x))^2+1),

x)

donne :
Rponse du logiciel


ln



!!
(tan (x))2 + 1 (tan (x))

  

MuPAD serait lui recala :


int(sqrt((tan(x))^2+1), x)

ne rpond rien. Mais MuPAD a dautres arguments :


int(x^n* (x),x)

donne :
Rponse du logiciel

(n + 1, x)
(1)n

a Cest a de ne pas tre libre...

143


     


 "'         % % 

   

  5

On utilise  (expression, ancien=nouveau), que vous pouvez comparer la commande
subsop vue au paragraphe e. page 33 pour les listes.
Par exemple :

 (g(a*x),x,p)- ((1/a)* (g(t),t,p/a),tx*a)


qui rpond :
Rponse du logiciel

"+
0

pxa !

"
1

g(ax)e(px) dx 0 g(xa)e a a dx
a

!
#
$ 1 a
pour les transformes de Laplaceb
nous permet de voir que L f (ax) = F
a p

  
  

La fonction 
(F(x)*g(x),G(x)) renvoie la liste [F(x)*G(x),-f(x)*G(x)] si G(x)= 0
et 
([F(x),g(x)]) renvoie F(x)+G(x) avec les notation habituellesc .
"
Cela nous permet de construire une procdure ipp(F(x),g(x)) qui renverra F(x)g (x) dx
calcule par une intgration par parties :
ipp(F(x),g(x)):{

(
(F(x)*g(x), (g(x),x)),0)
}:;

Par exemple :
ipp((x),1)

donne :
Rponse du logiciel
-x+x*ln(x)

qui est en effet une primitive de 1 ln(x).


Si lon veut lvaluer sur un intervalle, on peut utiliser
renvoie F(b)-F(a) :
b Voir section 15.2 page 170.
c F une primitive de f.

144

 (F(x),a,b,variable) qui

 
  

   2
 
 


 (ipp((x),1),2,3)
renvoie bien :
Rponse du logiciel
3*ln(3)-3-2*ln(2)+2

Mais XCAS na pas besoin de nous pour avoir cette ide :

 ((x));
 ((x),x,2,3)
renvoie directement le rsultat.
Cette nouvelle procdure peut nous tre utile dans un calcul formel.
Par exemple :
ipp(f(x),
(g(x),x))

renvoie bien sr :
Rponse du logiciel

f (x)g(x) dx + g(x)f(x)

qui nous rappelle la formule dintgration par parties.


Mais cette mthode a ses limites, comme nous allons le voir.

    6

Ce sont les intgrales du type
Wn =

/2

sinn (x) dx

En particulier
/2
0

sinn+2 (x) dx =

/2
0

sinn (x) dx

/2

sinn (x) cos2 (x) dx

sachant que sin2 (x) = 1 cos2 (x). Il faudrait donc calculer


On pense une intgration par parties. Mais si on tape :

"/2
0

sinn (x) cos2 (x) dx.

ipp(((x))^n*((x))^2,(1/(n+1))*((x))^(n+1))

cela ne donne rien.


Nous allons donc revenir ibpdv.
r:
(((x))^n*((x))^2,(1/(n+1))*((x))^(n+1))

145


     

Le logiciel rpond cette fois quelque chose, mais cela reste compliqu.
La ruse est de changer sinn+1 (x) en n+1 1 sinn (x)sin(x).
Alors
r:
(((x))^n*((x))^2,(1/(n+1))*((x))^(n)*(x))

rpond :
Rponse du logiciel

1
(sin (x))2 (sin (x))n
(sin (x))n sin (x) cos (x) ,
n +1
n +1

Nous avons besoin de faire une petite pause pour expliquer ce phnomne...

Comment XCAS traite-t-il x n ?


Si vous interrogez XCAS sur
(f(x),x), il vous rpondra
Rponse du logiciel

xn
x

sans jamais vouloir simplifier ce rsultat en nx n1 .


Cest que XCAS fait du calcul formel et considre x n non pas comme un polynme
mais comme une variable indpendante.
Cest plus simple et plus efficace pour lordinateur, mme si a apparat plus compliqu pour les faibles humains que nous sommes.
Dans le cas qui nous occupe, en nintroduisant pas sinn+1 (x) qui serait une nouvelle
variable, on laisse XCAS traiter le problme avec deux variables : sinn (x) et sin(x).
Alors XCAS arrive intgrer par parties et simplifier le rsultat alors que par
exemple MuPAD ny arrive pas alors quil traite (ou plutt parce quil traite) le problme plus mathmatiquement quinformatiquement.

On peut encore simplifier le rsultat avec la commande  qui justement simplifie autant que possible une expression trigonomtrique en utilisant en priorit des sinus car XCAS
considre les sinus comme des variables.
Dans le cas qui nous occupe, aprs avoir rentr :

146

 
  

   2
 
 


(r[1])
on obtient :
Rponse du logiciel

(sin (x))2+n
n+1

Pour revenir aux intgrales de Wallis, il nous reste valuer r[0] entre 0 et

 (r[0],0,Pi/2)
nous renvoie bien 0.
Finalement, nous obtenons la relation de rcurrence :
Wn+2 = Wn

1
Wn+2
n +1

qui nous permet de calculer les termes pairs et impairs, ou plus directement :
W(n): (((x))^n,x,0,Pi/2)
 (W(k),k014)

donne :
Rponse du logiciel

2 3 8 5 16 35 128 63 256 231 1024 429 2048 6435 32768 12155


2 , 1, 4 , 3 , 16 , 15 , 32 , 35 , 256 , 315 , 512 , 693 , 2048 , 3003 , 4096 , 6435 , 65536 , 109395 , 131072



  

Pour lintgration par parties, on utilise  -- (hold(int)(f(x),x= ),v(x)).


"1
Ainsi, on peut intgrer par parties 0 x n ex dx :

 (n, 2 --NonNegInt):  (n>0,and_);


simplify(intlib--byparts(
(int)(x^n* (x),x01), (x)))
qui rpond :
Rponse du logiciel

en

1

xn1 ex dx

147


     


 " %% '  

 ! 
 
  

Pour avoir une approximation de laire sous la courbe, on peut lapprocher par des rectangles
lmentaires. Voici une petite procdure de construction :
Rect(f,N,a,b):{
 RV,RR,R,k,av,ap,C;
RV:()); RR:());
(k:0;k<N;k++){
av:a+k*(b-a)/N; / / a v a n t  .
ap:a+(k+1)*(b-a)/N; / / a p r s  .
R: ( (av,0), (av,f(av)), (ap,f(av)), (ap,0)); / /
le

rectangle

RR:RR, (R,+ ); / / o n r e m p l i t l e s r e c t a n g l e s


RV:RV, (R, + 
 ); / / l e c o n t o u r e n p l u s p a i s
}
C: (f(x),xab,  + 
 ); / / l a c o u r b e
 (RV,RR,C); / / l e s 3 g r a p h e s s u p e r p o s s
}:;

Pour avoir une vision dynamique, on ouvre une fentre graphique et on utilise 

 :

n:   (1  100)
Rect(x->(x),n,0,2*Pi)

 
 Mthode des rectangles personnelle
Pour tre honnte, il existe dj   (expr,x=a..b,n,mthode) sur XCAS qui permet
dobtenir ce rsultat, o mthode peut-tre   
 ,     ,  " ,
  .

 (  ((x),x02*Pi,20,rectangle_droit), ), (


  ((x),x02*Pi,20,rectangle_gauche),  )
148

& 
 !
 2 ) 2


 
 Mthode des rectangles la XCAS
Ce qui nous intresse est bien sr davoir une approximation numrique :
aireRect(f,N,a,b):{
((b-a)/N*f(a+k*(b-a)/N),k1N));
}:;

(

//

subdivision

rgulire

aireRect(x->(x),100,1,10)
Rponse du logiciel
14.02524361

alors quavec par la fonction de calcul approch 0 :


nInt((x),x110))
Rponse du logiciel
14.02585093

Nous avons donc 3 bonnes dcimales avec 100 rectanglesd .



     )  3     

Il nest pas trop difficile de trouver un rapport entre la fonction f : x 

1 x 2 et :

4*aireRect(x-> (1-x^2),1000000,0,1)

Avec 1000000 de rectangles et 76 secondes, on obtient difficilement 5 dcimales de . . .


d Pour avoir des prcisions sur le calcul approch dintgrales avec XCAS, voir la section b. page 52.

149


     


Match Scilab/XCAS sur lapproximation dintgrales
Interrogeons XCAS pour obtenir une approximation de

1 %
0

1 x 2 dx :

4*nInt( (1-x^2),x,0,1)
Rponse du logiciel
[3.141580789,3.14158081,3.141580816,3.141580817,
3.141580817,3.141580818,3.141580818]

soit au mieux 4 bonnes dcimales. En effet, la singularit de la drive en 1 brouille


les algorithmes bass sur la formule dEuler-Mac Laurin.
Quant Scilab :

  yf(x)


y (1-x**2)

 
  (20)
4* (0,1,f)
Rponse du logiciel
ans

3.1415926535897926719088

alors quune valeur approche de est :


%pi
Rponse du logiciel
%pi

3.1415926535897931159980

cest--dire que Scilab donne 16 bonnes dcimales : Scilab a gagn ?


Eh non... Parfois le calcul formel a du bon ! Si vous demandez XCAS :
4*

(  ( (1-x^2),x,0,1))

il vous donne 1000 bonnes dcimales de , la limite de / .

150

& 
 !
 2 ) 2


Approximation de avec la formule de Machin


&
&
&
2n+3
n (1)k x 2k+1 &
'
& x
&
.
Vous savez bien que &Arctan(x)
&<
&
2k + 1 & 2n + 3
k=0
On peut donc construire une procdure dpendant dun nombre ! compris entre 0
u 2n+3
 10p :
et 1 et donnant la plus petite valeur de lentier n telle que
2n + 3
mini(u,p):{
 k;
k:0;
 ( ((u^(2*k+3))/(2*k+3))>10^(-p)){
k:k+1}
}:;

Vous connaissez galement la formule du mathmaticien anglais M ACHIN :


4 arctan

1
1

arctan
=
5
239 4

obtenue en montrant
que,
a et b tant deux rels tels que ab = 1, on a arctan a +


a+b
arctanb = arctan 1ab + avec = 0 si ab < 1, = 1 si ab > 1 et a > 0 et = 1 si
ab > 1 et a < 0.
n (1)k X 2k+1
'
On appelle polynme de G REGORY le polynme Gn (X) =
.
2k + 1
k=0
On construit donc une procdure qui donne une valeur approche de Gn (a) 10p
prs :
greg(n,a,p):{
 S,k;
S:0;
(k:0;k<n+1;k++){
S:S+ (((-1)^k*a^(2*k+1))/(2*k+1),p+1);
};

 (S);
}:;

La formule de M ACHIN faisant intervenir un Arctan(1/5), on va interroger mini :


mini(1/5,100)

qui nous dit quil nous faut aller au rang 69 pour avoir 100 bonnes dcimales de :
4*(4*greg(69,1/5,100)-greg(69,1/239,100))

nous donne instantanment le rsultat voulu.

151


Dveloppements limits
Logiciel(s) abord(s) : Maxima Gp Yacas XCAS

Problmatique : Obtenir des dveloppements limits : approximations de fonctions par des polynmes.



# 4

Le logiciel Yacas permet de calculer quelques dveloppements limits.


f(x): (8(x))
4 6 (2(x,0,9)

f(x))

donne le dveloppement limit lordre 9 en 0 de la fonction exp(cos(x)). Il ne faut pas aller


trop loin dans lordre, car le temps de calcul devient prohibitif.

 # %
Le logiciel Gp considre les fonctions comme des sries entires ; il est donc bien adapt aux
dveloppements limits. Les deux lignes suivantes donnent le dveloppement lordre 16
en 0 de la fonction exp(cos(x)).
f(x) ((x))
f(x)

Pour dvelopper lordre 20 il suffit de rajouter :


\ps 20
f(x)

Pour obtenir le dveloppement en 2 , il suffit de dcaler :


f(x+4/2)

Le rsultat na pas besoin dtre converti en polynme puisque ce nest quune reprsentation
laffichage de la fonction.


   (5  



 # /+ 


Le logiciel Maxima donne un rsultat moyennement plus lisible que Gp.
f(x):= ((x));
(f(x),x,0,20);

Un petit exercice nous permet de comparer une fonction puissance et son dveloppement
limit en 1 aux ordres 2 et 5.
f(x):=(1+x)^10;
f(1/100);
 (%);
g: (f(x),x,0,5);
 (  (1/100,x,g));
h: (f(x),x,0,2);
 (  (1/100,x,h));
ff(y):= (  (y,x,h));
 '
([f(x),ff(x)],[x,0,01]);

  
Comparaison de deux polynmes au voisinage de 0

 # !"#$




#  

Reprenant le mme dveloppement que pour Gp, on obtient un rsultat plus lisible.

( ((x)),x0,6)
Le dveloppement peut etre transform en polynme avec linstruction
En voici tout de suite une application.

154

  (DL,polynom).

&   



>
 
  )  3  )    *?
  *

Pour comprendre laspect local de lapproximation dune fonction par le polynme de Taylor
associ, rien de tel quune petite procdure qui permet de comparer les graphes de la fonction
et du polynme selon son degr.
Cela permet galement de visualiser les fonctions qui admettent un dveloppement en srie
entire de rayon infini ou fini.
On construit une procdure dl(f,x,n) qui dpend de la donne dune fonction f, dun ordre
n et du point dobservation x :
dl(f,x,n):{
 (  ( (f(x),x0,n),polynom));
}:;

On obtient ainsi un polynme.


Par exemple :
dl( ,x,10)
Rponse du logiciel
(62*x^9)/2835+(17*x^7)/315+(2*x^5)/15+(x^3)/3+x

Ensuite, il ne reste plus qu visualiser. Attention, notre n variable nest pas forcment entier.
On utilise (nombre) qui renvoie la partie entire dun nombre.
n:   (1  50)
 ([dl(,x,(n)),(x)], / / o n t r a c e c t e
x-4*Pi4*Pi,
[ , + 
 ]) / / o n l e s d i s t i n g u e
l paisseur

du

cte

par

les

les

courbes

couleurs

et

trait

et on obtient pour la fonction cosinus en 0 avec n = 25 :

   Approximation polynomiale de la fonction


cosinus

155


   (5  


On visualise bien que lintervalle de validit de lapproximation crot avec n et semble pouvoir recouvrir R, alors que pour la fonction x  ln(x+1), lapproximation ne semble valable
que pour 0  x < 1 :

 ([dl(x->(1+x),x,(n)),(1+x)],x02,[ , +


 
 ])
comme on le voit ici :

   Approximation polynomiale de x  ln(x+1)


Nous verrons dautres approximations polynomiales lors de ltude des Polynmes interpolateurs de L AGRANGE.

156


quations diffrentielles
Logiciel(s) abord(s) : Scilab Octave Maxima MuPAD XCAS

Problmatique : Rsoudre des quations diffrentielles ordinaires.


Utiliser ces quations.




# $
5
 ) "        


Lquation diffrentielle y  (t ) = 2y(t ) + 10cos(10t ) est rsolue sur lintervalle [1, 1] avec la
condition initiale 1.

  yprimef(t,y)


yprime2*y+10*(10*t)

 
y01;t0-1;t-1:.1:1
Le graphe de la solution est dessin.

()
z
(y0,t0,t,f);
 (t,z)
La linarit de lquation diffrentielle nest pas cruciale.



5
 ) "        


On se donne une matrice antisymtrique dordre trois (quelconque) ;


AA
(3,3,unif)
AAA-AA

le sous-groupe de Lie quelle engendre dans le groupe spcial orthogonal est construit avec
une quation diffrentielle ordinaire.

  yprimef(t,y)


yprimeA*y

 


   !
 
4 
  


La machine se fait une joie de tracer une partie de lorbite du premier vecteur de la base canonique.
y0[1;0;0];t0-1;t-1:.1:1
()
z
(y0,t0,t,f);
 
(z(1,:),z(2,:),z(3,:))

1.0
0.6

0.2
0.2

1.0
0.8

0.6

0.6
0.4

1.0

0.2
0.0

0.6
0.4

0.2
0.2

0.4
0.0

0.6
0.2

0.8
0.4

1.0

   Rotation dun vecteur


Maintenant on trace lorbite de la base canonique ;
y0[1;0;0];t0-1;t-1:.1:1;
 ()
z
(y0,t0,t,f);
y1[0;1;0];
zz
(y1,t0,t,f);
y2[0;0;1];
zzz
(y2,t0,t,f);
Xz(1,:);XXzz(1,:);XXXzzz(1,:);
Yz(2,:);YYzz(2,:);YYYzzz(2,:);
Zz(3,:);ZZzz(3,:);ZZZzzz(3,:);
 
%([X,XX,XXX],[Y,YY,YYY], ([Z,ZZ,ZZZ],[2,3,6]))

158

     


   Rotation de la base

Il faut veiller mettre les vecteurs collectant les coordonnes en colonnes : le nombre de
couleurs (deuxime argument de la fonction  $&) est celui des colonnes.
On peut comparer avec la solution algbrique.

XXXX[];YYYY[];ZZZZ[];
 ut-t0
G  (u*A);
XXXX[XXXX;G(1,:)]; YYYY[YYYY;G(2,:)];ZZZZ[ZZZZ;G(3,:)];


 ()
 
%(XXXX,YYYY, (ZZZZ,[2,3,4]))
 ([X,XX,XXX]-XXXX)

159


   !
 
4 
  



   Rotation algbrique de la base

Lexponentielle matricielle rclame linstruction


que chaque coefficient....



 ; sinon cest une exponentielle appli-

5
 ) "   3+    


Lquation diffrentielle du second degr y  = 100y se rsout grce la matrice compagnon


comme dans la thorie.
A[0 1;-100 0]
  yprimef(t,y)
yprimeA*y

 
y0[0;1];t0-1;t-1:.01:1; ()
zz
(y0,t0,t,f);
zzz(2,:);
 (t,z)

160

    


   La sinusode de pulsation 10 qui rsoud


lquation y  = 100y avec la condition initiale voulue
On peut vrifier la valeur de lapproximation quand on connat la solution thorique :
erreur (z-(10*(t+1)))



5
 ) "  )     
 ""

Le lecteur rsoudra aisment cet exercice en sinspirant des sections prcdentes.

 #  
Le logiciel Octave possde une instruction de rsolution approche 
pour les quations
de la forme x  = f (x, t ) et une instruction de rsolution approche
 pour les quations
de la forme f (x  , x, t ) = 0.

 # !"#$




5
 3 

La machine peut donner une rsolution formelle ; on nest pas oblig de fixer les conditions
initiales.

 ([y+100*y,y(0)a,y(0)b],y)
renvoie
Rponse du logiciel
[a*cos(10*x)+(b*sin(10*x))/10]

161


   !
 
4 
  


Mais on atteint vite les limites du calcul symbolique : linstruction suivante choue.

 ([y+y^2,y(0)a,y(0)b],y)



5
  ! 

Pour le trac des quations unidimensionnelles du premier ordre, les instructions  

et     
sont trs pratiques.



 ! ) / 
  

Illustrons cette mthode bien connue : on note lquation diffrentielle du premier ordre sous
la forme


u  (t ) = f u(t ), t
et on ltudie sur un intervalle [a ; b] avec la condition initiale y(t ) = u0 et on utilise lapproximation
u  (t ) 

u(t + h) u(t )
h

quand h est suffisamment petit . On choisit ici h =


fix de subdivisions.
Cela se traduit par

ba
N ,

avec N un nombre arbitrairement

Eu(f,N,a,b,uo):{
 S,X,Y,k,Cnum,Cexact,sexact,u,P,t;
S:()); / / s u i t e d e s p o i n t s , v i d e a u d p a r t
X:a; / / o n p a r t d e x  a
Y:uo; / / o n p a r t d e y  u o
(k:0;k<N;k++){ / / o n v a c o n s t r u i r e N p o i n t s
Y:Y+f(Y,X)*(b-a)/N; / / l e p a s e s t d e ( b a ) / n
X:a+k*(b-a)/N; / / o n a v a n c e d u n p a s
P: (X,Y);
S:S,P; / / o n r a j o u t e l e n o u v e a u p o i n t
}
sexact:
 ([yf(y,x),y(0)uo],y)[0]:;
avoir

la

solution

notre

polygone

//

on

utilise

Cnum: (polygone_ouvert(S), +line_width_2):;


Cexact: ( (sexact,xab), +

graphe

de

Cnum,Cexact;
}:;

la
//

solution
on

dsolve

pour

exacte

trace

 ):;

//

//

on

on

construit

construit

le

attendue
les

deux

graphes .

Ensuite, on va faire varier N pour visualiser la convergence, par exemple dans le cas de lquation y  (t ) = 4y(t ) + t sur [0 ; 3] avec y(0) = 1 :
n:   (10  500);
Eu((u,t)->-4*u+t,n,0,3,1)

162

&   

donne :



 ! )  3 /      

Voici un exemple de dcouverte de la fonction exponentielle avec la mthode dEuler sous


forme dun TP pour des lves de Terminale S dbutants en informatique.

 1

 +
On sintresse aux fonctions f drivables sur R satisfaisant la condition
f  (x) = k f (x)

(1)

pour tout x R, avec k un rel arbitrairement fix.


On va tenter, dans cette section, dobtenir une approximation de lallure de la courbe reprsentative dune solution de (1).
On va pour cela considrer que pour h suffisamment petit et pour tout rel a,
f  (a) 

f (a + h) f (a)
h

Montrez alors que f (a + h)  (1 + kh) f (a).

0
5


Pour obtenir ce trac, nous allons choisir un rel k, un segment [a; b], nous allons fixer limage
de a par f pour avoir une solution unique de (1) dans un premier temps.
Nous allons subdiviser le segment [a ; b] en N segments de mme longueur : quelle sera la
longueur de chaque petit segment ?

 , 
 

Ouvrons une fentre de gomtrie en tapant simultanment sur  et  .
On dfinit un point dont on connat les coordonnes avec la commande  :

163


   !
 
4 
  


A: (1,2);
B: (3,-1);
C: (4,5);

On relie ces points par des segments de droite grce la commande


de points) :

   (liste

polygone_ouvert(A,B,C)

  
Oublions pour un temps notre problme et voyons comment nous pourrions tracer point
par point sur [3 ; 3] la courbe reprsentative dune fonction g vrifiant :
g (b) g (a)
=2
ba
pour tous rels distincts a et b de [3 ; 3] et f (3) = 1.
On peut par exemple subdiviser le segment [3; 3] en segments de longueurs 0,25 et rflchir
au moyen dobtenir les images par f de chacune des extrmits des segments de la subdivision.
g (x+0,25)g (x)
Il suffit de penser que x+0,25x = 2, cest--dire g (x + 0, 25) = ...... + g (x).
On peut donc calculer g (x + 0, 25) si lon connat g (x).
On va donc partir du point de coordonnes (3 ; 1) et obtenir de proche en proche les coordonnes de plusieurs points de la courbes en faisant des petits sauts de 0,25 et en sarrtant
3:
S:()); / / o n c r e
X:-3; / / a u d p a r t
Y:-1; / / a u d p a r t
  X<3 
S:S, (X,Y);

une

suite

de

vaut

vaut

//

tant

//

on

que

points

vide

s crit

rajoute

le

au

tantque

point

de

dpart

en

XCAS

coordonnes

(X,Y)

notre

liste

X:X+0.25; / / o n a v a n c e d e 0 , 2 5 c h a q u e t o u r
Y:0.5+Y; / / o n s a i t q u e g ( X + 0 , 2 5 )  0 , 5 + g ( X )
   :; / / f c omme f i n d e l a b o u c l e
polygone_ouvert(S); / / o n r e l i e l e s p o i n t s d e l a

de

boucle

liste

la

rgle

et on dcouvre sans surprise quil sagit dun segment de droite.

  
Cela fonctionne pour ce cas particulier mais a devrait aussi marcher si lon change les
valeurs du pas, du coefficient directeur, des bornes de lintervalle de dfinition, de limage de
la borne infrieure de cet intervalle.
On a donc envie de crer un fonction informatique, une procdure, qui reprend cette mthode
mais dans le cas gnral, avec des coefficients quelconques quon donnera lordinateur. On
cre ainsi une sorte de fonction de plusieurs variables.

164

&   

Notons donc h le pas, m le coefficient directeur, [a ; b] lintervalle de dfinition et yo limage


de a.
Donnons galement un nom notre procdure, par exemple TraceAffine.
On va ouvrir une fentre de programmation en tapant   :
TraceAffine(h,m,a,b,yo):{
notre

//

on

prcise

quels

sont

les

variables

de

procdure

S:()); / / o n c r e t o u j o u r s u n e s u i t e d e p o i n t s
X:a; / / a u d p a r t X v a u t a c e t t e f o i s
Y:yo; / / a u d p a r t Y v a u t y o
  X<b  / / o n s a r r t e X b
S:S, (X,Y); / / o n
r a j o u t e l e p o i n t de

vide

au

dpart

coordonnes

(X,Y)

notre

liste

X:X+h; / / o n a v a n c e d e h c h a q u e t o u r d e
Y:h*m+Y; / / o n s a i t q u e g ( X + h )  h * m+ g ( X )
   :; / / f c omme f i n d e l a b o u c l e
polygone_ouvert(S); / / o n r e l i e l e s p o i n t s d e
}:; / / o n t e r m i n e l a p r o c d u r e e n f e r m a n t l

boucle

la

liste

la

rgle

accolade

Pour valider, on clique sur  .


Pour excuter cette procdure, on place le curseur sur une ligne de commande.
Par exemple, pour retrouver le cas prcdent, on rentre :
TraceAffine(0.25,2,-3,3,-1)

7 5  8
Vous tes maintenant arms pour adapter ce que nous venons de voir la mthode dEuler
sachant que cette fois f (X + h) = (1+ kh) f (X) comme nous lavons vu au premier paragraphe.
Construisez donc une procdure Euler(h,k,a,b,yo)...

9

  , 
Il est vu en cours de Terminale S que la solution de lquation diffrentielle y  = y avec y(0) = 1
sappelle la fonction exponentielle qui se note exp pour XCAS.
Nous avons utilis une approximation pour obtenir son trac par la mthode dEuler. Il est
bien sr primordial davoir un ordre de grandeur de lerreur commise.
Nous avons crit que exp(a + h)  (1 + h) exp(a).
Crons alors une fonction Exp(h,x) qui donne une approximation de ex pour un h donn.
Il suffit dutiliser la procdure prcdente en tant la partie concernant le trac et en prenant
a = 0, k = 1, b = x :
Exp(h,x):{
X:0;
Y:1;
  X<x 
X:X+h;
Y:(1+h)*Y;

165


   !
 
4 
  


   :;
}:;

Par exemple, on peut comparer Exp(h,1) et exp(1) pour des valeurs successives de h entre
0,1 et 0,0001, puis en prenant dautres valeurs de x.
Exp(0.01,x)exp(x)
pour diffrentes valeurs de x.
tudiez le rapport
exp(x)
Que pensez-vous de lapproximation ?
On peut visualiser lerreur commise en crant une fonction erreur :
erreur(x):(1-Exp(0.01,x)/ ( (x)))*100

Puis en crant la suite des points de coordonnes (x,erreur(x)) pour x variant de 0 100
avec un pas de 1.
La commande   comme squencea permet de crer cette suite de valeurs :

 ( (x,erreur(x)),x0100)
Des commentaires ?

 :
   +   /+ 
Dans les quations diffrentielles ordinaires le logiciel Maxima trahit plus de bouteille que le
logiciel XCAS...
Le mme problme classique


'(
(y,x,2)=-100*y,y,x);
ne donne pas de surprise.
Rponse du logiciel
y=%k1sin(10x)+%k2cos(10x)

Mais le problme non linaire


'(
(y,x,2)=y^2,y,x);
apporte une rponse plus substantielle que le logiciel XCAS
Rponse du logiciel
sqrt(3)*integrate(1/sqrt(y^3+3*%k1),y))/sqrt(2)=x+%k2,
(sqrt(3)*integrate(1/sqrt(y^3+3*%k1),y))/sqrt(2)

Le chapitre daide sur les quations diffrentielles dcrit dautres instructions puissantes, notamment pour rsoudre des conditions initiales et des conditions aux limites.
a Cest--dire suite .

166

#   '!(

, # / #0
On obtient la mme chose sur MuPAD
Dune part
ode(y(t)-100*y(t),y(t));

 (%)

Rponse du logiciel
{C1*exp(-100*t) - 1/100*C2}

et
ode(y(t)(y(t))^2,y(t));

 (%)
renvoie

Rponse du logiciel
{0} union
solve(int(1/(y^3 - 3*C20)^(1/2), y) = 1/3*2^(1/2)*3^(1/2)*(C25 + t), y)
union
solve(int(1/(y^3 - 3*C20)^(1/2), y) = -1/3*2^(1/2)*3^(1/2)*(C28 + t), y)

167


Transforme de Laplace
Logiciel(s) abord(s) : Maxima XCAS

Problmatique : Premiers contacts avec la transforme de Laplace.

,

# /+ 

Le logiciel Maxima donne la transforme de Laplace F(p) de la fonction f (x) conformment


la formule

F(p) =

f (x)e px d x

avec linstruction  $$ &= =&. La transforme de e ax est calcule en saisissant :
g(x):= (a*x);
G(p):= (g(x),x,p);
G(p);

On retrouve la fonction de dpart avec la transforme inverse :

 (G(p),p,x);
La machine connat la relation lmentaire entre la transforme et celle de sa drive :
F(p):= (
(f(x),x),x,p);

Rsolvons lquation diffrentielle ordinaire du premier ordre coefficient constant :


y  = a y + ch(ax)
avec y(0) = 1.
F(p):= (
(y(x),x)-a*y(x),x,p);
F(p);

nous donne la relation entre la transforme de la fonction inconnue y et celle du second


membre ch(ax).
g(p):= ((a*x),x,p);
y(x):= ((g(p)+1)/(p-a),p,x);
y(x);


   :   
La rsolution dune"quation linaire coefficients constants de nimporte quel ordre est si+
milaire. Calculons 0 sin(x)/x d x. On sait que la transforme de x f (x) est la drive de la
transforme de f (x). Si F(p) est la transforme de sin(x)/x, sa drive F (p) est donne par :
Fprime(p):= (-(x),x,p);

Lintgrale recherche est la valeur F(0). Comme F tend vers 0 en +, cest aussi

+

F (p) d p.

La fonction Arctan est une primitive de F , on obtient donc /2 :


I:  (Fprime(p),p,,0);

, # !"#$
Le logiciel XCAS a un comportement similaire Maxima. La transforme inverse sappelle 
au lieu de  .
g(x): (a*x)
G(p): (g(x),x,p)
G(p)
 (G(p),p,x)
F(p): (
(f(x),x),x,p)
F(p)

Il ne connat pas les relations entre transforme et drive, mais il peut rsoudre aussi lquation diffrentielle :
g(p): ((a*x),x,p)
y(x): ((g(p)+1)/(p-a),p,x)
y(x)

Lintgrale est calcule de la mme faon ; attention la dernire ligne : la dfinition dune
constante et la notation de linfini diffrent de Maxima.
Fprime(p): (-(x),x,p)
I:  (Fprime(p),p,+ ,0);

170

Troisime partie

THMES


XCAS au lyce ?
Logiciel(s) abord(s) : XCAS

Problmatique : Comment et pourquoi utiliser XCAS au lyce.

!"#$      &   &

XCAS existe depuis quelques annes mais est trs mal connu au lyce car sa puissance fait
peur. XCAS permet en effet de traiter des problmes trs sophistiqus, mais galement (ce
quon passe souvent sous silence !) des problmes trs simples qui permettent par exemple
dinitier des lves de lcole primaire la programmation !
Nous commencerons par voquer la gomtrie dynamique au lyce car cest un domaine o
une comparaison avec les logiciels massivement utiliss par les professeurs du secondaire est
possible, ce qui nest pas le cas du calcul formel, de la programmation et surtout la possibilit
dassocier les trois plus le tableur qui constitue une des grandes forces de XCAS.
Un argument souvent soulev par ses dtracteurs est que XCAS fonctionne principalement en
ligne de commande. Notre exprience avec les lves nous incitent dire quil ne sagit pas
dun inconvnient mais plutt dun avantage pour eux : les lves de nos classes sont en effet
habitus dialoguer via leur ordinateur sur les sites de messagerie instantane. Le petit bmol
quon pourrait apporter est quavec XCAS, il ne faut pas faire de fautes dorthographe !
Les commandes sont de plus en franais et adaptes aux besoins des lves franais car cres
par des professeurs de lInstitut Joseph F OURIER de lUniversite Joseph F OURIER de Grenoble
et test grce lIREM. Que dites-vous de :
parallele, droite, segment, aire, longueur, angle, resoudre, graphe, cercle,
circonscrit, simplifier, factoriser, fonction_derivee,symetrie,... ?

Le mode de construction dune figure et de rsolution du problme correspond de mme la


dmarche suivie par llve sur sa feuille de papier.
Pour vous en convaincre, reportez-vous la section b. page 69.

 !"#$  

 

Il existe deux types principaux de sujets proposs pour lpreuve exprimentale du Bac S : les
problmes que peuvent traiter les logiciels de gomtrie dynamique que nous venons dtudier et ltude de suites laide du deuxime pilier de lducation Nationale, le tableur.

    ;0  # <


Nous allons donc nous intresser ce deuxime type de sujet. Voici par exemple le sujet 5 de
la banque dexercices de 2007 :
tude de la suite un+1 = a un + b pour a et b donns : convergence et valeur de la limite.
On supposera par la suite que a = 1. En effet, dans le cas contraire, un+1 = un + b : la suite est
donc arithmtique et ne mrite pas une tude pousse...
On construit une procdure donnant un en fonction de a, b et le premier terme u0 . On traite
le cas n = 0 pour initialiser. Ensuite il suffit de rentrer lexpression de un en fonction du terme
prcdent :
u(n,a,b,uo):{
 n0    uo;
 a*u(n-1,a,b,uo)+b;


//

C e s t d i r e

u(n)

a * u ( n 1 ) + b

}:;

Par exemple, pour a = 0, 7, b = 1 et u0 = 1, on obtient :


u(100,.7,1,1);u(500,.7,1,1)

//

le

1 0 0 me

et

le

5 0 0 me

terme

Rponse du logiciel
3.333333333,3.333333333

On peut prfrer fixer a,b et u0 hors de la procdure et dfinir u de manire plus


standard ainsi :
u(n):{
 n0   
 a*u(n-1)+b

uo;

}:;

et alors :
a:0.7
b:1
uo:1
u(100);

On a limpression davoir de srieux candidats pour la valeur de la limite. Pour confirmer cette
intuition, reprsentons graphiquement les premiers termes de la suite. On cre une squence
S de coordonnes, vide au dpart, laquelle on ajoute les points coordonnes (k, uk ) pour k
variant de 0 n :

174

    !


AffSuite(n,a,b,uo):{
 S,k;
S:()); / / S e s t v i d e a u d p a r t : i l n y a p a s e n c o r e
 (point_carre+ ); / / p o u r l e s t h t i q u e  .
 k de 0 , n  1 
S:S, (k,u(k,a,b,uo)); / / o n r a j o u t e l e p o i n t d e



k) )

notre

de

points

coordonnes

(k ,u(

liste

On affiche les valeurs de la suite ainsi que la limite prsume issue de notre calcul :
AffSuite(20,-.5,1,1), (0.66666667,x020,  )

et on obtient pour a = 0, 7, b = 1 et u0 = 1 :

et pour a = 1/2, b = 1 et u0 = 1 :

Notre intuition est conforte.

175

    ;0  # <

Complexit dun algorithme


Cette manire de procder peut sembler naturelle et proche dune dmarche
papier-crayon , mais nest pas optimale informatiquement. On peut, pour la
culture des lves, voquer le problme crucial de la complexit dun algorithme.
En effet, dans AffSuite, on recalcule u(k,a,b,uo) chaque tour de boucle : pour
aller jusquau rang n, on effectue donc 1 + 2 + 3 + + n = n(n+1)
calculs.
2
On dit que la complexit de lalgorithme est de lordre de n 2 .
Voici une manire plus informatique et efficace de procder :
AffSuiteBis(n,a,b,u0):{
 S,k,uk;
 (point_carre+ );
S: (0,u0); / / p r e m i e r t e r m e
k:u0;
 k de 1 , n  1 
uk:a*uk+b;
S:S, (k,uk); / / o n r a j o u t e



notre

le

point

de

coordonnes

( k , u_k )

liste

On effectue n calculs pour avoir AffSuiteBis(n,a,b,uo) : la complexit est maintenant de lordre de n.


Le problme de la complexit est ici accessoire car dans les deux cas lordinateur
effectue ces calculs simples trs rapidement. Cependant, quand les algorithmes
sont plus sophistiqus, cela peut permettre de sauver beaucoup de temps. On peut
mme voquer le systme RSA qui assure la scurit des transactions sur internet
ou bancaires et dont la scurit est base sur la complexit informatique du cassage
du code thoriquement possible mais hors du temps humain pour linstant.

Nous pouvons aussi remarquer que un+1 = f (un ), avec f (x) = ax + b.


Nous pouvons reprsenter la suite directement avec la fonction XCAS

  ((f(x),u(0),n) :

  (0.7*x+1,1,10)

qui affiche un graphe que les lves de terminales savent interprter :

176

    !

Le candidat pour la limite semble tre lintersection des droites dquations y = ax+b et y = x.
On obtient la solution avec  
 (quation,inconnue) :

 
 ((7/10)*x+1x,x)
Rponse du logiciel

10
3

Il ne reste plus qu le dmontrer...


Soit p la solution de ax + b = x. Elle existe bien car on a suppos a = 1.
Alors, en effectuant la diffrence membre membre de un+1 = aun + b et p = ap + b, on
obtient :
un+1 p = a(un p)
Donc la suite (un p) est gomtrique de raison a et de premier terme u0 p.
On obtient donc
un = (u0 p)a n + p
Vrifions :
expu(n,a,b,uo):{
 p,c;
p: 
 (a*x+bx)[0]; / / l a s o l u t i o n d e l q u a t i o n
c:  (uo-p); / / o n s i m p l i f i e l c r i t u r e d e u 0 p
 (c*a^n+p) / / o n r e n v o i e ( uo p ) * a ^ n + p
}:;

Par exemple, toujours avec a = 0, 7, b = 1 et u0 = 1 :


expu(n,7/10,1,1)

177

    ;0  # <


Rponse du logiciel

!
7 n
7
10
10
+
3
3

Comparons maintenant les graphes :


AffSuite(20,7/10,1,1), (expu(x,7/10,1,1),x020,  )

Et voil... Nous pouvons mme nous payer le luxe de vrifier que expu vrifie la formule de
rcurrence initiale dans le cas gnral, cest--dire pour a, b, u0 quelconques !
Ce confort nest bien sr possible quavec un logiciel de calcul formel...
expu(n+1,a,b,uo)-(a*expu(n,a,b,uo)+b)
Rponse du logiciel

(a uo + b uo)

1
a1

(a)n+1

b
a1

!
a ((a uo + b uo)

1
a1

Oups...

  (())

//

simplifie

le

rsultat

prcdent

Rponse du logiciel
0

178

(a )n

b
a1

!!
) b

&  %!   
!1  !    22  !   5


Cest mieux ! Nous pouvons aller jusqu calculer la limite de la suite dans le cas gnral :

  (expu(n,a,b,uo),n,+ )
Mais XCAS ne sait que rpondre... Il faut bien sr distinguer les cas :

 (a>0) 
 (a<1); / / 0<a<1
  (expu(n,a,b,uo),n,+ )
Rponse du logiciel

b
a1

et dans le cas a > 1 :

 (a>1);
  (expu(n,a,b,uo),n,+ )
Rponse du logiciel
infinity

Ainsi, XCAS nous permet non seulement dobserver le rsultat mais surtout de le dmontrer
grce ses facults de calcul formel. Nous allons illustrer plus prcisment ce point dans le
paragraphe suivant.

 "    7         


% <


   ) !  +

Les coniques ne sont plus au programme de terminale mais sont encore sources dactivits.
Nous allons ici nous occuper dun thorme concernant le trac de la tangente une conique
et le prouver laide de XCAS ce qui nest possible quavec un logiciel de calcul formela .
Le thorme initial est le suivant :
a Cette activit est traite plus longuement la section 5.2 page 211.

179

    ;0  # <

Construction de la tangente une conique


Soit une conique de foyer F et de directrice associe D. La tangente en tout
point M qui nappartient pas laxe focal coupe D en un point T tel que lon ait

FM FT = 0

Nous allons adapter lnonc au cas dune demi-ellipse dfinie laide dune fonction :
Soient a et b deux rels strictement positifs tels que a > b et f la fonction dfinie sur [a ; a] par
(
f (x) = b

x2
a2



Notons la courbe reprsentative de f dans un repre orthonorm O;
u ,
v .

2
Soit F le point de coordonnes ( a 2 b 2 ; 0) et D la droite dquation x =  a2 2 .
a b
Montrez que la tangente en tout point M dordonne non nulle coupe D en un point T tel

que lon ait FM FT = 0
Nous pouvons bien sr commencer par illustrer des cas particuliers en prenant un point mobile sur et en observant que la proprit reste vrifie.
Nous allons sauter cette tape, notre propos tant de montrer comment un logiciel de calcul
formel permet non seulement dillustrer mais aussi de prouver un thorme gnral.
Nous commenons par dfinir la fonction f :
f:x->b* (1-(x^2/a^2)):;

Nous allons ensuite considrer un point quelconque de dabscisse t , avec t ] a ; a[ :

 (a>0):;
 (t>-a) 
 (t<a):;
M: (t,f(t)):;
Pour dfinir la tangente d en M, nous allons introduire la fonction drive de f que nous
noterons f p. Nous utiliserons les commandes XCAS  et 
 qui renvoient
labscisse et lordonne dun point bien sr, et la commande
 qui permet de dfinir
une droite de multiples faons (par une quation, deux points, comme intersection de deux
plans, une reprsentation paramtrique...). Nous la dfinirons ici par lquation classique y =
f  (x) (x xM ) + f (xM ) :
fp: 
 (f):;
d:
 (yfp( (M))*(x- (M))+
 (M)):;

180

&  %!   
!1  !    22  !   5



Mode muet
Vous noterez que chaque ligne de commande se termine par :; ce qui indique
XCAS quil doit valuer cette ligne mais sans renvoyer de rsultat. En effet, aucun
trac ne peut tre effectu pour linstant car aucune valeur numrique nest affecte
aux paramtres a, b et t .

Il reste dfinir le point F et la droite D :


F: ( (a^2-b^2),0):;
D:
 (xa^2/ (a^2-b^2)):;

Le point T est lintersection des droites d et D.


On utilise la commande    (ensemble1,ensemble2) :
T: 

 (d,D):;


Il ne reste plus qu calculer le produit scalaire FM FT laide de 


 .

 
 (  (M,F),  (T,F))


Calcul vectoriel
Un vecteur pour XCAS est une liste de coordonnes entre deux crochets tout
comme lest un point. Lopration M F est donc licite pour XCAS. Pour ne pas semer le trouble dans les esprits des lves du lyce, on peut remplacer M F par
coordonnees(M)-coordonnees(F), ou bien, pour viter de calculer avec des systmes de coordonnes, on peut prfrer travailler sur les affixes en rentrant

 
 ( (M)- (F), (T)- (F))
On peut galement demander Bernard PARISSE de crer une commande
vecteur(M1,M2) synonyme de M2-M1 pour lordinateur mais moins choquante
pour les lves. Cest ce que jai fait... et obtenu une heure plus tard ! Encore un
point fort de XCAS...

Ainsi :

 
 (  (F,M),  (F,T))
181

    ;0  # <


Rponse du logiciel

a2 b2
(


(a4 + a2 t2 ) a2 b2
a 4 + a 2 t 2 + ( a 2 t 2 ) b 2

a 2 (b 2 ) +





t2  
b 1 2 a a2 t2 b3 a3 a2 t2 b + at a2 t2 b a2 b2
a


a 4 + a 2 t 2 + a 2 t 2 b 2

Ouh la la... Voici un calcul qui a de quoi dprimer nimporte quel lve de lyce. Heureusement, nous pouvons faire effectuer le sale boulot XCAS grce la commande   
et se concentrer sur le problme gomtrique sans tre gn par les difficults de calcul algbrique.
Cette fois-ci :

  ( 


 (  (M,F),  (T,F))

renvoie bien 0, ce qui prouve notre thorme car les calculs ont t effectus dans le cas gnral.



7
   !"

Pour observer ce phnomne en gomtrie dynamique, il suffit douvrir une fentre de gomtrie en tapant  -  puis en dfinissant a, b et t comme tant des paramtres que nous
ferons varier la souris :
a: 
b: 
t: 

 (05)
 (0a)
 (-aa)

le reste des instructions restant inchang. On obtient :

182

 '
2



$     

Nous voici donc en mesure de tracer nimporte quelle tangente une ellipse laide dune
querre puisquil suffit de tracer la perpendiculaire (MF) en M puis lintersection T de cette
droite avec une directrice : la tangente est la droite (TM).
Il sagit dun problme gomtrique. Lordinateur nous permet de prouver ce thorme en se
dispensant de passer trop de temps dans des calculs algbriques compliqus : nous restons
dynamiques mathmatiquement sans tre perturbs par laquisition dune virtuosit algbrique ou informatique. Les instructions donnes correspondent la dmarche mathmatique. Nous avons fait des mathmatiques et trs peu dinformatique en somme. Nous nous
sommes concentrs sur le raisonnement et lordinateur nous a permis de ne pas nous perdre
dans les calculs.
Le travail avec un calculateur formel est donc la continuation logique du travail avec une
calculatrice usuelle, mais en offrant beaucoup plus de possibilits bien sr.

 /  
On reproche souvent lutilisation de linformatique au lyce dexister pour elle-mme et
de semer la confusion dans les esprits des lves en les incitant confondre observation et
preuve.
On peut galement remarquer que sur les 97 propositions de sujets pour lpreuve exprimentale du Bac S 2008, les domaines traits couvrent une trs petite partie du programme du
Bac : essentiellement les suites, la gomtrie, voire un peu de probabilits.
Ces reproches sont souvent justifis compte tenu des limitations des logiciels promus officiellement : le tableur et les logiciels de gomtrie dynamique, par essence, ne permettent

183

    ;0  # <


que dobserver des donnes numriques ou gomtriques et ne peuvent laborer une preuve
gnrale, ce que peut faire un logiciel de calcul formel. Ils ne peuvent non plus aborder le
calcul diffrentiel, intgrale, algbrique que de manire numrique ou exprimentale et donc
passent ct de la plus grande partie du programme de terminale S.
Dun autre ct, on reproche aux logiciels de calcul formel dtre trop compliqus utiliser au lyce. Nous venons de voir que cest injustifi et quau contraire travailler en ligne de
commande et ainsi dialoguer naturellement avec lordinateur peut en fait tre beaucoup plus
simple que de naviguer dans des menus, sous-menus et autres sous-sous-menus dicnes
cliquer.
Enfin, de manire plus prcise, le logiciel XCAS semble tre particulirement adapt au lyce
car il permet la fois de faire du calcul formel, de la gomtrie dynamique, du tableur et est
largement francis.
Il resterait parler de linitiation la programmation qui devrait faire partie du bagage minimum fourni aux lves des sections scientifiques (ce qui est le cas dans de nombreux pays
europens) et qui peut tre galement aborde grce XCAS ds la seconde comme nous en
avons fait lexprience depuis plusieurs annes dans nos classes... et mme ds lcole primaire grce la Tortue de XCAS...
Pour un autre exemple dactivit au lyce avec XCAS, voir la section d. page 163.

184



Logique lmentaire
Logiciel(s) abord(s) : Yacas

Problmatique : Apprendre les rudiments de logique en samusant.

Notions informatiques : Le logiciel Yacas permet un tout petit peu


de calcul logique avec la commande 84 . Ce calcul est aussi
appel algbre de Boole.
Il nest pas question de dvelopper ni de simplifier les expressions logiques sous Yacas. Cest lutilisateur de faire le calcul par lui-mme
pour ensuite demander la machine de le valider.

 
  

Si largument de la commande 84 (le prdicat) est une tautologie, la machine rpond
True; et si cest toujours faux (le contraire dune tautologie), la machine rpond False;. Si la
machine ne peut dcider, elle recopie le prdicat.
Les oprateurs logiques habituels scrivent dans un style assez naturel (en anglais) avec une
majuscule initiale. Il faut bien sr veiller respecter les parenthses qui regroupent les objets.
Vrifions dabord laxiome du tiers exclu. On suppose que le prdicat A na pas t utilis plus
avant dans la session Yacas.

84 (A  (

A)

Cest toujours vrai ! La machine connat aussi laxiome de non-contradiction :

84 (A .
(

A)

est toujours faux.

 #>  1 
Vrifions une des proprits lmentaires du calcul logique, la loi de Morgan. Introduisons
dabord les instructions qui nous permettront de tester nos constructions par la suite, en les
faisant rexcuter grce aux flches du clavier.
Nous allons essayer de prouver lquivalence de deux prdicats P et Q.

    
  

84 (P >
84 (Q >

Q)
P)

La machine ne doit pas pouvoir dcider maintenant. Elle rpond dailleurs par la traduction
de limplication =: dans les oprateurs logiques lmentaires qui sont .
, , ( .
Plus tard, si la machine rpond True; aux deux instructions ci-dessus, cest que les prdicats P
et Q seront devenus quivalents.
Voici leur dfinition :
P:( (A .
B)
Q:( A  ( B

En rexcutant les tests logiques,

84 (P >
84 (Q >

Q)
P)

les deux rponses True; nous affirment la tautologie recherche :


non

(A et B)

non A ou non B.

Vrifions maintenant que la double ngation est bien lidentit, cest--dire que la ngation
est une involution. On efface dabord Q qui sert redfinir P :
Q

8 (Q)
Q
P:(

(

On vrifie avec le test enjoliv :

84

( (P > Q)

.

(Q > P) )

Ce doit tre toujours vrai. . .


Nous pouvons donc dmontrer que lun des deux axiomes tiers exclu et non-contradiction se
dduit de lautre grce aux deux proprits ci-dessus.

8 (A);8 (B)
P:( (B .
( A)
Q:A  ( B
84 ( (P > Q) .

(Q > P) )

Le test dmontre que A ou non B est la ngation de B et non A . En remplaant B par A, on


constate quobtenir la premire rponse (vrai) de ce chapitre quivaut obtenir la deuxime
rponse (faux).

  
  % 

Le raisonnement par labsurde consiste dmontrer une implication en dmontrant que sa
contrapose (cest--dire son contraire) est fausse.
Redfinissons les prdicats P et Q pour rutiliser la procdure de test.

186

&  
   
 )
! 
P: ( (x > y)
Q: x .
( y
84 ( (P > Q)

.

(Q > P) )

On obtient la technique courante : si lon russit dmontrer que la proposition x et pas y


est fausse, cest que x implique y.

On ne peut pas renverser le sens de limplication, le symbole A signifie infrieur ou


gal : pour Yacas.

187


Thorme de Pappus
Logiciel(s) abord(s) : XCAS

Notions informatiques : Nous allons exploiter les capacits calculatoires de lordinateur pour rsoudre analytiquement des problmes
gomtriques. >

Problmatique : Le traitement algbrique de lalignement des points


grce aux coordonnes barycentriques va nous permettre de donner
une preuve rapide du thorme de Mnlas.
Le dlicat problme des cercles de Pappus peut tre efficacement
trait analytiquement en demandant XCAS de rsoudre des systmes non linaires.




"  
& 

.  ) 

Il est facile de montrer le rsultat suivant :

Soient A, B et C trois points non aligns du plan. Alors, pour tout point M du plan,
il existe trois rels , et tels que + + = 0 et tels que M soit le barycentre des
points A,B et C affects des coefficients , et .

 

Il suffit dexprimer le vecteur AM dans la base AB, AC . Soient a et b les coordonnes de AM


dans cette base, on obtient

(1 a b)AM + a BM + b CM = 0
On appelle (, , ) un systme de coordonnes barycentriques de M dans le repre affine
(A,B,C). Si + + = 1, le systme est dit normalis.

       =>  


On obtient facilement une condition dalignement de trois points :

Soit (A,B,C) un repre affine et trois points M1 , M2 et M3 de coordonnes barycentriques normalises respectives (x1 , y 1 , z1 ), (x2 , y 2 , z2 ), et(x3 , y 3 , z3 ).
Alors M1 , M2 et M3 sont aligns si, et seulement si
&
&
&x1
&
&x
& 2
&
&x
3

&
&
z1 &
&
z2 && = 0
&
z3 &

y1
y2
y3

Il suffit de remarquer que


&
&
&x 1
&
&
&x 2
&
&
&x 3

y1
y2
y3

& &
& &
z1 && &&x1 + y 1 + z1
& &
z2 && = &&x2 + y 2 + z2
& &
z 3 & &x 3 + y 3 + z 3

y1
y2
y3

& &
& &
z1 && &&0
& &
z2 && = &&0
& &
z 3 & &1

y1 y3
y2 y3
y3

&
&
z1 z3 &&
&
z2 z3 && = (y 1 y 3 )(z2 z3 ) (y 2 y 3 )(z1 z3 )
&
z3 &


Ce dterminant est nul si, et seulement si, les vecteurs M1 M3 et M2 M3 sont lis, i.e. les points
sont aligns.
Cela nous permet davoir un outil calculatoire pour tester lalignement de points :
xb:M->1- (M)-
 (M);
barycentrique

//

donne

la

1 re

coordonne

normalise

yb:M-> (M);
zb:M->
 (M);
cb:M->[xb(M),yb(M),zb(M)]; / / d o n n e l e s y s t m e n o r m a l i s
align(A,B,C):{

([cb(A),cb(B),cb(C)])0   ("les points sont aligns
");
  ("les points ne sont  aligns");;}:;

Alors :
align( (1+), (2+2*), (3+3*))

renvoie :
Rponse du logiciel
les points sont aligns



.  
    !  +     @

Rappelons ce thorme

190

&    2 


  %!

Soit ABC un triangle. Soit trois points I, J et K appartenant respectivement aux


droites (BC), (CA), (AB) et distincts des trois sommets A, B et C.
Alors I, J et K sont aligns si, et seulement si
IB
IC

JC
JA

KA
KB

=1

Nous allons bien sr utiliser la condition dalignement vue prcdemmenta . Nous allons travailler dans le repre affine (A,B,C) et mettre en vidence lappartenance des points aux droites
A:[1,0,0]:;
B:[0,1,0]:;
C:[0,0,1]:;
K:A+k*B:;
J:j*A+C:;
I:x*B+C:;

Par exemple I admet donc pour coordonnes barycentriques


Rponse du logiciel
[0,x,1]

C ONDITION NCESSAIRE. On suppose que les points sont aligns. On peut alors traduire cette
proprit par le fait que
&
&
& xI
&
&x
& J
&
&x
K

yI
yJ
yK

&
&
zI &
&
zJ && = 0
&
zK &

(1)

Exprimons alors x en fonction des autres coefficients


x: (
([I,J,K])0,x)[0]

Effectuons alors le produit propos

 ((-I[1]/I[2])*(-J[2]/J[0])*(-K[0]/K[1]))
Nous trouvons bien le rsultat attendu : XCAS a prouv la condition ncessaire.
C ONDITION SUFFISANTE. On prend soin de purger la variable x de la valeur trouve prcdemment
a Pour dautres dmonstrations plus classiques, voir S ORTAIS , Yvonne/S ORTAIS , Ren La gomtrie du triangle . Paris:

Hermann, 1987

191

       =>  


 (x)
On utilise cette fois-ci lgalit (1)
x: ((-I[1]/I[2])*(-J[2]/J[0])*(-K[0]/K[1])1,x)[0]

Les points sont-ils aligns ?

([I,J,K])
Oui, rpond XCAS : la preuve est faite !

  >   / 
Le 5 aot 2007, nous sommes tombs sur la figure suivante parue dans le journal Le Monde
yC
M_6

7
M_3
6

T
3

O
M_4

1
M_5
A

M_2

M_1

B
x

-1

-6

-4

-2

  Problme du Monde du 5 aot 2007

La question tant : est-ce que CM6 + AM2 + BM4 = CM3 + BM1 + AM5 ?
Il faut prciser que le triangle est quilatral.
Demandons XCAS
R:   (05);
x:   (-33);
y:   (-15);
O: (x,y); / / u n p o i n t O v a r i a b l e
c:  (O,R); / / l e c e r c l e c a u s s i
a:   (0  5,);
A: (-a,0);B: (a,0);
T: (   (A,B,C), +line_width_2)
triangle

192

bleu

ct

variable

//

un

beau

&&    


!
M_1: (c,T)[0];M_2: (c,T)[1];
M_3: (c,T)[2];M_4: (c,T)[3];
M_5: (c,T)[4];M_6: (c,T)[5];

//

on

construit

les

points

Il ne reste plus qu tester


l1: (C,M_6)+ (A,M_2)+ (B,M_4);
l2: (C,M_3)+ (A,M_5)+ (B,M_1);

Cela semble concluant... Il ne reste plus qu le dmontrer.


Il suffit de penser la puissance des sommets par rapport au cercle...
On obtient successivement :

CM6 CM5 = CM3 CM4

AM2 AM1 = AM5 AM6

BM4 BM3 = BM1 BM2

Puis, en additionnant membre membre ces galit et en notant a le ct du triangle


CM6 (a AM5 ) + AM2 (a BM1 ) + BM4 (a CM3 ) = AM5 AM6 + BM1 BM2 + CM3 CM4
et le rsultat sen dduit :

a(CM6 +AM2 +BM4 ) = AM5 (AM6 +CM6 )+BM1 (BM2 +AM2 )+CM3 (CM4 +BM4 ) = a(AM5 +BM1 +CM3 )

 "
 %%

 ! !
 "

Dabord un dessin :

  Cercles de Pappus


Comment tracer cette figure ?

193

       =>  


Au IIIe sicle avant J.C., le mathmaticien grec Pappus proposa le thorme suivant qui va
nous aider dans notre construction. Il sagit du thorme XV du livre IV de ses Collections mathmatiques traduites du grec pour la premire fois en 1932 seulement par Paul V ER E ECKEb .

Thorme de Pappus
On considre trois demi-disques (C), () et (C0 ) centrs sur une droite (d). On suppose que (C) et (C0 ) sont contenus dans (), tous deux tangents Gamma et tangents entre eux.

Soit (C1 ), (C2 ), . . . , (Cn ) une suite de cercles tangents (C) et () et tel que chaque
cercle (Ck ) est tangent au cercle suivant (Ck+1).
On note r k le rayon du cercle (Ck ) et hk la distance de son centre la droite (d).
Alors hk = 2r k pour tout k 1 ; n.

Pour des dmonstrations des rsultats utiliss, voirc et notammentd qui arrive rapidement au
rsultat en considrant des inversions. On montre de la mme manire que le lieu des points
de contact entre les cercles (Ck ) est le cercle bissecteur de (C) et ().
Une fois ces rsultats en poche, la partie nest pas gagne car il reste encore des systmes
dlicats rsoudre. Cest ici que XCAS peut nous aider avec ses capacits de calcul.
On cre un point dabscisse mobile et des cercles de rayons variables. Par commodit, on
placera les centres des cercles sur laxe des abscisses :
xO:   (-5  5);
O: (xO,0);
R:   (0  5);
C: (  (O,R), +
r:   (0  5);
o: (xO-R-r,0);
c:  (o,r);


 );

La position choisie pour o assure que les deux cercles soient tangents. Il sagit maintenant de
crer le cercle . Pour obtenir son centre, on utilise la fonction    ([pt,poids],...)
oo:barycentre([o,r],[O,R]);
cc: (  (oo,r+R),   +


 );

La figure de base tant faite, intressons-nous au problme de Pappus : comment dterminer


la position du centre O1 du cercle (C1 ) ?
b Paul ver Eecke - La Collection Mathmatique de Pappus dAlexandrie , introduction (1932, rd. 1982) - Libr. A.

Blanchard, Paris
c T HBAULT , Victor Sur le tranchet dArchimde . Bulletin de la S.M.F. Tome 72 1944.
d A BDELJAOUAD , Mahdi lments de Gomtrie du Plan . Tunis: Association Tunisienne des Sciences Mathmatiques,

2000.

194

&&    


!

Y /2

Y/
2

  Dtermination du cercle (C1 )


Le thorme de Pappus nous dit que le rayon de (C1 ) vaut Y/2. Le point O1 est donc lintersection ordonne maximum du cercle de centre o et de rayon r+Y/2 et de celui de centre O et
de rayon R + Y/2.
s: ([(Y)^2(r+Y/2)^2-X^2,(Y)^2(R+Y/2)^2-(R+r-X)^2],[X,Y]);
o1: ( (o)+s[0][0],s[0][1]); / / s [ 0 ] [ 0 ] e s t l a b s c i s s e
er

du

point .

c1:  (o1,s[0][1]/2)

//

le

rayon

est

Y /2

Et dun...
Pour les autres cercles, nous allons utiliser le deuxime rsultat, savoir que les points de
contacts sont sur le cercle mdiateur de (C) et . Ce cercle passe par k 1 , intersection entre
(C1 ) et (C0 ) :
k1: (c,c1)[0]

et I, le point de contact entre (C) et :


I: (C,cc)[0]

Mais connatre ces deux points ne suffit pas pour tracer le cercle. Appelons a labscisse du
centre de ce cercle (son ordonne est nulle) et b le rayon. Une quation du cercle est donc
(x a)2 + y 2 = b 2 . Exprimons que k 1 et I appartiennent ce cercle que nous nommerons K :
S: ([( (k1)-a)^2+(
 (k1))^2b^2,( (I)-a)^2+(

 (I))^2b^2],[a,b]);
K: (  ( (S[1][0],0),S[1][1]), );

a y est ! Nous avons tous les lments pour crer une procdure pappus(n) qui tracera les n
premiers cercles tangents, et mme leurs symtriques par rapport laxe (Ox)
pappus(n):{
ks:());ks:ks,k1;

//

une

liste

//

liste

de

points

de

contact

qui

contient

dj

k1

cs:());cs:cs,c1;

des

cercles

195

       =>  


os:());os:os,o1; / / l i s t e d e s c e n t r e s
css:());css:css,  (
 (y0),c1);

//

liste

des

cercles

symtriques

(j:1;j<n;j++){
ks:ks,( ( (cs[j-1],K)[1])> ( (cs[j-1],K)[0])
) (cs[j-1],K)[1]; 
 (cs[j-1],K)[0]; / / p o u r p r e n d r e l e b o n p o i n t d e c o n t a c t
oj: (xx,yy); / / u n p o i n t i n c o n n u
 (x); / / o n v i d e l a v a r i a b l e x u t i l i s e d a n s s o l v e
eqj:(  (
 (os[j-1],ks[j]))[2],xxx); / / c e c i p e r m e t d
obtenir
droite

 (x);

l ordonne
( O _ j 1

//

on

de

oj

sachant

que

ce

point

appartient

la

K_j )

re v i d e

car

on

va

utiliser

nouveau

solve

Ici, une pause simpose : nous allons exprimer que O j est tel que O j 1 O j = O j 1 K j + r j , avec
hj

r j = 2(j +1) comme nous laffirme le thorme de Pappus. Cest un systme peu vident rsoudre. Nous allons donner une indication XCAS : la solution est proche de k j . Nous lui
demanderons ensuite dutiliser la mthode de Newton :
fs: ([ (os[j-1],oj) (os[j-1],ks[j])+0.5*yy/(j+1)
,yyeqj],[xx,yy],[ (ks[j]),
 (ks[j])],dnewton_solver
);

Il ne reste plus qu rajouter nos cercles :

 (xx,yy);
os:os, (fs[0],fs[1]); / / l e n o u v e a u c e n t r e
cs:cs,  (os[j], (os[j],ks[j])); / / l e n o u v e a u c e r c l e
css:css,  (
 (y0),  (os[j], (os[j],ks[j])));
//

son

symtrique

};

 (cs,css)

//

on

trace

les

deux

sries

de

cercles

}:;



5


  
 
   "
 )
 


La mthode prcdente est intressante informatiquement et mathmatiquement : elle est


cependant gourmande en temps de calcul.
On peut cependant voir les cercles de Pappus comme des billes molles dans un tube mou
dont on aurait recoll les extrmits, ce qui nous fait bien sr penser ... une inversion qui
transforme certaines droites en des cerclese .
XCAS possde une commande  (ple,rapport,point) qui calcule les coordonnes de limage dun point par une inversion. Le problme, cest que nous aimerions obtenir
e Merci I VALDI , Philippe ressources Asymptote . URL: http://piprim.tuxfamily.org/asymptote/travaux/

index.html.

196

&&    


!

les images densembles de points et non pas de points isols. Lide est dutiliser des reprsentations paramtriques de ces ensembles. Nous profiterons de lexistence sur XCAS des commandes  (courbe) qui renvoie lcriture paramtrique complexe dune courbe et
   (affixe,paramtre). Par exemple :

( (  ( (x+iy),r)))

//

evalc

renvoie

la

forme

algbrique

Rponse du logiciel

(r) cos (t) + x + i ((r) sin (t) + y)

Nous allons donc crer une procdure inv_courbe(C,k,g) avec C le ple de linversion, k
son rapport et g lensemble de point aprs avoir ouvert une fentre de programmation en
tapant sur  et  :
inv_courbe(C,k,g):{
paramg,paramG;
paramg: (g); / / g s o u s f o r m e p a r a m t r i q u e
paramG: (C,k,paramg); / / s o n i m a g e p a r



Le

rsultat

est

un

point

dont

il

faut

.
l inversion

extraire

attention

l affixe .

 (courbe_parametrique( (paramG),t-500500,tstep0.5),g);
on

affiche

et

son

image

par

//

l inversion .

}:;

On ouvre une fentre de gomtrie avec


On dfinit le ple :



et

C: (-5)

On dfinit les images des bords du tube :


inv_courbe(C,10,
 (x-1));
inv_courbe(C,10,
 (x1));

On construit les images dune vingtaine de billes tangentes entre elles et aux parois du
tube . On prend donc ici des cercles de rayon 1 et de centres situs sur laxe des ordonnes :
L:());
 (j:-n; j < n; j++) {
g:inv_courbe(C,10,  ( (0,2*j),1));
L:L,g;
}:;
L

197

       =>  


Cela donne :

 
Cercles de pappus obtenus en utilisant une inversion.

198


Suites et chaos

Logiciel(s) abord(s) : XCAS

Notions informatiques : Cette brve tude sera loccasion de dcouvrir les possibilits offertes par XCAS pour tudier des suites du
type un+1 = f (un ). Nous construirons galement une procdure qui
ncessitera beaucoup dastuce informatique afin que lordinateur
donne un rsultat en un temps raisonnable.

Problmatique : Vers 1950, le mtorologiste amricain Edward L O RENZ tudie la circulation atmosphrique. Il se base pour cela sur
les travaux des mathmaticiens franais H ADAMARD et P OINCAR sur
limprdictibilit des systmes simples. Mme en modlisant latmosphre en un systme ayant une dizaine de degrs de libert, il
montre la sensibilit exponentielle par rapport aux conditions initiales. Il illustre son propos en montrant que le battement daile dun
papillon en un point de la Terre est suffisant pour dclencher deux
semaines plus tard une tornade lautre bout de la plante. Au mme
moment, le russe Vladimir A RNOLD , disciple de KOLMOGOROV , modlise le mouvement dun fluide parfait comme celui dun point sur
une hypersurface de dimension infinie. Il part lui aussi de travaux dH ADAMARD sur les trajectoires dune bille sur certaines surfaces : par exemple, si on lche une bille sur un parabolode hyperbolique (une selle de cheval), sa trajectoire va dpendre normment de
sa position de dpart, tel point quil savre impossible de prvoir sa
trajectoire au-del dun temps trs court.
Bref, leffet papillon envahit les esprits et nombre de disciplines pour
imposer une vision chaotique dun monde complexe et imprdictible. Cest ce phnomne que nous allons observer et commenter
aujourdhui, non pas en tudiant le domaine des turbulences atmosphriques physiquement hors de notre porte, mais en explorant,
de manire trs simplifie, la dynamique des populations.
Nous voquerons en conclusion les apports rcents de la mcanique
statistique qui replace dans leur contexte les travaux de L ORENZ et
A RNOLD .

    0
  



/ 
  

Comme vous le savez tous, le Zrjdz commun ailette mouchete est lanimal emblmatique
de la Syldavie. Aussi paisible que les habitants de ce bucolique pays, le Zrjdz se nourrit exclusivement des baies du bleurtschzrn, arbre qui pousse en abondance dans les verts sous-bois
syldaves. Si lon ne considrait que cette idale situation, la population u de Zrjdzs suivrait
la loi suivante
un+1 = Run
Cette relation traduit le fait que la population de lanne n + 1 est proportionnelle lanne
n : on applique un le taux de natalit et le taux de mortalit. Le coefficient R rsume ces
proportions.
Il est assez ais dobjecter au modle prcdent que lvolution ne peut pas rester proportionnelle la population de lanne prcdente : au bout dun moment la nourriture et lespace
vital, par exemple, viennent manquer. On peut alors modliser lvolution de la population
selon la loi
p n+1 = R p n (1 p n )
avec p n reprsentant la proportion par rapport un maximum estim.

 
   ';
p(R,po,n):{
 pn,k;
pn:po;
(k:1;k<n;k++){
pn:R*pn*(1-pn);
}
}:;

On peut ensuite regarder des sries de valeurs de la suite en faisant varier R :

 (u(1.5,0.2,10* k),k110)
Rponse du logiciel
0.3329912894,0.3333329986,0.333333333,0.3333333333,0.3333333333

 (u(2.5,0.2,10* k),k15)
Rponse du logiciel
0.6,0.6,0.6,0.6,0.6

 (u(3.5,0.2,10* k),k15)
200

& 
 
%!

Rponse du logiciel
0.8683116395,0.8284245987,0.8749972464,0.8269407066,0.8749972636

 (u(3.71,0.2,10* k),k15)
Rponse du logiciel
0.6260986177,0.5214383835,0.6950564063,0.2789286664,0.772755663

 
   %'
Observer des sries de rsultats chiffrs, un peu comme cela se fait sur les tableurs, nest pas
trs parlant ni efficace.
Nous allons donc utiliser la commande   (f(x),uo,n) qui donne la reprsentation
classique des suites dfinies par une relation un+1 = f (un )a :

  (1.6*x*(1-x),x0.9,5)

  tude graphique de un+1 = 1, 6un (1 un )


Ouvrons une fentre de gomtrie en tapant  +  .
R:   (04) / / o n f a i t v a r i e r R
f:x->R*x*(1-x) / / o n d f i n i t f
x1: (f(x)x,x)[1] / / o n d f i n i t l e
fp: 
 (f) / / l a d r i v e

point
de

fixe

non

nul

de

a Pour une tude originale de ces suites, on pourra se rfrer R OUQUS , Jean-Philippe/D OMINGUEZ , Sophie Leons

particulires - Cours de Maths . Paris: Ellipses, 2002

201

    0
  
fp(x1)

//

on

vrifie

si

le

point

  (f(x),x1+0.0000001,2500)

fixe
//

on

est

attractif

choisit

uo

ou

plus

x1

Il ne reste plus qu observer des phnomnes trs tonnants.


Au dpart, pas de surprise :

pour 0 < R < 1, 0 est attractif

pour 1 < R < 3, 0 est rpulsif et x1 attractif

aprs 3, les choses se compliquent...

Par exemple, pour R = 3, 74471033, on a :

  On observe 4 valeurs dadhrence


Et pour R = 3, 74471034, assez proche de la valeur prcdente, on a :

202

rpulsif
ou

moins

proche

de

 (

  5!


  On nobserve plus de valeurs dadhrence


On peut galement, pour une mme valeur de R, observer ce que donne diffrentes valeurs
de po, en particulier de trs petites variations autour du point fixe x1.
Cest lillustration du fameux effet papillon : un battement daile de papillon Rez est
susceptible de dclencher beaucoup plus tard une tornade en Syldavie. La trs faible perturbation cre par le vol dun papillon pourrait en principe faire varier les conditions initiales
du systme atmosphrique et engendrer plus tard un changement climatique en un endroit
quelconque de notre plante.

 0

  <  

Ce phnomne est mis plus clairement en vidence par un diagramme de bifurcation.


Cette fois, on tudie les valeurs prises par la suite en fonction de R. Pour ne pas tre perturb
par les premiers termes, on soccupe des 20 termes qui suivent p 100 :
Feig(R,N):{ / / 1 / N e s t
 k,r,tmp,ligne;
tmp:(R*N);
/ / c omme o n

avance

res:[0 tmp];

// i l

aura

20

pas

points

le

1/N ,

par

ligne:[0 20];
 (r:0;r<R;r+1/N){
tmp:0.2;
//



calcul

de

calcul

des

pas

il

ligne

entre

deux

aura

car

on

valeurs

R *N
fait

points

varier

de

tracs

de

100

120

u100

(k:0;k<100;k++){
tmp:r*tmp*(1-tmp);

}
//



suivants

et

stockage

(k:0;k<20;k++){
ligne[k] :  (r,tmp);
tmp:r*tmp*(1-tmp);
res[r*N] < ligne;

 

res;

}:;

Si lon sy prend mal, il peut tre trs long dobtenir le graphique car de nombreux calculs
rptitifs sont ncessaires.
Par exemple, pour N = 5000 et R variant entre 0 et 4 on obtient en 80 secondes sur notre
ordinateur (400 000 points vont tre tracs... ) :

203

    0
  

Le papillon bat-il de laile


Les rsultats de L ORENZ et A RNOLD ne semblent pourtant pas avoir sonn le glas
des prvisions mto ! Cest quen fait, leurs travaux sont bass sur une chelle microscopique : il est en effet impossible de suivre un petit lment long terme
mais il est tout fait envisageable de faire des prdictions long termes lchelle
macroscopique grce aux rsultats de la physique statistique en considrant des
masses dair dans leur ensemble.
Ce phnomne est similaire lobservation dun gaz dans un rcipient : il est impossible de modliser la trajectoire dune molcule, mais on peut ltudier plutt
des valeurs moyennes et obtenir des quantits statistiques comme la temprature,
la pression du gaz dans le rcipient et cest ce qui nous intresse en gnral.
La mto reste cependant imprvisible longue chance, mme si elle est naturellement plus prvisible que lvolution des molcules. Par contre le climat, lui, est
plus prvisible, malheureusement pour nous et surtout nos enfants...
Le papillon reprend malgr tout son envol pour des conditions initiales critiques
qui font hsiter le systme tudi entre deux tats finaux distincts.

204


Coniques
Logiciel(s) abord(s) : XCAS

Notions informatiques : Ce chapitre sera loccasion de dcouvrir


de nombreuses commandes de calcul formel et de gomtrie dynamique.

Problmatique : Voici un cours assist par ordinateur : nous explorerons un maximum de notions sur les coniques, tant algbriques
que analytiques et gomtriques, dans le plan comme dans lespace.
Nous effectuerons des exprimentations bien sr, mais galement
des preuves de thormes.

,

=   
 

  !  "     $ AB

Pour nous simplifier la vie, nous tudierons en fait les courbes dquation :
ax 2 + by 2 + 2cx + 2d y + e = 0


Nous travaillerons dans un repre orthonorm O;
, j . Nous supposerons que a et b ne
sont pas tous deux nuls.


Nous appellerons la courbe dquation ax 2 +by 2 +2cx+2d y +e = 0 dans le repre O;
, j .
Il va falloir distinguer de nombreux cas, comme par exemple...

 
  ? ab = 0
Nous supposerons par exemple que cest b qui est nul. Alors
Si d = 0.

On obtient :

 (A*x^2+2*C*x+2*D*y+E0)

   

Rponse du logiciel

(A)(x)2 (2xC)E
2D

a
e
En posant = 2d
, = dc et = 2d
, est donc la courbe dquation y = x 2 + x + dans



O; , j avec = 0 :

 

(a*x^2+b*x+c)
Rponse du logiciel

a x + 2ba

2

4ac((b)2 )
4a

On obtient donc quil sagit de la parabole de sommet S 2 ;


Si d = 0.

42
4


.

Alors admet pour quation :

 

(x^2+2*C/A*x+E/A)
Rponse du logiciel

x+

!
2C 2
+
2A

4E
A

!
2C 2
A

x+

c 2 c 2 ea
=
a
a2

Deux cas doivent encore tre distingus :

c 2 ea 2 < 0, alors =  ;

c 2 ea  0, alors est la runion de deux droites verticales .

  ? ab = 0
On obtient comme quation quivalente puisque a et b sont non nuls :

 
206

(A*x^2+2*C*x)+

 ( (B*y^2+2*D*y,yx))+E

#  6! 
2%!   %!
Rponse du logiciel

A x + 22CA

2





2 
2
2
(24CA) + B x + 22DB (24DB) + E





, j .
Soit le point de coordonnes ac ; db dans O;
2

Posons k = ca db + e.



Alors est la courbe dquation ax 2 + by 2 + k = 0 dans le repre ;
, j .
Distinguons nouveau deux cas :
Si a et b sont de mme signe.

k est du signe de a et b, alors =  ;

k est nul, alors = ;

k est du signe contraire de a et b, alors en posant =


la courbe a pour quation

ka et =

kb on obtient que

x2 y 2
+
=1
2 2


dans ;
, j ;

Si k = 0, alors on peut poser m 2 = ab et a pour quation (y mx)(y + mx) = 0 dans



j . Ainsi est la runion de deux droites ;
; ,
+& &
+& &
&k &
& &
Si k = 0, en posant = & a & et = & kb & on obtient que la courbe a pour quation
x2 y 2

= 1
2 2


dans ;
, j .

Finalement :

  @

 !   %! )2%!


 ax 2 +by 2 +2cx +2d y +e = 0
 a  b  ! !" !
 ab = 01   )   1  
2!   !" 1  ! 



 ab > 01   )   1  !   1  !  
 ab < 01   
2!   !"  2
1  !  

207

   



  !  "     $ A<

Pour celles et ceux ayant tudi les formes quadratiques, nous allons pouvoir tudier les
courbes dquation
ax 2 + 2bx y + c y 2 + d x + e y + k = 0


j du plan. On supposera que (a, b, c) = (0, 0, 0).
dans un repre O; ,

On notera f (x, y) = ax 2 +2bx y +c y 2 +d x +e y +k = q(x)+ (x)+k, avec q(x) = ax 2 +2bx y +c y 2


la partie quadratique et (x) = d x + e y la partie linaire.

!
  

  ,

Posons V =

 
x
y

,A=

et L =

 
d
c

. Alors lquation de scrit

Avec XCAS,

VAV + t LV + k = 0

'(q(x,y),[x,y]) renvoie la matrice associe la forme quadratique q :

'(a*x^2+2*b*x*y+c*y^2,[x,y])
Rponse du logiciel

On sait quil existe une matrice de rotation P SO2 (R) telle que :

t

PAP =

=D






u ,
v
u
,
v la base orthonormale de R2 telle queP soit la matrice de pasage de
Soit


,
j . Soit V  tel que V = PV  , alors dans le repre O;
u ,
v , a pour quation :
t

(PV  )A(PV  ) + t L(PV  ) + k = 0

cest--dire :
t

(V  )D(V  ) + t L(PV  ) + k = 0

ou encore :
X 2 + Y2 + DX + EY + k = 0
et on retrouve le cas tudi la section a. page 205 modulo un changement de base par
rotation.
On remarque au passage que det(A) = , donc que :

208

#  6! 
2%!   %!

si det(A) = 0, est du type parabole ;

si det(A) > 0, est du type ellipse ;

si det(A) < 0, est du type hyperbole.

91
Quelle est la nature de la conique : x 2 + 6x y + y 2 + 4x = 0 ?
A:'(x^2+6*x*y+y^2,[x,y])

nous donne la matrice de la partie quadratique.

(A)
nous dit que la matrice est de rang 2, donc nest pas du type parabole.
Plus prcisment :

(A)
nous dit que det(A) = 8 et donc que est de type hyperbole.
On obtient une matrice de passage dans une base de vecteurs propres :
Q:    (A)

On normalise cette matrice en utilisant


extrait la colonne n de la matrice M avec

 " (vecteur) qui norme un vecteur et on


(M,n) :

u: " ((Q,0));


v: " ((Q,1));
P: (  (u),  (v))

On obtient la matrice diagonale :


D:    (A)

On introduit le vecteur coordonnes dans la nouvelle base et la partie linaire :


V:[[X],[Y]];
L:[[4],[0]]

et on obtient la nouvelle quation :

 (  (V)*D*V+  (L)*R*V


cest--dire :
Rponse du logiciel





[4 (X)2 + 2 X 2 2 (Y)2 + ( (2 Y)) 2]

Il ne reste plus qu rduire cette quation comme nous lavons vu la section a. page 205.

209

   



   "

On pourrait construire une procdure qui distingue les 9 cas de la section a. page 205 puis
rduire la forme quadratique comme la section b. page prcdente, mais XCAS a dj fait le
travail pour nous...

 ( 
 (x^2+6*x*y+y^2+4x))
donne successivement :

les coordonnes du centre :


Rponse du logiciel

#1

$
3
4, 4

la nouvelle base :
Rponse du logiciel


2
2

2
2

 
2
2

2
2

le fait que la conique soit dgnre ou non :


Rponse du logiciel

une quation dans le nouveau repre :


Rponse du logiciel

4 (x)2 2 (y)2 + 12 = 0

et mme une reprsentation paramtrique que nous ne commenterons pas ici.

Pour obtenir le trac, on tape :

 ( (x^2+6*x*y+y^2+4*x),gray)


210

# 6! 

%!   %!

ce qui donne

  Hyperbole trace avec conique

, =  &  


 


 ) " 

x2
a2

y2

+ b2 = 1

Nous supposerons dans la suite que a et b sont positifs ce qui nenlve aucune gnralit
ltude.

 Il est
ais de vrifier que lellipse (E) est globalement invariante par reflexion daxe

O; , O; j et par symtrie par rapport O. Nous pouvons donc nous restreindre tudier
lensemble (E ) des points de (E) dabscisse et dordonne positives.
(E ) est la courbe reprsentative de la fonction
f:

R+

 (a>0); / / p o u r e x p l i q u e r
f:x->b* (1-x^2/a^2)

R

2
b 1 ax 2
XCAS

que

est

positif .

Cette fonction est dfinie et continue sur [0 ; a] et drivable sur [0 ; a[.

 (
(f(x),x))
Rponse du logiciel




(a)2 ((x)2 ) )bx

(a)3 (a(x)2 )

bx
On obtient f  (x) = 
pour tout x [ ; a[.
a a2 x2

211

   

fp: 
 (f);
  (fp(x),x,a,-1) / / 1 i n d i q u e

la

direction

de

la

limite

On a lim
f  (x) = , donc (E ) admet une demi-tangente verticale au point dabscisse a.
xa
x<a

y:fp(xo)*(x-xo)+f(xo);

Ouh la la, lquation de la tangente a lair trs complique...Mais rusons un peu !

 (y*f(xo)/b^2)
Rponse du logiciel
(a^2-x*xo)/(a^2)

Ainsi, la tangente (E ) en un point dabscisse xo = a admet pour quation :


xxo y f (xo)
+
=1
a2
b2
Il est maintenant ais dobtenir une reprsentation de :
a:2:;
b:1:;
G: (f(x),x02):;
G1:  ( (0),G):;
G2:  (
 (x0),G):;
G3:  (
 (y0),G):;
 (G, + 
 B), (G1,  +
 (G2,+ 
 ), (G3,   )

ce qui donne :

  tude analytique de lellipse

212


 B),

# 6! 

%!   %!

On peut visionner linfluence des coefficient a et b en les faisant varier grce la commande
  (intervalle) :
a:   (0  10);
b:   (0  10);
f:x->b* (1-x^2/a^2):;
G: (f(x),x0a):;
G1:  ( (0),G):;
G2:  (
 (x0),G):;
G3:  (
 (y0),G):;
 (G, + 
 B), (G1,  + 
 B),
 (G2,+ 
 ), (G3,   )



;*  ) " 

On effectue la mme tude avec g :

x2
a2

y2

b2 = 1

R+

R

:
2
b ax 1 1

 (a>0):;
F:x->b* (x^2/a^2-1)
a:2:;
b:1:;
H: (F(x),x25):;
H1:  ( (0),H):;
H2:  (
 (x0),H):;
H3:  (
 (y0),H):;
 (H, + 
 B), (H1,  + 
 B),
 (H2,+ 
 ), (H3,   )
ce qui donne :

  tude analytique de lhyperbole

213

   


, )
  
% 
/  % 

Ouvrons une fentre de gomtrie
de coordonnes (x ; y).



MF = eMH

. On cre un point fixe F et un point quelconque

F: (0,0);
M: (x,y):;

On cre deux lments variables d, qui caractrise la directrice, et E, lexcentricit.


d: 
E: 

 ((-5) 
 (0  2)

5)

On cre le projet de M sur la directrice :


H:,  (
 (xd),M)

On trace le lieu du point M vrifiant MF = eMH avec    (f(x,y),x,y) qui trace
la courbe dquation implicite f (x, y) = 0 et  '(A,B) qui calcule le carr de la distance AB.

 (   ( '(M,F)-E*( '(M,H)),x,y), )


et la directrice :

 (
 (xd), )
On visualise alors parfaitement les 3 cas : e < 1, e = 1 et e > 1.

, - &      




 )




un vecteur unitaire
Soit le centre de lellipse. Dans le repre orthonorm ;
, j , avec
2

y2

de la droite vectorielle associe au grand axe, lellipse admet pour quation ax 2 + b 2 = 1.


Les rsultats suivants sobtiennent classiquement avec les notations usuelles dans le cas a >
b:

 
  @

c = a2 b2

c
a

F (c ; 0)

F(c ; 0)
D: x =

e=

a2
c

D : x = ac

On peut demander XCAS de faire le travail :


foyer_ellipse(a,b):{
 c,E;
(a<b){ ("inversez

214

a et b")}

##  !   



  7 !   %!

 {
c: (a^2-b^2);
E:c/a;
 (

"lexcentricit vaut "+E+"


Les foyers ont  coordonnes ("+c+",0) et (-"+c+",0)
et les directrices ont  quations x"+a^2/c+" et x-"+a^2/c)
}}:;

Alors :
foyer_ellipse(5,3)

donne :
Rponse du logiciel
lexcentricit vaut e =4/5
Les foyers ont pour coordonnes (4,0) et (-4,0)
et les directrices ont pour quations x=25/4 et x=-25/4



 )!* 

Il est ais dadapter au cas de lhyperbole.

,, " 
       ?   
Nous avons dtermin prcdemment page 212 lquation dune ellipse.
Voyons maintenant une construction de la tangente.

 !  +

  @

 !   %!  5 $     


 2 ( 

  7  !   '

 %! )

  
 7 )
" 5
 ! (  !     %! )
 FM FT = 0



)
    

Observons ce rsultat en ouvrant une fentre de gomtrie aprs avoir tap


On dfinit la conique et on la trace :



a:   (15)
b:   (1.5)
E: (x^2/a^2+y^2/b^21):;
 (E, )

215

   

On dfinit maintenant un point quelconque de E avec la fonction 
un rel t entre 0 et 2 :

 en faisant varier

t: 
M: 

 (0  2*)
 (E,t)
 (M, +point_width_5)
On dfinit un foyer et une directrice et le segment [M, F] :
F: ( (a^2-b^2),0)
D: (
 (xa^2/ (a^2-b^2)),  )
 (   (M,F), )

On dfinit la perpendiculaire (MF) en M avec

  
 (point,droite) :

d: (  
 (F,
 (M,F)), )

et lintersection de D et d avec

 
 (courbe1,courbe2) :

T: 
 (d,D)
 (T, +point_width_5)
 (
 (T,M),   + 
 )

On demande lquation de la droite (TM) avec

 (droite) :

 (
 (T,M))
Puis on se souvient du rsultat vu page 212 qui dit que la tangente en M(x0 ; y 0 ) lellipse a
yy
0
pour quation xx
+ b 20 = 1. On obtient donc que :
a2

xx0  b 2
y = 1 2
a
y0
Nous avons prcis que M nappartenait pas laxe focal et donc y 0 = 0.
Nous utilisons

 (point) et 
 (point) :

 ((1-(x* (M)/a^2))*b^2/
 (M))
On obtient le mme rsultat. XCAS nous le confirme avec
test boolen :

(test) qui rpond 0 ou 1 un

( (  (


 (T,M))) (
(1-(x* (M)/a^2))*b^2/
 (M)))
lcran, on fait varier t , a et b.

216

##  !   



  7 !   %!

  Construction de la tangente une ellipse



      

Effectuons la preuve dans le cas gnral grce aux capacits formelles de XCAS :
C: (x^2/a^2+y^2/b^21):;
M: (a*(t),b*(t)):; / / d f i n i t u n p o i n t d e C
F: ( (a^2-b^2),0):;
D:
 (xa^2/ (a^2-b^2)):;
d:
 (y(b/
 (M))*(1-x* (M)/a)):; / /

1
T: 
 (d,D):;

en

effet

xxo / a+

yyo / b

Tout est rentr. On teste le rsultat grce

 
 (vecteur1,vecteur2) :

 ( 
 (M-F,T-F))
qui rpond bien 0.
Nous venons donc de dmontrer le thorme puisque les calculs ont t effectus dans le cas
gnral.
Un dveloppement accessible aux lves de lyce du mme problme est prsent la section 1.3 page 179.

217

   


,. #  
  

 
% 

Voici une activit qui peut tre propose des lves de 2nde car elle ne demande que des
connaissances de base sur les paraboles.

  )   '  +   

Les lycens lignorent, mais nous savons quune parabole dquation x 2 = y = 2 12 x 2 admet
pour foyer F(0 ; 14 ) et une directrice dquation y = 14 .
1. Tracer la droite D dquation y = 1/4 en vert :
D: (
 (y-1/4),  )

2. Placer le point F de coordonnes (0 ; 1/4) :


F: ( (0,1/4), )

3. Crer un nombre s alatoirement choisi entre 2 et 2 :


s: 

 (-22)

4. Crer un point m quelconque appartenant la droite D :


m: ( 

 (D,s), )

5. Tracer p, la perpendiculaire D passant par m :


p: (  
 (m,D),, )

6. Tracer la mdiatrice med du segment [mF] en jaune :


med: (


  (m,F),, )

7. Soit M lintersection de p et de med. Dterminez les coordonnes de M :


M: ( 

 (p,med), )

8. Tracez le lieu de M quand s varie :

 ( (M,s),   + 


 B)
9. Le lieu ressemble une parabole... Vrifiez que M appartient la parabole dquation y =
x2 :

(
 (M)( (M))^2)
Ceci permet de tracer point par point une parabole dont on connat le foyer F et la directrice D :

218

#,   2 22%! !  





  Construction la rgle et au compas dune


parabole



 " 

 "

&
 "
C

Compltons la figure prcdente.


1. Tracer maintenant en magenta la perpendiculaire perp med en M :
perp: (  
 (M,
 (M,F)),

  )

2. Tracer en vert la parallle med passant par F :


para: (  (F,med),  )

3. Tracer le point mm, intersection de para avec p :


mm: ( 

 (p,para), )

, : que constatez-vous ?
4. Tracer en jaune pointill (jaune+dash_line) la bissectrice FMmm
bis: (   (M,F,mm),, +


 )

On constate que perp est confondue avec bis.


5. Repassez en bleu avec une paisseur de trait de 3 (bleu+line_width_3) la demi-droite
[M, mm) et le segment [MF] :

 (

 (M,mm), + 
 );
 (   (M,F), + 
 )
219

   


Connaissez-vous la loi de Descartes pour la reflexion ?


Rayon incident

Normale au point dincidence

Rayon rflchi

  Loi de Descartes


On a 1 = 2 et donc la normale au point dincidence reprsente la bissectrice de
langle gomtrique form par les rayons incident et rflchi.
Si on considre des rayons venant dun satellite , on peut supposer quils sont tous
parallles tant donn quil est trs loign de lantenne. Notre petite illustration
montre alors que tous les rayons incidents sont envoys vers le foyer.
Inversement, si lon met de la lumire depuis le foyer, comme cest la cas par
exemple dans le phare dune voiture, les rayons rflchis par les parois du phare
partiront tous dans la mme direction, ce qui permettra de diriger le faisceau lumineux et de ne pas blouir les voitures venant en face.

 
Pourquoi les antennes sont paraboliques ?

,5 " 


 @

Nous ne vous apprendrons pas lorigine du mot coniques. Nous allons nous contenter de
lillustrer.

220

#/  %!  8 

 ) ?     ) "  x = t

On construit un cne de centre lorigine, daxe (Oz) et de demi-angle au sommet

K: ( ([0,0,0],[0,0,1], /6,  0.02), )

On construit le plan dquation x = t avec t variant entre 10 et 10 :


t:   ((-10)  10)
Q: ((xt),+

)

On demande de tracer lintersection du cne et du plan :

 ( (Q,K), + 


 B)

  Intersection dun cne avec un plan dquation x =t

tudions lintersection de K et du plan x = t . On utilise  qui renvoie le rel flottant t


sous la forme dun rationnel car inter travaille en calcul formel.

 ([  (K),x  (t)],[x,y,z])


nous renvoie (dans le cas t = 1) :

221

   

Rponse du logiciel


%
(y)2 + 1

%
2
(y) + 1

%
Cest dire que z = y 2 + 1 ce qui est quivalent z 2 = y 2 + 1.
Nous reconnaissons bien sr une hyperbole. XCAS nous le confirme.
%
Sortons de la fentre de gomtrie 3D. Comme y 2 + 1 est le troisime lment du second
lment de solve([equation(K),x=1],[x,y,z]), on lobtient en tapant :

 ([  (K),x1],[x,y,z])[0][2]


Il ne nous reste plus qu utiliser  

 :

   (z^2( ([  (K),x1],[x,y,z])[0][2])^2,y,z)


Le logiciel renvoie le trac et le message :

Rponse du logiciel
Hyperbola of center (0,0)



 ) ?     ) "  x = t + k z

Nous allons rajouter un nouveau paramtre, k, qui va nous permettre de visualiser lvolution
des sections suivant la pente du plan de coupe :
K: ([0,0,0],[0,0,1], /6,
t:   ((-10)  10)
k:   ((-2)  2)
P:(xt+k*z,+ )
 ( (K,P), + 


  ,  0.01)

B)

En faisant varier k, on visualise le passage de lhyperbole lellipse puis la parabole :

222

#/  %!  8 

  Section dun cne par un plan dquation


x = t + k z : cas de la parabole

223

 
Sries de Fourier
Logiciel(s) abord(s) : XCAS

Notions informatiques : Les logiciels ont du mal intgrer les fonctions non continues. On sintresse ici aux fonctions continues par
morceaux.
Problmatique : On explore les dveloppement en srie de Fourier
tant par le calcul que graphiquement.

.

)+%   

Si lon considre des fonctions intgrables au sens de Lebesgue sur un intervalle [a ; a + T],
alors on peut toujours calculer ses coefficients de Fourier :

cn =

1
T

a+T

2int/T

f (t )e

dt

Sur XCAS une fonction est pr-programme :

  (f(x),variable,priode,n,borne

infrieure de lintgrale)

Par exemple, considrons la fonction f , 2-priodique, paire et telle que f (x) = x 2 pour tout
x [0 ; ]. Traons sa reprsentation graphique sur une priode :

 (x^2,x-PiPi)

  "  0
  &


  XCAS : Fonction x  x 2


Alors :

  (x^2,x,2*Pi,n,-Pi)
Rponse du logiciel

in2 2 ein + in2 2 ein(+2) + 2nein + 2nein(+2) + 2iein 2iein(+2)


2n3

Ce nest pas trs lisible.


Il suffit dexpliquer que n est un entier et les exp((-i)*n*(-pi)) vont sen trouver soulages...

 (n,  )
  (x^2,x,2*Pi,n,-Pi)
renvoie cette fois :
Rponse du logiciel

2 (1)n
(n )2

a a lair mieux...
Nous pouvons prfrer les coefficients rels :

  (x^2,x,2*Pi,n,-Pi);
  (x^2,x,2*Pi,n,-Pi)
226

,  "

Rponse du logiciel

4 (1)n
,0
(n )2

On vrifie bien que les b n sont nuls car la fonction est paire. Il semble y avoir un problme
pour a0 ... mais XCAS sen sort encore une fois !

  (x^2,x,2*Pi,0,-Pi)
qui renvoie bien 2/3, la valeur moyenne de f sur une priode.
Au fait, vrifions le lemme de Riemann-Lebesgue pour rigoler :

Lemme de Riemann-Lebesgue
Soit f L 1 [a ; a + T]. Alors
a+T
lim

n+ a

2int/T

f (t )e

dt = 0

cn:  (x^2,x,2*Pi,n,-Pi);
  ((cn),n+ )

Pour la dmonstration, cest un autre problme...


Vrifions maintenant graphiquement la convergence de la srie de Fourier :
f4:t->  (x^2,x,2*Pi,0,-Pi)+ ( 
n*t),n14)

cre la fonction t  a0 +

4
'

(x^2,x,2*Pi,n,-Pi)*(

an cos(nt ).

n=1

Est-ce que XCAS sait bien valuer f4(t) ?


f4(t)
Rponse du logiciel

(4 cos (t)) + cos (2 t) +

4 cos (3 t)

cos (4 t)

1
()2
3

Nous voici rassurs... Voyons le rsultat graphiquement. Pour cela, il nous suffit de rentrer :

227

  "  0
  &

 ([t^2,f4(t)],t-PiPi,[red, ])
Mais pour limpression de ce livre, nous avons augment lpaisseur des traits avec la fonction
  :

 ( (t^2,t-PiPi),line_width_2+red);


 ( (f4(t),t-PiPi),line_width_2+ );

  XCAS : Visualisation de la convergence de la


srie de Fourier

.  %    %'&

Adoptons prsent une vision physicienne du problmea .
Ainsi f est un signal de priode T et notons classiquement = 2/T . Supposons que f est
telle que la suite des sommes partielles
f n (t ) = a0 +

n
'

(ak cos(kt ) + b k sin(kt ))

k=0

converge vers f , ou ventuellement sa rgulariseb et dont lnergie est


E (f ) =

1
T

a+T

f 2 (t ) dt

On utilise alors la formule de Bessel-Parseval et on obtient classiquement


E ( f ) = a02 +

+
'

an2 + bn2

n=1

Une des questions physiques est alors de savoir partir de quelle valeur de n on obtient un
pourcentage donn de lnergie du signal en approximant f par f n .
Reprenons notre exemple :
a Les problmes de convergence et le travail dans un espace de Hilbert ne seront pas traits ici.
b Voir le thorme de Dirichlet.

228

,& 2 9   *


E:(1/(2*))*( (t^4,t-));
 (E)

nous dit que E ( f ) = 4/5


n 16
a 2 + bk2 4 '
=
+
Notons E n ( f ) = a02 + nk=1 k
2
9 k=1 k 4
Nous voudrions savoir partir de quelle valeur de n nous obtenons E n ( f ) = p% de E ( f ) :
efficace(p):{
ao: (  (x^2,x,2*Pi,0,-Pi));
En:ao^2;
k:0;
seuil: (p*E/100);
 (En<seuil){
k:k+1;
En:En+ (.5*16/k^4);
};
"Il suffit de prendre n"+ k+ "  obtenir "+p+"% du signal"
}

Par exemple :
efficace(99.9)
Rponse du logiciel
Il suffit de prendre n=5 pour obtenir 99.9% du signal

Vrifions :
Energie:n->^4/9+ (8/k^4,k1n);
100* (Energie(4))/ (E);
100* (Energie(5))/ (E)

ce qui confirme notre rsultat.

. ' >  

Occupons-nous prsent dun signal moins rgulier mais important en lectronique


$
# : la fonction
crneau,
impaire,
de
priode
1,
et
telle
que
f
(t
)
=
1
pour
tout
t

0
;
1/
2 et f (0) =
 
f 1/2 = 0.
On peut rentrer f de manire explicite :
f:t->piecewise(t-.5,0,(-.5<t)
(t<0),-1,t0,0,(0<t)
.5,0)


(t<.5),1,t

mais cette fonction nest pas encore bien intgre, mise part lvaluation et la drive. Nous
nutiliserons donc pas fourier_bn, mais nous fabriquerons nos propres procdures.

229

  "  0
  &

Reprsentons dabord graphiquement des fonctions dfinies par morceaux en rentrant comme
arguments la liste des intervalles, la liste des valeurs correspondantes, le nombre dintervalles
et la couleur.
plot_mor(LI,LV,m, ):{
 P;
P:[];
(k:0;k<m;k++){
P: (P, (LV[k],xLI[k], ));
" morceaux "

de

//

on

cre

courbes

}
}

Par exemple :
plot_mor([-1/20,01/2],[-1,1],2, )

donne :

  XCAS : Trac dune fonction dfinie par morceaux


Pour le calcul de a0 :
four_ao(LI,LV,m,T):{
integ,k;
integ:0;
(k:0;k<m;k++){
integ:integ+(1/T)*( (LV[k],xLI[k]));
}
   (integ)
}



Dans le cas qui nous occupe :


four_ao([-1/20,01/2],[-1,1],2,1)

On calcule de mme les an :

230

une

liste

de

,& 2 9   *


four_an(LI,LV,m,T,p):{
integ,k;
integ:0;
(k:1;k<m;k++){
integ:integ+(2/T)*( (LV[k]*(p*2*Pi*x/T),xLI[k]));
}
   (integ)
}



et les b n :
four_bn(LI,LV,m,T,p):{
integ,k;
integ:0;
(k:0;k<m;k++){
integ:integ+(2/T)*( (LV[k]*(p*2*Pi*x/T),xLI[k]));
}
   (integ)
}



a marche pour des valeurs numriques :


four_bn([-1/20,01/2],[-1,1],2,1,3)
Rponse du logiciel

4
3

mais si lon demande une formule gnrale :


four_bn([-1/20,01/2],[-1,1],2,1,N)

ce nest pas trs lisible...


Il faut dans ce cas modifier notre procdure :
four_bn_general(LI,LV,m,T):{
 integ,k,p;
 (p,  );
integ:0;
(k:0;k<m;k++){
integ:integ+(2/T)*( (LV[k]*(p*2*Pi*x/T),xLI[k]));
}

   (integ)
}

Alors :
four_bn_general([-1/20,01/2],[-1,1],2,1)

231

  "  0
  &

nous donne cette fois un rsultat satisfaisant :
Rponse du logiciel

(2 (1)p ) + 2
p

Ensuite on demande de crer la fonction t  a0 +

N
'

(an cos(2nt /T) + b n sin(2nt /T)) :

n=1

s_fourier(LI,LV,m,T,N):{
 k;
 (four_ao(LI,LV,m,T)+ (four_an(LI,LV,m,T,k)*(k*2*Pi*x/T)+
four_bn(LI,LV,m,T,k)*(k*2*Pi*x/T),k1N))
}

Par exemple :
s_fourier([-1/20,01/2],[-1,1],2,1,5)

Rponse du logiciel

192 (sin (2 x))5 320 (sin (2 x))3 + 180 sin (2 x)


15

On peut demander le trac de la somme partielle et de la fonction elle-mme :


plot_fourier(LI,LV,m,T,xmin,xmax,N):{
 A,B;
A: (s_fourier(LI,LV,m,T,N),xxminxmax, ):;
B:plot_mor(LI,LV,m,red):;
A,B
}

et on obtient pour N = 8 :

232

,& 2 9   *

  XCAS : phnomne de Gibbs avec N=8


qui met en vidence de petites crtes plus grandes prs des points de discontinuit.
Vrifions un peu plus loin :
plot_fourier([-.50,00.5],[-1,1],2,1,-.5,.5,16)

et on obtient :

  XCAS : phnomne de Gibbs avec N=16


Vous pourrez montrer les trois rsultats tonnants suivantsc :
la crte est de plus en plus troite ;
elle se rapproche du point de discontinuit ;
sa hauteur est constante.

c Pour la dmonstration voir A PPEL , Walter Mathmatiques pour la physique et les physiciens. Paris: H&K, 2005 p. 274

233

 
Musique
Logiciel(s) abord(s) : Scilab

Problmatique : Construire une gamme en utilisant le calcul matriciel. Produire des sons pour un squenceur.

5

" 
    

  $

Lensemble de toutes les notes possibles (partant des gammes classiques de temprament
gal) contient 12 degrs espacs dun demi-ton ; le nombre 0 reprsente do = C, le nombre 1
reprsente do = C, etc.
On cherche construire toutes les gamme possibles dans les contraintes suivantes : le nombre
de degrs est fix, seuls certains intervalles sont autoriss, chaque note apparat au plus une
fois, on retombe sur la note initiale la fin. Par convention, la note initiale est toujours 0.
Dans notre construction, la premire note est omise et est toujours 0 (do = C) ; on construit
une matrice dont chaque ligne reprsente une gamme. La matrice obtenue la fin reprsente
donc toutes les gammes possibles avec les contraintes donnes.

#     
  

Il est bon de faire laller-et-retour entre une gamme et la succession de ses intervalles. La
fonction intervalle donne les intervalles successifs associs aux gammes stockes dans une
matrice.

  yintervalle(x)


yx
 j2:" (x,2)
y(:,j) 
(y(:,j)-x(:,j-1),12)



 
La fonction gamme donne les gammes associes aux suites dintervalles.

  ygamme(x)


yx
s" (x,2)
 j2:s

  %  =

y(:,j) 
(



 

(x(:,[1:j]),c),12)

Des candidates pour les gammes sont construites par itration ; une bonne partie de llimination se fait pendant la gnration pour conomiser les ressources de lordinateur !

  ziteration(y,k,taille,w)


W" (w,1)
s" (y,1) ;
z" (s*W,k) ;
 is:-1:1 ,
 jW:-1:1,
yyy(i,k) ;
Z 
(yy+w(j),12) ;
lW*(i-1)+j
z(l,[1:k])y(i,[1:k]) ; z(l,k+1)Z

//
//

limination

de

//

chaque

qu u n e

//

et

//

il

note
ne

doit

mauvaises

pas

seule
y

avoir

lignes

on

ne

doit

rencontrer

fois
deux

intervalles

successifs

 k  1   Y0 ;  Yy(i,k-1) ; 
;
ZZZ-2*yy+Y ;
 or([ 
(ZZ,12)0,Z0, or(y(i,[1:k])Z)])  

identiques .

z(l,:)[] ;


;

;

 



  
  
   
 

Pour une matrice reprsentant les intervalles, il faut liminer les lignes qui sont redondantes
permutation circulaire prs : cela reviendrait transposer la gamme, ce qui napporterait rien
de nouveau. La fonction pcc opre un cycle lmentaire sur les lignes dune matrice.

  ypcc(x)


yx
s" (x,2)
 j1:s-1
kj+1
y(:,j)x(:,k)


y(:,s)x(:,1)

 
On marque les lignes redondantes et on les limine la fin.

236

/   !  )!  

  


  ynettoie(x)


[l,c]" (x)
marque[]
 i1:l-1
 ji+1:l
zx(i,:)
 k1:c-1
zpcc(z)
 zx(j,:)  


yx
y(marque,:)[]

 



marque[marque,j] ;

D    /  )

Il faut taper z=cherche(t,w), o t est la taille de la gamme, cest--dire le nombre de degrs,


et w est la liste des intervalles autoriss. La gamme obtenue sur la premire ligne ci-dessous
se lit comme indiqu dans la deuxime ligne.
Rponse du logiciel
!
do

3.
mib

7.
sol

10.
sib

2.
r

8.
sol#

4. !
mi

Linstruction intervalle(z) dcrit les intervalles entre chaque degr.


Prenons par exemple la rgle : on peut monter ou descendre dun triton, dune tierce mineure
ou majeure.
w[3;4;6;8;9]

Le vecteur w reprsente tous les intervalles possibles en suivant cette rgle.


Voici le programme principal :

  zcherche(taille,w)


taille (taille,11) / / p o u r s e p r o t g e r d e s p l a i s a n t i n s
zw ;  i1:taille-1 , ziteration(z,i,taille,w) ; 
;
/ / I l f a u t r e t o m b e r s u r d o0
s" (z,1) ;
 is:-1:1 ,
 or(wz(i, ))   ;  z(i,:)[] ; 
;

;
//

Pour

viter

deux

intervalles

identiques

s" (z,1) ;
 is:-1:1 ,
 
(z(i,1)+z(i,taille),12)0

 

aux

bouts

de

z(i,:)[] ;

la

gamme

237

  %  =



//

on

limine

//

affichage

les

permutations

circulaires

zgamme(nettoie(intervalle(z)))
du

s" (z,1)

//
//

si

[6;3]

rsultat

et

taille

2

ou

 .

//

 s>1   pluriels ;  pluriel ; 


;
chaineIl y a + (s)+ gamme+pluriel+ solution+pluriel
 (%io(2),chaine)

 

5 -   


Le logiciel Scilab permet de fabriquer des sons sous forme de fichiers dextension .wav .
Le son de lorgue lctronique modlis grossirement ici est produit par des oscillateurs
circuits bobine-condensateur. Dans le circuit magntique de chaque bobine tourne une roue
dune certaine forme, ce qui change lauto-inductance de la bobine et donc la frquence de
la note. Les lectroniciens appellent cela une modulation de frquence et les musiciens un
vibrato. (Quand la variation de frquence est plus ample, ils parlent respectivement de wobulation et de glissando.)
//

attention

//

pour

ne

doit

pas

tre

un

tableau

  uorgue(t,frequence,rotationRoues,profondeur,nuance)


omega(1+profondeur *(t*rotationRoues *2*%pi))*2*%pi*frequence
une

nergie

indpendante

de

amplitudenuance/(1+frequence/441)
uamplitude *(t*omega) ;

la

frquence


 

La fabrication de la matrice de rels qui reprsente lchantillonnage sonore 44100Hz utilise


la fonction prcdente. La fonction v ci-dessous sera construite partir de la fonction orgue
ci-dessus.

  Zconcret(v,duree,frequence,rotationRoues,profondeur,nuance)


intervallesoundsec(duree,44100) ;
Z[]
 kintervalle,
Z[Z v(k,duree,frequence,rotationRoues,profondeur,nuance)];



 
Lcriture des chantillons numriques dans un fichier sonore se fait automatiquement. Linstruction y=[u,v] ; wavwrite(y,44100,16,nom) donnerait des rsultats bizarres.

  ysortie(u,v,nom)


238

/ $

   
y[u;v] ;
ynom

  (nom,y,44100)


 
Il reste craser les extrmits pour diminuer les dgts du jeu en boucle.

  yenveloppe(t,duree,frequence,rotationRoues,profondeur,nuance)


 or([t0 tduree])   y 0 ; 
yyorgue(t-duree/2,frequence,rotationRoues,profondeur,nuance) ;
yyy* (100*t)* (100*(duree-t));



 
Puis utiliser les fonctions prcdentes en initialisant les variables.
rotationRoues7 / / l e s r o u e s t o u r n e n t  . h e r t z
profondeur.003
frequence441 / / l a d u d i a p a s o n
nuance.999 / / f f f f o n n e p e u t p a s a l l e r p l u s l o i n  .
zconcret(enveloppe,2,frequence,rotationRoues,profondeur,nuance);
nomorgueA3.wav
nomorgueBIS.wav
sortie(z,z,nom)

La fabrication automatique du sons peut produire des chantillons pour un squenceur informatique. La grandeur dune octave pour loreille humaine, cest--dire le coefficient multiplicateur que lon applique aux notes quand on les lve dune octave, est lgrement suprieure
deux, et varie en fonction des personnes et des circonstances. Dans le temprament gal,
les douze notes sont quirparties en moyenne gomtrique le long de loctave. Profitons-en
pour construire des fonctions logarithme et exponentielle musicales.

  ylm(x,octave)


y(x)*12/(octave)

 
  yem(x,octave)
y (x*(octave)/12)

 
Les fichiers-sons se rpartissent au long de la tessiture du squenceur, qui contient typiquement 128 notes (dix octaves et demie). On peut aller jusqu un chantillon par note ; on
se contente ici dun chantillon par octave : videmment leffet vibrato sera htrogne. . .
Pour crer un nouveau rpertoire o placer les encombrants fichiers-sons, il suffit dexcuter
dans Scilab une commande shell :

 (mkdir

Sons)

Lautomate est prt tre crit ; le lecteur pourra aisment modifier la liste et le nombre des
chantillons (le squenceur risque de rouspter sil en charge plus de 128), puisque tout passe
par la gestion des chanes de caractres. Il faut juste reprer la position dans la liste de la note
de rfrence pour le diapason (441Hz).

239

  %  =

  ysequence(duree,rotationRoues,profondeur,nuance,octave)
n-2:8;N (n)
gamme[A]
suite[]
 kN,
suite[suite gamme+k];


 ksuite,
nomorgue+ (k)+.wav ;
ivectorfind(suite,k,c)-5 / / 5 e s t l a p l a c e d u l a 3  .
frequence441*em(i*12,octave) / / 4 4 1 Hz p o u r l e l a d u d i a p a s o n
zconcret(enveloppe,duree,frequence,rotationRoues,profondeur,nuance)

sortie(z,z,Sons/+nom) ;

ysuite

 

Les donnes ncessaires sont rentres ; il faut plusieurs secondes sur une machine ordinaire
pour produire une note dune seconde. Augmenter le nombre dchantillons et la dure sera
gourmand en temps de calcul.
octave2.01
rotationRoues7 / /
profondeur.003
nuance.999 / / f f f f
duree1

les

le

roues

maximum

tournent

 .

hertz

 .

Il ne reste plus qu se jeter leau.


sequence(duree,rotationRoues,profondeur,nuance,octave)

240

 
Carrs magiques
Logiciel(s) abord(s) : Scilab

Problmatique : Rsoudre des problmes amusants en apprenant la


manipulation des matrices sans sen apercevoir.

Les carrs magiques portent aussi un nom japonais imprononable en franais (sudoku).
Les problmes sont des tableaux de 9 lignes et 9 colonnes ; certaines cases sont dja remplies.
Le joueur doit remplir les cases restantes en respectant des contraintes gomtriques : la suite
des nombres de 1 9 doit apparatre exactement dans chaque ligne, dans chaque colonne, et
dans chacun des neuf sous-carrs de trois cases par trois dcoups dans le tableau.
Prenons un problme donn en remplaant les cases vides par des zros.
m" (9,9);
m(1,[1 4 5 8])[5 4
m(2,[4 6 7 9])[5 2
m(3,[1 3 5 9])[7 4
m(4,[1 5 7 8])[1 9
m(5,[3 4 5 6 7])[9
m(6,[2 3 5 9])[4 7
m(7,[1 5 7 9])[9 2
m(8,[1 3 4 6])[2 1
m(9,[2 5 6 9])[8 7
m

8
4
1
2
1
3
3
6
3

6];
1];
2];
3];
4 8 6];
9];
6];
4];
5];

La dernire instruction affiche la matrice du problme. la matrice m est une matrice 9 par 9
dans la quelle on stocke les donnes et o lon stockera les rponses progressivement. Les
premiers outils pour manipuler les neuf nombres sont initialiss.
I (9,9) ;
uI; d2*I; t3*I; q4*I; c5*I; s6*I; e7*I; h8*I; n9*I;

Un transfert pour faciliter les itrations est ncessaire.

  [M,U,D,T,Q,C,S,E,H,N]egale(m,u,d,t,q,c,s,e,h,n)


Mm;Uu;Dd;Tt;Qq;Cc;Ss;Ee;Hh;Nn;

 
Un infme bricolage pour numroter les matrices extraites ne devrait faire peur personne.

  '    

  znumero(k)
kk 
(k,3) ; K(k-kk)/3

 

; zz

(kk,K)+2*K/3

; z

((zz),2)

Quand une case de la matrice M est remplie, on procde aux liminations dans la matrice Y,
qui sera lune de celles o sont stocks les nombres encore inutiliss.

  Zannulation(Y,M)


ZY
 k1:9
 l1:9
 M(k,l)~0  
 Z(k,l)M(k,l)  
Z(k,:)0;Z(:,l)0;Z(k,l)M(k,l);
Knumero(k);Lnumero(l);Z(3*K+[1:3],3* L+[1:3])0;Z(k,l)M(k,l);
 Z(k,l)0 ;



 
La premire action pour remplir la matrice est de vrifier les nombres qui ne sont utiliss
quune fois dans chaque ligne ou colonne.

  Mattribution(m,u,d,t,q,c,s,e,h,n)


//

s il

//

on

ny

remplit

qu u n e
la

rponse

case

par

ligne

ou

de M c o r r e s p o n d a n t e

par

Mm
liste[u,d,t,q,c,s,e,h,n]
compteur1

// boucle1

 yliste
Y  (y)
colonne

(Y,r) ; ligne (Y,c)

// boucle2

 j1:9

//

si

une

seule

rponse

// boucle3



colonne(j)compteur

// boucle4

 k1:9

// boucle5



M(k,j)0  
M(k,j)Y(k,j)

// f i n

de

242

sur

boucle5

la

 

colonne

colonne

/ $

   

// fin

de

boucle4

// fin

de

boucle3

// fin

de

boucle2

// boucle2bis

 j1:9

//

si

une

seule

rponse

sur

// boucle3bis



ligne(j)compteur

la

ligne

 

// boucle4bis

 k1:9

// boucle5bis



M(j,k)0  
M(j,k)Y(j,k)

// fin

de

boucle5bis

// fin

de

boucle4bis

// fin

de

boucle3bis

// fin

de

boucle2bis

de

boucle1

compteurcompteur+1

// fin


 

Si tous les nombres sauf un ont t limins pour un emplacement donn, lemplacement
peut tre attribu.

  MATTRIBUTION(m,u,d,t,q,c,s,e,h,n)


//

si

//

compte

un

//

on

seul
tenu

remplit

chiffre
de
la

est

toutes
case

apparat
les

possibilits

de M c o r r e s p o n d a n t e

Mm
liste[u,d,t,q,c,s,e,h,n]

// boucleA

 k1:9

// boucleB

 l1:9

verticale" (9,1)
compteur1

// boucleC

 yliste
Y  (y)

verticale(compteur)Y(k,l)

243

  '    

compteurcompteur+1

// f i n

de

boucleC

//

seul

test (verticale)
un

chiffre

est

possible

// boucleCbis



test  (verticale)
M(k,l)test

 

// f i n

de

// f in

boucleCbis

de

// f i n

boucleB

de

boucleA


 

Le travail fait par la fonction attribution suivant les lignes et colonnes est fait dans les tableaux extraits par la fonction attripb.

  Mattrib(m,u,d,t,q,c,s,e,h,n)


//

s il

//

on

ny

remplit

qu u n e
la

case

rponse

par

matrice

par

extraite

de M c o r r e s p o n d a n t e

Mm
liste[u,d,t,q,c,s,e,h,n]
compteur1

// boucle1

 yliste
Y  (y)

// boucle2

 K0:2

// boucle3

 L0:2
ZY(3*K+[1:3],3* L+[1:3])
test (Z)

//

si

une

seule

// boucle4



rponse

testcompteur

// boucle5



sur

 

kk1:3

// boucle6

 ll1;3
k3*K+kk ; l3*L+ll

// boucle7



M(k,l)0  
M(k,l)Y(k,l)

// f i n

244

de

boucle7

la

matrice

par

extraite

/ $

   

// fin

de

boucle6

// fin

de

boucle5

// fin

de

boucle4

// fin

de

boucle3

// fin

de

boucle2

de

boucle1

compteurcompteur+1

// fin


 

Maintenant vient le travail recherch : toutes les liminations et les attributions sont rassembles.

 
//

la

[M,U,D,T,Q,C,S,E,H,N]op(m,u,d,t,q,c,s,e,h,n)

fonction

principale

[M,U,D,T,Q,C,S,E,H,N]egale(m,u,d,t,q,c,s,e,h,n)
liste[U,D,T,Q,C,S,E,H,N]
 yliste
Y  (y)
Zannulation(Y,M)
 (y+Z)

MMattribution(M,U,D,T,Q,C,S,E,H,N)
 yliste
Y  (y)
Zannulation(Y,MM)
 (y+Z)


MMMATTRIBUTION(MM,U,D,T,Q,C,S,E,H,N)
 yliste
Y  (y)
Zannulation(Y,MMM)
 (y+Z)


Mattrib(MMM,U,D,T,Q,C,S,E,H,N)

 

Le nombre ditrations et le drapeau darrt sont initialiss.


stop0
longueur0

La boucle ditration utilise les fonctions prcdentes.

245

  '    



stop0

//

une

tape

de

//

mesure

de

//

est ce

fini

travail

[M,U,D,T,Q,C,S,E,H,N]op(m,u,d,t,q,c,s,e,h,n) ;
l effort

longueurlongueur+1 ;



[M,U,D,T,Q,C,S,E,H,N][m,u,d,t,q,c,s,e,h,n]
stop1 ;

 

[m,u,d,t,q,c,s,e,h,n]egale(M,U,D,T,Q,C,S,E,H,N) ;

Quand la machine sarrte, le point darrive est affich avec leffort fourni.

(m);

(longueur);
Si a bloque avant de trouver une solution, cest quon ne peut pas continuer par limination : il faut fixer une valeur arbitraire dans M (de prfrence o la collision est faible). Les
instructions suivantes donnent des indications.
collisionu+d/2+t/3+q/4+c/5+s/6+e/7+h/8+n/9-1 ;

(u);
(d);
(t);
(q);
(c);
(s);
(e);
(h);
(n)

La valeur candidate est rentre dans m avec une instruction du type


m([i,j])valeur

Ensuite il faut ritrer lensemble dinstructions :


[m,u,d,t,q,c,s,e,h,n]op(m,u,d,t,q,c,s,e,h,n) ;
collisionu+d/2+t/3+q/4+c/5+s/6+e/7+h/8+n/9-1 ; m

Si un nombre de collision devient strictement ngatif, il ny a pas de solution : la valeur arbitraire tait mauvaise, il faut tout recommencer avec une autre valeur arbitraire. Ou alors il
fallait archiver sous dautres noms les dix matrices m, u. . . n avant de rentrer le candidat. . .

246

 
Codes correcteurs derreurs

Logiciel(s) abord(s) : XCAS

Notions informatiques : Les codes correcteurs nous ferons travailler


dans des corps finis (F2 en loccurence) ce qui nous permettra dapprofondir le calcul modulaire. Le travail principal se fera cependant
sur la manipulation des matrices. Nous voquerons galement le travail dans les corps de Galois.
Nous ne ferons que survoler la partie mathmatique (pour un dveloppement trs pdagogique, voir a et pour une tude plus complte,
voir b ) pour nous concentrer sur lexploitation informatique.
Nous utiliserons XCAS.
Problmatique : Une information est code sous la forme de bits
(binary digits), donc dlments dun F2 -espace vectoriel. Elle est ensuite transmise puis dcode. Un message sera donc reprsent par
un vecteur de Fn2 . La transmission altre parfois linformation : ainsi
on rcupre un vecteur transmis qui nest pas forcment celui dorigine. Le but de lactivit est dutiliser un code qui permetttra de dtecter les erreurs et mme de les corriger : on crera dabord une procdure nave qui dpendra de la matrice de codage et du vecteurmessage tester et qui dira si ce vecteur a t mal tansmis et par quel
bon vecteur le remplacer.
Nous voquerons ensuite une procdure plus efficace mais qui ne
concernera que les codes de Hamming. Enfin, nous travaillerons
dans des corps de Galois pour crer des polynmes gnrateurs.

a B RUGRE , Thierry/M OLL ARD , Alain Mathmatiques lusage des informaticiens. Paris: Ellipses, 2003
b B ADRIKIAN , Josphe Mathmatiques pour tlinformatique : codes correcteurs. Paris: Ellipses, 2002

  )       ,  

8


/ '  A

 
 
 Fk2

Nous voudrions crire les 2k vecteurs de Fk2 sous forme de listes de longueur k. Plusieurs options soffrent nous. Une des plus simples sur F2 est de compter jusqu 2k 1 en base 2.
Par exemple, pour crire n en base 2, on pourrait utiliser la fonction   (n,base,b) qui
convertit un nombre n,
L:[];
L: (  (n, ,2),L);

mais a nous le donne en sens inverse... On peut aussi faire des divisions euclidiennes successives.
Le problme, cest que ces vecteurs ont un nombre de composantes variable. Une petite astuce fixe le nombre de composantes k :
Fdeux(n,k):{
 L;
L:[];
 (n>2){
L: ([
n:(n,2);

(n,2)],L);

}
L: ([n],L);
 (" (L)<k) L:[0 (k-" (L)),(L)];
 (L);
}




   ; 

Nous voudrions avoir une mthode nous permettant de dcider quel est le message correct
le plus proche du message erron reu. Une nouvelles ruse due aux particularits de F2 va
nous y aider.
Tout dabord, noubliez pas que dans F2 , x + y = x y ! Ainsi, le nombre de bits qui diffrent entre deux vecteurs de F2 est aussi gal la somme des coordonnes du vecteur somme
rsultant.
Si on appelle poids la fonction
:

Fn2

(m) =

-n

i=1 m i

alors vous vrifierez que lapplication


:

248

Fn2 Fn2


(m, m )

(m + m  ) = (m m  )

3  '2 
: 

est une distance, appele distance de Hamming, qui nous permettra de mesurer lcart entre
deux messages, cest--dire le nombre de bits les diffrenciant.
Il suffit dutiliser  pour effectuer la somme des composantes dun vecteur :





([1,2,3,4])

      
    

Rappelons que nous rentrons une matrice de codage M et un message v et que nous voulons
savoir si v correspond un message de M. Dans le cas contraire, nous voudrions le remplacer
par le message le plus proche.
Un message est en fait limage de Fk2 par uM , lendomorphisme canoniquement associ M.
Ima:());
(j:0;j<2^k;j++){
Ima:Ima,M*Fdeux(j,k)%2;
};
Ima:[Ima];

construit la liste des images des vecteurs de Fk2 par uM . Techniquement, on rajoute la squence Ima au dpart vide les vecteurs M*Fdeux(j,p). On noublie pas le %2 qui symbolise le
calcul modulaire dans F2 . Linstruction Ima:=[Ima]; sert alors transformer la squence en
liste de liste, cest--dire en matrice.
Cependant, les composantes des vecteurs sont mis la queue-leu-leu, sans quon puisse distinguer les vecteurs. Il faut donc avoir les ides claires sur les dimensions de nos espaces
p:(M);
n:(M);

Nous avons donc avec Ima une matrice o chaque ligne reprsente les 2k vecteurs de limage
de uM .
Dressons prsent la liste des 2n 2k vecteurs de Fn2 qui nappartiennent pas I m(uM ). Nous
utiliserons la fonction C8.3(member)vecteur,matrice qui renvoie 0 si le vecteur nappartient
pas la matrice ou bien le numro de la ligne qui lui correspond sinon.

XCAS commence compter 0 ! Par souci de compatibilit, le numro renvoy par

  est donc le numro de ligne + 1

(k:0;k<2^n;k++){
(  (Fdeux(k,n)%2,Ima)0)
L:L,Fdeux(k,n);
};
L:[L];

249

  )       ,  
Nous obtenons ainsi une matrice de 2n 2k vecteurs qui ne sont pas des messages : appelons
la famille forme par ces vecteurs (ui ).
La ruse est de se dire : je reois un message v. Cest un des 2n vecteurs de Fn2 : si cest un des
2k vecteurs de I m(uM ), tout va bien. Sinon, je peux lcrire sous la forme v = m + e avec m
un vecteur de limage (un vrai vecteur) et e lerreur commise. Plus e sera de poids petit, plus
m sera prs du message transmis et donc je pourrais penser que probablement le vritable
message transmis tait m.
Nous allons donc ordonner les ui par ordre de poids croissant. Ensuite nous formerons les
vecteurs ui + m j : si ce vecteur a dj t form auparavant, on llimine, sinon, on le garde.
On parcourt la liste des lignes, et on ajoute chaque ligne son poids :



(j:0;j<" (L);j++){
L[j]<[ (L[j]),(L[j])];
}

On a remplac - par A pour plus de rapidite (=< fait la modification en place dans L, alors
que := cre une copie de la liste a chaque fois).
Il ne nous reste plus qu trier ces vecteurs selon lordre croissant des poids. La fonction 
qui joue ce rle. Il faut juste lui expliquer comment classer : ici, cest lodre croissant selon la
premire ligne.

 (L,(x,y)->x[0]<y[0]);
On enlve alors la colonne des poids qui ne sert plus rien : la premire, donc la numro 0...
U:
(U,00)

On rajoute une ligne nulle quon remplacera par les vecteurs de I m(uM )
U:

 ([[0

n]],U)%2

On forme ensuite la premire ligne de notre matrice finale en ajoutant la premire ligne de U
celle de Ima
N:[(U[0]+Im[g]) (g02^k-1)]:;

Ensuite, on rajoute les ui qui nont pas dj t rajout avant. On utilise pour cela la commande    (a,b,liste de a*b matrices) qui forme une matrice de a blocs de
longeur b.
h:1;
 (h<(2^n-2^k)){
(  (U[h],N)0)
N:   (2,1,[N,[(U[h]+Im[g])
 h:h+1;

(g02^k-1) ]]):;

Il ne nous reste donc plus qu conclure par

(  (v%2,N[02^k]) 0) (v+"est


 {q:(((  (v,N))-1) 
2^k)%0;
250

bien un mot de code");

3  '2 
: 
On retrouve un vecteur ui toutes les 2k lignes. Le problme, cest que le rsultat donn par
mode est lentier le plus proche de 2k , donc peut tre ngatif. Le passage de lentier modulo
2k lentier tout cours via le %0 comporte donc des risques. On y remdie grce

(q>0)  (v+" doit tre corrig


 {q:q+2^k;  (v+" doit tre



en "+Ima[q]%0);
corrig en "+Ima[q]%0);} };

  & 

Il reste vrifier que le choix du message corrig est justifi. Il sagit en fait de regarder I m(uM )
et plus particulirement les distances sparant ses diffrents lments.
Sil existe au plus un lment m de I m(uM ), tel que pour tout message erron m  , on ait
(m m  )  t , on pourra corriger jusqu t erreurs.
Cela veut dire que la distance minimum entre deux lments de I m(uM ) doit tre au moins
gale 2t + 1.
Nous en dduisons que t est la partie entire de (PoiMin(M) 1)/2, avec PoiMin la procdure
qui donne le poids minimum dune liste de vecteurs :
PoiMin(M):{
 L,k;
k:(M);
L:[];
(j:1;j<2^k;j++){
L: (L, (M*Fdeux(j,k)));
}

 ( (L));
}

Un code t -correcteur est dit parfait si la runion des boules fermes de centre chaque lment
de I m(uM ) et de rayon t donne Fn2 .
Il sagit en fait pour nous de vrifier que la matrices formes des vecteurs ui a un poids minimum infrieur t .
Pour changer, au lieu de construire une squence puis une matrice en y rajoutant des crochets, on est parti dune liste tout de suite (avec W:=[]), on concatne une autre liste avec
 et on coupe cette liste en tronons de longueur n pour en faire une matrice grce
 '  (Liste,n) : cest plus lourd, mais a permet de voir un peu de syntaxe...
Nous pouvons donc rajouter notre procdure les lignes suivantes :
X:N%0;
W:[];
(r:0;r<(X);r:r+2^k){
W: (W,X[r]);
};
W: '  (W,n);
 ("Le code est "+((PoiMin(M)-1)/2)+"-correcteur");
(PoiMin(W)<((PoiMin(M)-1)/2)) ("Le code est parfait");
 { ("Le code nest  parfait")};

251

  )       ,  
La procdure sous sa forme finale est donc
decod1(M,v):{
 Ima,L,P,U,N,W,X,l,j,k,K,g,h,x,y,q,r,p,n,m,current,nbsolutions,pos;
k:(M);
n:(M);
((v) n) ("Le message nest  de la bonne taille.");
 {
Ima:());L:());P:[];U:[];
(j:0;j<2^k;j++){
Ima:Ima,M*Fdeux(j,k)%2;
};
Ima:[Ima];
(K:0;K<2^n;K++){
(  (Fdeux(K,n)%2,Ima)0)
L:L,Fdeux(K,n);
};
L:[L];



(j:0;j<" (L);j++){
L[j]<[ (L[j]),(L[j])];
}

 (L,(x,y)->x[0]<y[0]);
U:
(L,00);
U:  ([[0 n]],U)%2;
N:[(U[0]+Ima[g]) (g02^k-1)]:;
h:1;
 (h<(2^n-2^k)){
(  (U[h],N)0)
N:   (2,1,[N,[(U[h]+Ima[g])
 h:h+1;

(g02^k-1) ]]):;

}:;
X:N%0;
W:[];
(r:0;r<(X);r:r+2^k){
W: (W,X[r]);
};
W: '  (W,n);
 ("Le code est "+((PoiMin(M)-1)/2)+"-correcteur");
(PoiMin(W)<((PoiMin(M)-1)/2)) ("Le code est parfait");
 { ("Le code nest  parfait")};

(  (v%2,N[02^k]) 0) (v+"est


 {q:(((  (v,N))-1) 
2^k)%0;
252

bien un mot de code");

3    %!   8 2 2


!

(q>0)  (v+" doit tre corrig


 {q:q+2^k;  (v+" doit tre

en "+Ima[q]%0);
corrig en "+Ima[q]%0);} };

Maintenant, si lon demande


decod1(A,[1,1,1,0,0,0,0])

on obtient
Rponse du logiciel
"Le code est 1-correcteur"
"Le code est parfait"
"[1,1,1,0,0,0,0] doit tre corrig en [1,1,1,0,0,1,0]"
Evaluation time: 0.27

Le problme, cest que cette procdure induit un nombre assez important de calculs qui la
rendent inefficace pour des codes de longueur assez grande : par exemple, si on choisit n = 32
et p = 6, il faut 16 GB pour mmoriser les 232 vecteurs de 32 bits chacun...
Il va donc falloir appeler les mathmatiques au secours !

8 " 
&
 % &@   
Un code est dit cyclique si, et seulement si, pour tout mot de code m, tout mot obtenu par
permutation circulaire des coordonnes est encore un mot de code.
Il savrera trs pratique de ne plus reprsenter un mot par un vecteur de Fn2 mais plutt par
un polynme de F2 [X] : aprs tout, pour lordinateur, cest dans chaque cas une liste de n
oprandes.
Des considrations dalgbre gnrale c permettent de dire quune permutation circulaire du
message revient effectuer une multiplication par X modulo X n +1 du polynme message .
On montre alors que I m(uM )[X] est un idal de lanneau principal F2 [X]/(X n + 1) de la forme
g (X) F2 [X]/(X n + 1).
On montre que g (X) divise X n + 1. On appelle g (X) le polynme gnrateur du code. Notons
h(X) le quotient de la division euclidienne de X n + 1 par g (X).
On montre galement que tout mot m du code est une combinaison
linaire des X j g (X), et

-n
-n
j
j
n
(X + 1) qui est nul dans F2 [X]/
donc que m(X) h(X) = j =0 m j X g (X)h(x) =
j =0 m j X
n
(X + 1). On appelle alors h(X) le polynme de contrle du code : il porte bien son nom car
son produit avec un polynme-message ne sannule que si le message est un mot du code.
Nous allons tudier un code cyclique particulier : le code de Hamming qui est 1-correcteur et
parfait. Pour ces codes, n est de la forme 2r 1, les mots de code ont pour longueur n r .
Nous allons construire une procdure Hamming(n,g,m) o g est un polynme gnrateur du
code, m un message qui sera ventuellement corrig si ce nest pas un mot de code.
On construit le polynme h(X), quotient de Xn + 1 par g .
h(x):((x^n+1,g(x))%2);
c Voir B RUGRE , Thierry/M OLL ARD , Alain, ibid. page 321

253

  )       ,  
On transforme ensuite h(X) en la liste des coefficients grce la fonction 
ajoute autant de zros que ncessaires pour former une liste de longueur n :
L:

' et on

'(h(x)*x^(n-1-
 (h(x))));

On cre ensuite la matrice de contrle forme du vecteur L et de ses permutations ciculaires


successives. On utilise la fonction   (L,k) qui permet deffectuer une permutation des
k derniers lments avec le dbut de la liste si k est ngatif. On aurait pu tout aussi bien former
les produits de h(X) par les X j et utiliser  ', cest loccasion de voir une commande
utile...
H:());
(j:0;j<n-
 (h(x));j++){
H:H,  (L,-j)};
H:[H];

Il ne reste plus qu former le produit de la matrice de contrle avec le message et tester si


cest un mot de code :
mess:H*m%2;
 (mess[0
 (m+"est

(n-
 (h(x)))]%2) {
bien un mot de code");

sinon, le vecteur non nul obtenu est le k e vecteur colonne de la matrice de contrle ce qui
indique que lerreur est faite sur la k e composanted . Puisquon travaille dans Fn2 , il suffit de
rajouter au message reu le k e vecteur de la base canonique de Fn2 :

 {
B:[1,0 (n-1)];
r:  (mess,  (H));
corr:m%2+  (B,-r+1)%2;corr:corr%0;
 (m+" doit tre corrig en "+corr);
Le programme complet est donc :
Hamming(n,g,m):{
 h,g,x,L,H,j,mess,B,r,corr;
((m) n) ("Le message nest 
 {
h(x):((x^n+1,g(x))%2);
L: '(h(x)*x^(n-1-
 (h(x))));
H:());
(j:0;j<n-
 (h(x));j++){
H:H,  (L,-j)};
H:[H];
mess:H*m%2;
 (mess[0 (n-
 (h(x)))]%2) {
 (m+"est bien un mot de code");
d Le code de Hamming est 1-correcteur

254

de la bonne taille.");

3&   *
 - 2
   8 2 2
!

 {
B:[1,0 (n-1)];
r:  (mess,  (H));
corr:m%2+  (B,-r+1)%2;corr:corr%0;
 (m+" doit tre corrig en "+corr);
}
}
}

et :
Hamming(31,1+x^3+x^5,
[1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1]);

renvoie :
Rponse du logiciel
"[1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1] doit tre
corrig en [1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0]"

quasi instantanment, ce qui est donc bien plus efficace que notre premier algorithme.

8 " %
  
3 "    % &@ 
3


Pour plus de dtails sur les dveloppements mathmatiques, vous pourrez par exemple tudiere . Nous ne ferons ici quvoquer certains rsultats.
Notre objectif est de crer une procdure donnant un polynme gnrateur dun code cyclique en fixant sa longueur n et sa capacit de correction t .
Nous ntudierons que des codes dont la longueur sexprime sous la forme n = 2m 1.
Le rsultat fondamental est que le corps de Galois de caractristique 2 et de cardinal 2m (quon
notera GF(2,m)) est isomorphe F2/P(X) avec P(X) un polynme irrductible sur GF(2,m), de
degr m).
Une tude pousse sur les corps finis permet de conclure quun polynme gnrateur sera de
la forme PPCM(1 (X), 3 (X), , 2t 1 (X)) avec k (X) le polynme minimal de k , tant un
lment primitif de GF(2,m).
On va donc commencer par construire les classes cyclotomiques modulo 2m 1 des k .
cyclo(k,m):{
 l,L,n;
n:2^m-1;
L:k%n;
l:2*k%n;
 (l k%n){
e B ADRIKIAN , Josphe, ibid.

255

  )       ,  
L:L,l;l:2*l%n
};
L:[L]
}

Par exemple,
cyclo(3,5)

renvoie :
Rponse du logiciel
[3 % 31,6 % 31,12 % 31,-7 % 31,-14 % 31]

On construit ensuite le polynme minimal de k qui est le polynme normalis de racines les
lments de la classe cyclotomique de k :
poly_min(cycle,alpha):{
 r,k;
r:1;
(k:0;k<(cycle);k++){
r:r*(x-alpha^(cycle[k]%0))
};

  (r)
}

On ajoute simplifier pour plus de lisibilit. Cependant, pour pouvoir utiliser cette procdure, il faut connatre .
Pour cela, on va construire GF(2,m) grce 16(caractristique,longueur,options).
Par exemple, avec :
K:16(2,5,[x,K]);

on obtient :
Rponse du logiciel
GF(2,x^5+x^3+1,[x,K],undef)

qui indique que le polynme irrductible et primitif utilis est X 5 + X 3 + 1.


On va utiliser comme lment primitif gnrateur de GF(2,5) x, qui est dsign par K(x) :
poly_min(cyclo(3,5),K(x))

renvoie :
Rponse du logiciel
x^5+x^3+x^2+x+K(1)

Donc, on peut maintenant crer une procdure gen(t,m) :

256

3&   *
 - 2
   8 2 2
!
gen(t,m):{
 g,alpha,j,p;
K:16(2,m,[x,K]);alpha:K(x);
p:
 (poly_min(cyclo(2*j-1,m),alpha),j1t);
 (p%2);
}

et :
gen(3,5)

renvoie :
Rponse du logiciel
x^15+x^14+x^13+x^12+x^10+x^8+x^7+x^6+x^5+x^4+K(1) % 2

On peut alors crer une matrice de contrle assez rapidement. Le problme sera de corriger
lerreur...
Pour des codes 1-correcteurs, notre procdure Hamming suffit. On construit un polynme gnrateur dun code de Hamming grce gen(1,longueur). Pour obtenir des capacits de
correction plus grande, mieux vaut se tourner vers les codes de Reed-Solomon que nous ne
dvelopperons pas ici. Une procdure concernant ces codes existe dans les exemples fournis
par votre distribution XCAS dans Exemples->Poly->reed_sol.xws.

257

 

Surfaces de projection
impose
Logiciel(s) abord(s) : XCAS

Notions informatiques : Nous traiterons un problme qui semblerait


plutt adapt un langage fonctionnel comme Caml mais qui peut
cependant tre galement trait par XCAS.
Nous verrons aussi comment tracer des surfaces dfinies implicitement.
Problmatique : On va chercher donner une quation dun polygone rgulier de R2 dfini normalement laide dun systme dingalits. Pour cela on dfinira une varit de R3 dont la projection sur
R2 est le polygone. Ce problme est inspir dun sujet de lpreuve de
modlisation de lagrgation externe, session 2006.

9

    

Commenons par descendre dune dimension pour poser le problme. La demi-droite de R


dfinie par lingalit x  0 peut tre galement caractrise comme tant la projection sur R
de la parabole de R2 dquation x = t 2 .
Le problme que nous traiterons ici concernera les polygones rguliers de R2 que nous pouvons facilement dfinir ainsi, avec les b i des polynmes :


S = (x, y, z) R3 , b1 (x, y, z)  0, . . . , b n (x, y, z)  0
Il sagit donc densembles semi-algbriques comparer aux ensembles algbriques qui sont
des ensembles des zros dun systme dquations polynomiales.
Il est souvent peu pratique de travailler avec des ensembles semi-algbriques, au moins informatiquement parlant, puisquil faut tenir compte de n conditions.
Nous admettrons alors le rsultat suivant :

 
  2@

; " !  8  !    %!


(x, y, z) S :t R, P(x, y, z, t ) = 0

  2  0 :    8


 

Notre problme sera donc de trouver de tels polynmes, de tracer la surface dquation implicite P(x, y, z, t ) = 0 et de la projeter correctement pour voir le polygone.

9 " 
    % &@  % 


 (  !  "

Soit n un entier naturel non nula et k 0 ; n. On fabrique une suite de polynmes de la
manire suivante :

(A

 2@

  P1 (x1 , u) = u x1 1 X = (x1 , . . . , xn ) 




2 
Pk+1(x1 , . . . , xk+1 , u) = Pk a1 (X), . . . , ak (X), u (x1 + + xk+1 )

 ak (X) = xk+1 (x1 + + xk )

Pour se familiariser
avec ces polynmes,
on peut construire les premiers la main.


2 
P2 (x, y, u) = P1 a1 (x, y), u (x + y) . Or a1 (x, y) = y(x), donc


2  
2
P2 (x, y, u) = P1 x y, u (x + y) = u (x + y) x y




    "

La dfinition des polynmes ak ne pose pas trop de problme :


a(k,x):x[k+1]* (x[j],j,1,k)

Le problme vient surtout de cette dfinition de polynmes qui dpendent dun nombre variable dindtermines et dont la dfinition est triplement rcurrente puisquelle dpend du
polynme dordre infrieur, mais aussi dautres polynmes, les ak et de la somme des indtermines qui dpend aussi de k.
Un mathmaticien un peu informaticien voit ici des fonctions de fonctions et pencherait
vers un langage fonctionnel tel que Caml. Cest une manire naturelle de voir les choses, mais
peu efficace avec un langage impratif comme celui utilis par XCAS.
Il faut donc apprendre rflchir autrement et voir un programme impratif comme un casier
tiroirs dont on peut volont modifier le contenu en gardant une mme structure. Et pour
changer le contenu des tiroirs, on utilise  (Expression,ancien,nouveau)b .
Par exemple, crons une expression :
L:a+b-c*d

et remplaons b par 2 :
a Dans le cas qui nous intresse, n = 3.
b

  a dautres proprits comme par exemple les changements de variables dans les intgrales.

260

4  !  !  8



2
L: (L,b,2)

qui pourrait se lire : dans L, on remplace b par 2 . On peut galement faire des substitutions
plus consquentes :
L: (L,[a,c,d],[1,3,4])

Cest exactement ce que nous allons faire pour nos polynmes. Le secret est de ne pas travailler sur des fonctions mais sur des expressions pour palier au problme du nombre variable... de variables.
Voici le cur du programme :
nouveauzarguments:[ (a(j,x),j1k),(u- (x[j],j,1,k+1))^2]
indeterminees:[ (x[j],j1k),u];
polytemp: (polytemp,indeterminees,nouveauzarguments);

Au dpart, polytemp vaut Pk (x1 , . . . , xk , u).



2
On remplace alors x1 , . . . , xk , u (not indeterminees) par a1 (X), . . . , ak (X), u(x1 + +xk+1 )
(not nouveauzarguments) dans polytemp, et on recommence...
Voici le programme complet :
ListePoly(n):{
k,polytemp,nouveauzarguments,indeterminees,liste;
polytemp:u-x[1];
liste:polytemp;
 (k:1;k<n;k++){
nouveauzarguments:[ (a(j,x),j1k),(u- (x[j],j,1,k+1))^2]
indeterminees:[ (x[j],j1k),u];
polytemp: (polytemp,indeterminees,nouveauzarguments);
liste:liste,polytemp;
}
  liste;
}:;



Le problme, cest que nous navons pas un polynme, mais une liste de polynmes. Ainsi :
ListePoly(2)

renvoie :
Rponse du logiciel

u (x[1]), (u (x[1]) (x[2]))2 (x[2] x[1])

Nous allons utiliser (Expression,Variable(s)) qui transforme une expression en


fonction de la ou des variable(s).
P2:( (ListePoly(2)[1],[x[1],x[2]],[x1,x2]),x1,x2,u)

261

  2  0 :    8


 

Rponse du logiciel

(x1,x2,u)->(u-x1-x2)^2-x2*x1

et donc :
P2(x,y,t^2)

renvoie :
Rponse du logiciel

(t )2 x y

2



yx

9 0B  
 3  % &   +

Notre problme est de dfinir avec un minimum dingalits un polygone convexe rgulier,
ou plus prcisment lintrieur du polygone.
Une chose est dabord sre : les sommets du polygone sont inscriptibles dans un cerclec , donc
le polygone est compris dans un disque. Ici, cela nous donne dj une ingalit :
1 x2 y 2  0
En fait, nous allons tenter de nutiliser quune deuxime ingalit.

 *

      ?

Observons un cas particulier.


On peut considrer les cts deux deux. Par exemple appelons f 1 et f 2 les fonctions affines
dont les reprsentations graphiques sont respectivement d1 et d1 . On obtient facilement quil
existe deux rels a et b tels que f 1 (x) = ax + b et f 1 (x) = ax b.
Avec un peu dastuce, on obtient que le polygone peut tre caractris par le systme :

(ax + b)2 y 2  0

(ax b)2 y 2  0

2
c y2  0
c Nous considrerons ici quil sagit du cercle de centre O et de rayon 1.

262

4& (2<  -


2%! )!    " 2!
b

2i 2/n

d2
c

d3
e

2i 1/n

d1

2i 3/n

e
d 3

2i 4/n

c
d 2

2i 0/n

d 1
e

2i 5/n

  Hexagone

Et avec normment dastuce, tout ceci peut se rduire au systme :

(ax + b)2 y 2 (ax b)2 y 2 c 2 y 2   0

1 x 2 y 2  0



 *

      ?

Observons un autre cas particulier. Avec toujours autant dastuce, on peut caractriser le polygone par le systme :

(a x + b )2 y 2 (a x + b )2 y 2 x b   0


1
1
2
2
3

2
2
1x y  0

263

  2  0 :    8


 


b1

d2 b2

2i 2/n

2i 1/n

d1

d3

b3
e

2i 3/n

d 2

b 2

2i 0/n

d 1

2i 4/n

e
b 1

  Pentagone



    "

Nous utiliserons la commande


 (point1,point2)d qui dtermine la droite passant
par les points 1 et 2.
Nous utiliserons galement  (courbe,[x,y]) qui donne une quation de la courbe
courbe.
Enfin, la commande  (egalite)[0] renvoie la partie droite dune galit.
La lecture du programme suivant devient alors limpide :
b( g ) : {
 B ;
B :  ;

( k : 1 ; k< g / 2 ; k++) {
B[ k1] :
(
 (   ( 
  (  ( * ( k1) * 2 *  /g ) ,  ( * k * 2 *  /g ) ) , [ x , y ] ) [ 0 ] ) ) ^2y^2
}
( g  2 0) {

 ( 
 (B[ j ] , j 0g/21) ,1x^2y ^2) }
 {


 ( 
 (B[ j ] , j 0 
( g / 2) 1) * ( x ( 2 *  * 
( g / 2) /g ) ) ,1x^2y^2)
}
}:;

Par exemple :
b(4)

donne :
d Il y a bien dautres syntaxes possibles.

264

4  !   ) 


2%! 7 
  
2<  -
2%!
Rponse du logiciel






 

((x + 1)2 (y)2 ) ((x + 1)2 (y)2 ), 1 (x)2 (y)2

9 " 
    
   ? %  
 B  
 3
Vous pourrez prouver pendant vos temps libres quil existe un polynme P tel que


v S = X R2 , b(X)  0, c(X)  0 :z R, P(b(v), c(v), z 2 ) = 0
et que P2 dcrit plus haut convient.
Pour visualiser, nous utiliserons la commande

   (P(x,y),x,y).


   ( (p2(b(4),z^2)),x-11,y-11,z05,
 0.1, 0.1," 0.1)

 
Varit dont la projection est un carr
Pour obtenir la vue de dessus, on clique sur Menu3-dvue de dessus z=cst :

265

  2  0 :    8


 


  Carr : projection sur (xOy)



;3 
   ( (p2(b(6),z^2)),x-11,y-11,z05,
 0.1, 0.1," 0.1)

  Varit dont la projection est un hexagone

266

4#   


Pour obtenir la vue de dessus, on clique sur Menu3-dvue de dessus z=cst :

  Hexagone : projection sur (xOy)

9,    

Le texte complet du sujet dagrgation se trouve ladresse


http://agreg.dnsalias.org/Textes/590.pdf

Vous comprendrez alors pourquoi nous avons construit une procdure pour trouver P2 alors
quil aurait t plus simple de le dterminer la main : nous navons en effet explor que
le cas particulier des polygones convexes rguliers.

267


Taches des animaux
Logiciel(s) abord(s) : Scilab

Notions informatiques : Modlisation rudimentaire dquations aux


drives partielles par des diffrences finies

Problmatique : Le logiciel Scilab est adapt au calcul approch de


systmes dynamiques faisant intervenir des drives partielles.

    

Le problme tudi ici est d une conjecture dveloppe par Alan Turing concernant la
formation des taches sur le pelage des animaux. Le vritable processus biologique nest pas
connu : voir le livre de Murraya .
Le modle mathmatique est celui de deux hypothtiques substances chimiques A et B qui
interagissent et se diffusent dans la peau de lembryon dun animal. un certain stade de
dveloppement de lembryon, le processus est fig et la concentration de lun des deux produits en un endroit donn dtermine la couleur de la peau ou des poils quand elle dpasse un
certain seuil.
Les concentrations notes A et B des deux produits dpendent du temps et de lespace (bidimensionnel). Lvolution est conditionne par le systme

F(A, B)

DA A

B
t

G(A, B)

DB B

Les fonctions F et G dcrivent la cintique chimique. Les laplaciens reprsentent le phnomne de diffusion.
a M URRAY , J. D. Mathematical biology . Berlin: Springer, 1993.

      
1

Le laplacien est la divergence du gradient : cest un oprateur diffrentiel du second


ordre. La divergence dun champ de vecteurs est la trace de lapplication linaire
tangente ce champ.

Il est important que les deux coefficients de diffusion DA et DB soient diffrents et non nuls.
Le calcul approch sera fait sous Scilab en reprsentant lespace par un maillage rectangulaire. Les concentrations A et B sont reprsentes par des matrices. Le laplacien est ralis
sous forme discrte par un calcul matriciel.
Trois formes de domaines sont prsentes :

un rectangle ;

un cylindre, cest--dire un rectangle dont deux cts opposs sont recolls ;

un tore, cest--dire un rectangle ; dont les cts opposs sont recolls deux--deux : un
cylindre ferm.

 #C' 
 

Les donnes sont stockes dans des fichiers. Il faut dabord rcuprer les matrices qui correspondent aux dix tapes.
A0 
(./A0,maille,maille)/1e2
A1 
(./A1,maille,maille)/1e2
A2 
(./A2,maille,maille)/1e2
A3 
(./A3,maille,maille)/1e2
A4 
(./A4,maille,maille)/1e2
A5 
(./A5,maille,maille)/1e2
A6 
(./A6,maille,maille)/1e2
A7 
(./A7,maille,maille)/1e2
A8 
(./A8,maille,maille)/1e2
A9 
(./A9,maille,maille)/1e2

;
;
;
;
;
;
;
;
;
;

B0 
(./B0,maille,maille)/1e2
B1 
(./B1,maille,maille)/1e2
B2 
(./B2,maille,maille)/1e2
B3 
(./B3,maille,maille)/1e2
B4 
(./B4,maille,maille)/1e2
B5 
(./B5,maille,maille)/1e2
B6 
(./B6,maille,maille)/1e2
B7 
(./B7,maille,maille)/1e2
B8 
(./B8,maille,maille)/1e2
B9 
(./B9,maille,maille)/1e2

;
;
;
;
;
;
;
;
;
;

270

 = 
   2

Les matrices Ai reprsentent les concentrations en produit A la date i . On dfinit les coordonnes des noeuds de la grille.
xx1:S
yyxx

La palette des couleurs est rduite pour des vidoprojections en toutes conditions, et pour
mettre en valeur leffet de seuil.

 ("colormap", (32))
r[0;1];
g[0;1];
b[1;0];
h[r g b];
On affiche la premire donne, concentration en produit A au dbut.

 ("colormap",h)
 
%(xx,yy,A0)
On affiche la deuxime donne aprs une demi-seconde.

 (sleep 0.5)


 
%(xx,yy,A1)


Attention ! Certains interprteurs de commandes (Shell) des systmes Linux sont
malheureusement franciss pour les donnes numriques, ce qui oblige soit
changer les dures 0.5 en 0,5, soit changer une variable denvironnement linguistique. . .

On aurait pu construire une boucle itrative pour toutes ces oprations rptitives, mais pour
un film de dix images cela nen vaut pas la peine.

 (sleep 0.5)


 
%(xx,yy,A2)
 (sleep 0.5)
 
%(xx,yy,A3)
 (sleep 0.5)
 
%(xx,yy,A4)
 (sleep 0.5)
 
%(xx,yy,A5)
271

      
1
 (sleep 0.5)
 
%(xx,yy,A6)
 (sleep 0.5)
 
%(xx,yy,A7)
 (sleep 0.5)
 
%(xx,yy,A8)
 (sleep 0.5)
 
%(xx,yy,A9)
On ouvre une nouvelle fentre pour y placer la reprsentation colore de la concentration en
produit B. La matrice h des couleurs est dja fixe.

 ()
//

couleurs

 ("colormap", (32))
Il ne reste plus qu y placer le film pour B.

 ("colormap",h)
 
%(xx,yy,B0)
 (sleep 0.5)
 
%(xx,yy,B1)
 (sleep 0.5)
 
%(xx,yy,B2)
 (sleep 0.5)
 
%(xx,yy,B3)
 (sleep 0.5)
 
%(xx,yy,B4)
 (sleep 0.5)
 
%(xx,yy,B5)
 (sleep 0.5)
 
%(xx,yy,B6)
 (sleep 0.5)
 
%(xx,yy,B7)
 (sleep
272

0.5)

&  !  ! !  




 
%(xx,yy,B8)
 (sleep 0.5)
 
%(xx,yy,B9)

 " 
  
   
Le laplacien discret appliqu une matrice carre A est construit de manire traditionnelle.

  Dlap(A)


s" (A)
tts(1)
ttt-1
TTs(2)
TTT-1
j  (t,t)
z" (t,1)
kk[z,0;j,z]
m2*  (tt,tt)-kk-kk
J  (T,T)
Z" (T,1)
KK[Z,0;J,Z]
M2*  (TT,TT)-KK-KK
Dm*A+A*M

 
Il faut dfinir les donnes qui interviennent dans lquation dvolution.
DA1
DB2
k1.1
k2.02
k3.03
k4.04

La fonction qui contient le systme dynamique sappelle champ. Lquation dvolution est
considre comme une quation diffrentielle ordinaire en le temps t .
La partie spatiale de lvolution est contenue dans la fonction champ et la dimension des matrices.

  ypoint (t,y)


T" (y,1)
S" (y,2)
id  (S,S) ; un (S,S) ; Z" (S,S)
D[ DA*id , Z ; Z , DB*id ]
F[ -k2*id , Z ; Z , -k4*id ]
ypoint( [ k1*un ; k3*un ]+F*y ) + D*lap(y)

 
273

      
1
Les conditions initiales sont dabord initialises par une rpartition spatiale alatoire.
t0:.01:.13 ;
t00 ;
maille10
y00.00001*
(2*maille,maille) ;

La premire photographie de la situation est calcule. Les dimensions S et T sont dfinies par
commodit.
y
(y0,t0,t,
T" (y,2)
S" (y,1)/2

)

Les donnes initiales sont enregistres dans des fichiers.


A0y0(1:S,:)
B0y0(S+1:2*S,:)
 (./A0,A0)
 (./B0,B0)

Les donnes de la premire tape sont enregistres leur tour.


Y1y(:,T-S+1:T)
A1Y1(1:S,:)
B1Y1(S+1:2*S,:)
 (./A1,A1)
 (./B1,B1)

Les autres tapes sont enregistres. La facilit dutilisation de lditeur de texte Emacs nous a
dissuad de construire une boucle. . .
y2
(Y1,t0,t,
Y2y2(:,T-S+1:T)
A2Y2(1:S,:)
B2Y2(S+1:2*S,:)
 (./A2,A2)
 (./B2,B2)

)

y3
(Y2,t0,t,
Y3y3(:,T-S+1:T)
A3Y3(1:S,:)
B3Y3(S+1:2*S,:)
 (./A3,A3)
 (./B3,B3)

)

y4
(Y3,t0,t,
Y4y4(:,T-S+1:T)
A4Y4(1:S,:)
B4Y4(S+1:2*S,:)
 (./A4,A4)

)

274

&  !  ! !  




 (./B4,B4)
y5
(Y4,t0,t,
Y5y5(:,T-S+1:T)
A5Y5(1:S,:)
B5Y5(S+1:2*S,:)
 (./A5,A5)
 (./B5,B5)

)

y6
(Y5,t0,t,
Y6y6(:,T-S+1:T)
A6Y6(1:S,:)
B6Y6(S+1:2*S,:)
 (./A6,A6)
 (./B6,B6)

)

y7
(Y6,t0,t,
Y7y7(:,T-S+1:T)
A7Y7(1:S,:)
B7Y7(S+1:2*S,:)
 (./A7,A7)
 (./B7,B7)

)

y8
(Y7,t0,t,
Y8y8(:,T-S+1:T)
A8Y8(1:S,:)
B8Y8(S+1:2*S,:)
 (./A8,A8)
 (./B8,B8)

)

y9
(Y8,t0,t,
Y9y9(:,T-S+1:T)
A9Y9(1:S,:)
B9Y9(S+1:2*S,:)
 (./A9,A9)
 (./B9,B9)

)

Les fichiers sont prts pour laffichage (voir section 11.2). Si des fichiers Ai,Bi sont dja enregistrs, il est bon de les effacer par la commande :

 (rm

A[0-9] B[0-9])

Le programme de construction peut alors tre excut.

275

      
1

  La concentration en produit B la fin de


lanimation sur le rectangle

 " 
  
  
Le recollement des artes du rectangle affecte seulement la dfinition du laplacien.

  Dlap(A)


s" (A)
tts(1)
ttt-1
TTs(2)
TTT-1
j  (t,t)
z" (t,1)
k[z,1;j,z]
l2*  (tt,tt)-k-k
J  (T,T)
Z" (T,1)
K[Z,1;J,Z]
L2*  (TT,TT)-K-K
Dl*A+A*L

 
Le reste du programme est le mme. Laffichage de la concentration finale B donne des valeurs
moins leves.

276

#  !  ! !  

  La concentration en produit B la fin de


lanimation sur le tore

, " 
  
  &
La dfinition du laplacien sur un cylindre est intermdiaire entre le cas du rectangle et celui
du tore.

  Dlap(A)


s" (A)
tts(1)
ttt-1
TTs(2)
TTT-1
j  (t,t)
z" (t,1)
k[z,1;j,z]
l2*  (tt,tt)-k-k
J  (T,T)
Z" (T,1)
KK[Z,0;J,Z]
M2*  (TT,TT)-KK-KK
Dl*A+A*M

 
Les donnes sont modifies pour rapprocher les deux coefficients de diffusion.
DA1
DB1.00001
k1.0002

277

      
1
k2.0002
k30.0002
k4.0002

Les intervalles de temps sont agrandis, le maillage est plus fin.


t0:.01:.27 ;
t00 ;
maille20 ;

Le reste du programme est similaire aux autres cas. Laffichage de la concentration finale B
montre une figure nettement diffrente.

  La concentration en produit B la fin de


lanimation sur le cylindre

278

Quatrime partie

ANNEXES


Tableaux comparatifs

D 
  
Logiciel

Licence

Site internet

Bc

GPL

http://www.gnu.org/software/bc/manual/bc.html

Maxima

GPL

http://maxima.sourceforge.net

MuPAD

commerciale

http://www.mupad.de

Octave

GPL

http://www.octave.org

PARI/Gp

GPL

http://pari.math.u-bordeaux.fr/

Scilab

Scilab

http://www.scilab.fr

Yacas

GPL

http://yacas.sourceforge.net

XCAS

GPL

http://www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html

GnuPlot

GPL

http://www.gnuplot.info/

   Sites de tlchargement

 

  

Logiciel

Fichier de configuration

Maxima

/.wxMaxima

PARI/Gp

/.gprc

Yacas

/yacas/yacasinit.ys

XCAS

/.xcasrc

 
O se trouve le fichier de configuration ?

1 1  


:
Logiciel

Ensemble

Liste

Matrice

Maxima

[1, 2]

[1, 2]

matrix([1,2], [3,4])

MuPAD

{1, 2}

[1, 2]

matrix([[1, 2], [3, 4]])

Octave

[1 2]

[1 2;3 4]

PARI/Gp

[1,2]

[1,2 ; 3,4]

Scilab

[1 2]

A=[1 2;3 4]

Yacas

{1,2}

{1,2},{3,4}}

[1,2]

[[1,2],[3,4]]

XCAS

set[1,2]
%{1,2%}

matrix(2,2,(j,k)->j+k)

  Entrer une liste ou une matrice

Logiciel

quation

lment dune liste

lment dune matrice

Longueur dune liste

Maxima

x=0

l[2]

m[2, 3]

length(l)

MuPAD

x=0

l[2]

m[2, 3]

nops(l)

Octave

x=0

l(2)

l(2,1)

PARI/Gp

x=0

l[2]

l[1,2]

Scilab

x=0

l(2)

l(2,1)

Yacas

x==0

XCAS

x=0

length(l)

l[2][1]
l[2]

l[2][1]

size(l)

  Manipulation des listes et matrices

Logiciel

True

False

And

Or

Not

Equal

Bc

&&

||

==

Maxima

true

false

and

or

not

MuPAD

true

false

and

or

not

<>

PARI/Gp

&&

||

==

Scilab

%t

%f

&

or

not

= ==

Yacas

True

False

MathAnd

MathOr

MathNot

Equals

XCAS

and &&

or ||

==

   Oprateurs boolens

282

Not equal

<>

!=

 " 

!" 

5

Logiciel

Assignement

Dfinition de fonctions

Bc

y=3

define f(x,y) {return(x*y);}

Maxima

y:3;

f(x, y):= x*y;

MuPAD

y:= 3;

f:= proc(x, y)

Octave

y=3;

function f(x,y)

begin x*y end_ proc;

x*y
endfunction
PARI/Gp

y=3

f(x,y)=x*y

Scilab

y=3;

function f(x,y)
x*y
endfunction

Yacas

y:=3;

Function(f,x,y)[x*y;];

XCAS

y:=3

f(x,y):={x*y }

   Comment rentrer une fonction ?

Logiciel

If+then+else

Bc

if(test) ...;...;

Maxima

if test then ... else if test then ... else ...

MuPAD

if test then ... elif test then ... else ... end_if

Octave

if (test) ... else ... endif

PARI/Gp

if(test,...,...)

Scilab

if test then, ..., else, ..., end

Yacas

if(test)..else...

XCAS

if(test)...; else ...;


si(test)...; sinon ...;
si test alors ...; sinon ...; fsi

   Test if...then...else

283

1 1  


:
Logiciel

Boucle for

Bc

for(i=1;i<=n;n=n+1){x;y;}

Maxima

for i:1 thru n do (x, y);

MuPAD

for i from 1 to n do x; y end_for;

Octave

for j=1:n x;y; endfor

PARI/Gp

for(j=1,n,action)

Scilab

for k=1..n, x,end

Yacas

ForEach(j,1..n)[x;y;]

XCAS

for (k:=1;k<=n;k++)x;y;
pour(k:=1;k<=n;k++)x;y;
pour n de 1 jusque n pas 1 faire x; y; fpour

   Boucle for

Logiciel

Afficher texte et rsultat

Maxima

print("sin(",0, ") =", sin(0))$

MuPAD

print(Unquoted, "sin(".0.")" = sin(0)):

PARI/Gp

print("sin(",0,")=",sin(0))

Yacas

Echo("sin(",0,")=",MathSin(0));

XCAS

print("sin("+0+")="+sin(0))

   Comment afficher un rsultat avec du texte ?

/ '  
 %'

21/3

Logiciel

Maxima

%e

%pi

%i

inf

sqrt(2)

2(1/3)

MuPAD

PI

infinity

sqrt(2)

2(1/3)

Octave

pi

sqrt(2)

2(1/3)

PARI/Gp

exp(1)

Pi

sqrt(2)

2(1/3)

Scilab

%e

%pi

%i

sqrt(2)

2(1/3)

Yacas

Exp(1)

Pi, Pi()

Infinity

Sqrt(2), MathSqrt(2)

2(1/3)

XCAS

Pi,pi,PI

infinity

sqrt(2)

2(1/3)

284

 " 

!" 

5

   Les principales constantes mathmatiques

Logiciel

ln

Arctan

n!

Bc

l(x)

a(x)

Maxima

log(x)

atan(x)

n!

MuPAD

ln(x)

atan(x)

n!

Octave

log(x)

atan(x)

prod(1:n)

PARI/Gp

log(x)

atan(x)

n!

Scilab

log(x)

atan(x)

factorial(n)

Yacas

Ln(x)

ArcTan(x)

n!

   Les fonctions existantes

Logiciel

n mod m

Maxima

mod(n, m)

MuPAD

n mod m

Octave

mod(n,m)

PARI/Gp

n%m, Mod(n,m)

Scilab

modulo(n,m), pmodulo(n,m)

Yacas

Mod(n,m)

XCAS

n mod m, m%n

  
Calcul modulaire

Logiciel

Partie relle

Forme algbrique dun complexe

Maxima

realpart(f(z))

rectform(f(z))

MuPAD

Re(f(z))

rectform(f(z))

Octave

real(z)

PARI/Gp
Scilab

real(z)

Yacas

Re(z)

XCAS

Re(z)

evalc(z)

   Calcul avec les complexes

285

1 1  


:
Logiciel

Somme :

n
'

f (i )

i=1

Maxima

sum(f(i),i,1,n) ,simpsum

MuPAD

sum(f(i), i = 1..n)

Octave
PARI/Gp

sum(k=1,n,f(k))

Scilab
Yacas

Sum(i,1,n,f(i))

XCAS

sum(f(k),k,1,n), sum(f(k),k=1..n)

   Calcul de sommes

Logiciel

Limites : lim f (x)

Dveloppements limits et asymptotiques

Maxima

limit(f(x), x, 0, minus)

taylor(f(x), x, 0, 3)

MuPAD

limit(f(x), x = 0, Left)

series(f(x), x = 0, 4)

x0

Octave
PARI/Gp

f(x)

Scilab
Yacas

Limit(x,0,Left) f(x)

Taylor(x,0,4) f(x)

XCAS

limit(f(x),x=0,-1)

series(f(x), x = 0, 4)

   Calcul de limites

Logiciel

Calcul diffrentiel :

d 3 f (x, y)
d x3

1
Intgration :

f (x) d x
0

Maxima

diff(f(x, y), x, 3)

integrate(f(x), x, 0, 1)

MuPAD

diff(f(x, y), x$3)

int(f(x), x = 0..1)
quad("f",0,pi/2)

Octave
PARI/Gp

deriv(f(x),x)
intg(0,1,f)

Scilab
Yacas

D(x,3) f(x,y)

Integrate(x,0,1) f(x)

XCAS

diff(f(x, y), x$3)

int(f(x), x = 0..1)

   Calcul diffrentiel et intgral

286

 " 

!" 

5

Logiciel

Graphe 2D

Maxima

plot(x, x, 0, 1)$

MuPAD

plotfunc(x, acsch(x), x = 0..1):

plot(acsch(x), x, 0, 1)$

Octave
PARI/Gp
Scilab

fplot2d(x,f)

Yacas

Plot2D(x,ArcCos(x),0:1)

XCAS

plot([x,acosh(x)],x=1..2,color=[green,red],legende=["x","Argch"])

   Graphe 2D

Logiciel

Graphe 3D

Maxima

plot3d(abs(x*y), x, 0, 1, y, 0, 1)$

MuPAD

plotfunc(abs(x*y), x = 0..1, y = 0..1):

Octave
PARI/Gp
Scilab

fplot3d(x,y,f)

Yacas

Plot3DS(Abs(x*y), 0:1,0:1)

XCAS

plot3d(abs(x*y), x = 0..1, y = 0..1)

   Graphe 3D

287


Bibliographie

A BDELJAOUAD , Mahdi: lments de Gomtrie du Plan . Tunis: Association Tunisienne des


Sciences Mathmatiques, 2000
A MYOTTE , Luc: Introduction au calcul avanc et ses applications en sciences . Qubec: ERPI,
2004
A PPEL , Walter: Mathmatiques pour la physique et les physiciens. Paris: H&K, 2005
B ADRIKIAN , Josphe: Mathmatiques pour tlinformatique : codes correcteurs. Paris: Ellipses,
2002
B EL ABAS , Karim: Site officiel de PARI/GP . URL: http://pari.math.u-bordeaux.fr/
B ELLOC , J.C./T HUILLIER , P.: Mathmatiques analyse 3 . Paris: Dunod, 2004
B RUGRE , Thierry/M OLL ARD , Alain: Mathmatiques lusage des informaticiens. Paris: Ellipses, 2003
C ONNAN , Guillaume/R OUQUS , Jean-Philippe: Le simulateur de khlles de maths . Paris:
Ellipses, 2002
D AL ANG , Robert C./C HAABOUNI , Amel: Algbre linaire . Lausanne: Presses polytechniques
et universitaires romandes, 2001, 127137
INRIA : Site officiel de Scilab . URL: http://www.scilab.fr
I VALDI , Philippe: ressources Asymptote . URL: http://piprim.tuxfamily.org/
asymptote/travaux/index.html
L E F UR , Denis: ressources Gnuplot . URL: http://mathsp.tuxfamily.org/spip.php?
rubrique39
M ARLE , Charles-Michel/P ILIBOSSIAN , Philippe: Mthodes numriques itratives . Paris: Ellipses, 2006, 168185
M ONGE , M./AUDOIN - GOROFF , M.C./L MAIRE -B ODY, F.: Mathmatiques Terminales C et E .
Paris: Belin, 1974
M URRAY , J. D.: Mathematical biology . Berlin: Springer, 1993, 372380
PARISSE , Bernard: Site officiel de XCAS . URL: http://www-fourier.ujf-grenoble.fr/
~parisse/irem.html
R OUQUS , Jean-Philippe/D OMINGUEZ , Sophie: Leons particulires - Cours de Maths . Paris:
Ellipses, 2002, 316328
S ORTAIS , Yvonne/S ORTAIS , Ren: La gomtrie du triangle . Paris: Hermann, 1987, 1621

1 B

 

T ENENBAUM , Grald/M ENDS F RANCE , Michel: Les nombres premiers . Paris: PUF, 1997
T HBAULT , Victor: Sur le tranchet dArchimde . Bulletin de la S.M.F. Tome 72 1944, 6875
W ESTER , Michael: Computer Algebra Systems: A Practical Guide . Chichester: John Wiley &
Sons, 1999

290

Index gnral

ABBA, 83
Abscisse, 180
Affixes, 181, 197
Aire, 69, 70
Algbre de Boole, 185
Alignement de points, 189
Amplitude, 105
Analyse en composantes principales, 106
Animation, 103
Approximation, 165
Approximation affine, ix, 163
Approximation numrique, 55
Arrter une boucle, 103
ASCII, 35, 87
assume ou element ?, 72
Asymptote(programme), 26
awk(programme), 14
Axiome, 185
Baccalaurat, 120
Base, 85
Base 2, 248
Base canonique, 158
Base, changement de, vi, 48
Bc(programme), 3, 7, 8, 13, 23, 24, 45, 46, 48,
67, 281285
Bessel-Parseval, 228
Bote moustache, 100, 102
BSD, 7
C++(programme), 26, 31, 32
C-shell(programme), 14

Calcul formel, 183


Calcul matriciel, 75, 270
Calcul modulaire, 247
Caml(programme), 260

Centiles, 106
Cercle, 197
Cercle mdiateur, 195
Cercles tangents, 194
Chanes de Markov, vii
Changement de variable, viii, 144
Chanes de Markov, 83
Chiffrement de Hill, 86
Chiffres significatifs, 56
Classes cyclotomiques, 255
Code de Hamming, 247
Codes correcteurs, 247
Collge, 69
Commande externe, 16
Concatnation, 38
Condition dalignement, 190
Cne, 221
Congruences, vi, 49
Conique, 180
Coniques, 205
Contrapose, 186
Convergence dune suite, 174
Coordonnes barycentriques, x
Coordonnes barycentriques, 189
Copier-coller, 14
Corps fini, 247, 255
Courbe de niveau, 133
Courbe paramtre, 197
Courbe reprsentative, 71, 164
Courbure, 118
Courbure de Gauss, 126
courbures(variable), 126
Cube, 94
CygWin(programme), 7
Cylindre, 270, 277

1  
Date, 30
D, 99
Dcodage, 40
Dcomposition en lments simples, 140
Dmonstration, 180
Drive, 113
Drives partielles, 133, 135
Drives partielles, 125, 269
Dessins, 26
Dterminant, 77, 87, 190
Dveloppement limit, 116, 153
Diagramme de bifurcation, 203
Diffrentielle, 116
Dimension, 249, 273
Dimension dune matrice, 75
Directrice, x, 180, 214
Divergence, 270
Division euclidienne, 88
Droite, 180, 264
cart-type, 105
chantillon, 105
diter une commande, 13
diteur de programme, 31
diteur de texte, 3, 16
Effet papillon, 203
galit-dfinition, 67
Ellipse, 211
Emacs(programme), 14, 16, 2729, 274
Enlever une colonne, 250
Ensemble, 58
Ensembles de nombres, 58
Entres-sorties standards, 30
Environnement, 17, 19
preuve experimentale, 173
quation aux drives partielles, 269
quation de courbe, 264
quation de droite, 92, 216
quation de plan, 91
quation diffrentielle ordinaire, 169, 273
quation implicite, 214, 260
quations diffrentielles ordinaires, 157
quations dpendant de paramtres, 58
Estimation derreur, ix, 165
tude mtrique, viii
tude mtrique, 125

292

Euler-Mac Laurin, 150


Exponentielle matricielle, 160
Expression, 115, 261
Extremum, 133
Extremum relatif, 136
Fabrication de sons, xi, 238
Faux, 185
Fentre 3D, 93
Fichier eps, 21
Fichiers spciaux, 30
Figure, 20
Fink(programme), 7
Flottants, 58
Fonction, 115
Fonction dfinie par morceaux, 230
Fonction drive, 115, 180
Fonction et expression, 69
Fonction exponentielle, 163
Format de lentre, 14, 15
Format double, 57
Format enjoliv, 14, 15
Forme algbrique, 197
Forme exacte, 55
Forme quadratique, 126, 208, 210
Foyer, x, 180, 214
Fraction rationnelle, 62, 140
Frquence, 105, 111
Galois, 247, 255
Gauss-Jordan, vii, 80
Gaussienne, 108
Gnrateur alatoire, viii
Gnrateur alatoire, 105
Gomtrie dynamique, 173
giac(programme), 16, 26, 28
GnuPlot(programme), 3, 7, 8, 13, 20, 21, 23,
24, 26, 27, 30, 45, 47, 96, 281
Gp(programme), 3, 7, 8, 13, 15, 45, 49, 53, 61,
64, 67, 113, 116, 153, 154
GPL, 3
Gradient, 116, 133
Groupe de Lie, 157
Groupe spcial orthogonal, 157
Hauteur de casse, 14

1  
Heure, 30
Histogramme, 102, 106108
Hyperbole, 215, 222
Image dune matrice, 78
Implication, 187
Incrmenter, 32
Index des commandes, 9
Intgration par parties, viii
Interprteur de commande, 29
Intersection, 70, 121, 177, 216, 218, 219, 221
Intgrale, 139
Intgrales de Wallis, 147
Intgration par parties, 144
Inversion, 196
Involution, 186
Isocle, 95
Kile(programme), 16

Laplacien, 269, 276, 277


LATEX(programme), 1518, 2023, 26
Lebesgue, 225
Lemme de Riemann-Lebesgue, 227
licence, 3
Ligne brise, ix
Ligne brise, 163
Ligne de commande, 14
Lignes de niveaux, 96
Limite dune suite, 174
Linux, 7
Logiciels abords, v
Logiciels abords, 2
Logiciels libres, 2
Logique, 185
Loi de Morgan, 185
Loi de rpartition, 108
Lyce, 69
MacOSX, 7
Manuel daide, 10
MAPLE(programme), 31
Matrice, 235, 241, 249, 254
Matrice antisymtrique, 157
Matrice compagne, 61
Matrice dendomorphisme, 78
Matrice de passage, 209

Matrice extraite, 241


Matrice hessienne, 116, 136
Matrice inverse, vii, 77, 79
Matrice transpose, 87
Maxima(programme), 3, 7, 8, 13, 14, 26, 28,
45, 49, 61, 62, 67, 75, 113, 114,
139141, 143, 153, 154, 157, 166,
169, 170, 281287
Mdiane, 103, 105
Mdiatrice, 218
Mesure de Lebesgue, 107
MetaPOST(programme), 22, 26
Mthode dEuler, ix
Mthode dEuler, 162, 163
Mthode de Newton, 56
Mthode de Steffenson, 57
Mthode des rectangles, ix
Mthode des rectangles, 148
Mode graphique, 3
Mode texte, 3
Mot-cl, 8
Moyenne, 100, 102
Moyenne arithmtique, 105
Moyenne gomtrique, 105
Moyenne harmonique, 105
Multiplicateur de Lagrange, viii, 132
MuPAD(programme), 3, 7, 26, 28, 31, 55, 58,
59, 139, 143, 146, 157, 167, 281287
Nappe paramtre, 119
Ngation, 186
Nombre driv, 115
Nombres p-adiques, 53, 64
Nombres premiers, 50
Nombres pseudo-premiers, 51
Non-contradiction, 185, 186
Normale, 108
Norme euclidienne, 75
Norme linaire, 75
Norme spectrale, 75
Notation scientifique, 13
Noyau dune matrice, 78
Nuage de points, 105
Octave(programme), 3, 7, 8, 13, 45, 49, 67,

74, 75, 77, 157, 161, 281287

293

1  
Oprande, 58
Oprations lmentaires sur les lignes dune
matrice, 81
Orbite, 158
Ordonne, 180
Ordonne lorigine, 91, 105
Palette des couleurs, 271
Papier-crayon, 140
Parabole, 206, 218
Parallle, 70, 219
Paramtre, 70
PARI/Gp(programme), 26, 51, 52, 281287
Partie exponentielle, 13
Pente, 91, 105
Perl(programme), 14
Perpendiculaire, 70, 216, 218, 219
Phnomne de Gibbs, 233
Plan, 221
Point, 69
Point fixe attractif, 202
Point fixe rpulsif, 202
Points critiques, 136
Polices, 26
Polygone, xi, 259, 260, 262
Polynme de Taylor, ix
Polynme, 61, 253, 260
Polynme caractristique, 78, 85
Polynme de Taylor, 155
Polynme driv, 61
Polynme irrductible, 255
Polynme minimal, 255
Polynme quotient, 253
PPCM, 255
Primitive, 139
Procdure, ix
Procdure, 164
Procdure rcursive, 33, 39
Produit scalaire, 75, 116, 181, 217
Produit tensoriel, 75
Projecteur, vii, 78
Projection, 214
Propritaire, 3
Prcision, 45
Prcision dun calcul, 56
Prdicat, 185

294

Pseudosphre, 127
PStricks(programme), 26
Puissance dun point par rapport un cercle,
193
Puissance de matrice, vii, 79
Quantiles, 106
Quartiles, 106
Racine dun polynme, 141
Racines, 61
Rajouter une ligne, 250
Rang dune matrice, 75, 209
Rectangle, 70
Rcurrence, 178
Rcursion, 51
Rduction dendomorphisme, vii
Rduction dendomorphisme, 76
rel, 55
Rpartition, 105, 107, 108
Reprsentation paramtrique, 197, 210
Rsolution de systmes non-linaires, 189
Rotationnel, 116
RSA, 40
Scilab(programme), 3, 7, 8, 1315, 30, 31,

41, 45, 49, 61, 62, 67, 7275, 77, 91,


98, 99, 105, 106, 109, 113, 114, 116,
125, 139, 142, 150, 157, 235, 238,
239, 241, 269, 270, 281287
Sections planes de surfaces, 220
sed(programme), 14
Sries de Fourier, xi
Sries entires, 153
Session 2D, 92
Shell(programme), 8, 16, 26, 28, 30, 271
Simulation dexprience alatoire, viii
Simulation dexprience alatoire, 99
Solutions dune quation, 55
Somme, 249
Souris, 70
Sous-espace affine, 105
Sous-espace propre, 85
Sous-espace vectoriel engendr, 86
ssh(programme), 3
Style de figure, 22

1  
Subdivision, ix, 162, 163
Suites rcurrentes, 201
Surface, 96
Syldavie, 203
Symtrie orthogonale, 92
Syntaxe, 2, 37
Syracuse, suite de, 37
Systme dquations linaires, vii
Systme dquations linaires, 76
Systme linaire, 59
Tableaux, 241
Tangente, 180, 212, 215
Tant que, 164
Tautologie, 185
Terminale, 163
Test boolen, 216
Test darrt, 33, 39
TeXmacs(programme), 26, 27
TeXmaker(programme), 16
Thorme de Mnlas, x
Thorme de Mnlas, 190
Thorme de Pappus, 195
Thorme des nombres premiers, 50
Tiers exclu, 185, 186
Tikz(programme), 26
Tore, xii, 270, 276
Torsion, 118
Tortue XCAS, 37
Trace, 270
Tractrice, 127
Transforme de Laplace, 169
Triangle rectangle, 69

Trier, 250
Tubage de processus, 29
Turing, Alan, 269
Valeur moyenne, 227
Valeur propre, 85
Variables complexes, 55
Variance, 105
Varit, 259
Vecteur, 181
Vecteur colonne, 75
Vecteur ligne, 75
Vecteur unitaire, 86
Vecteurs propres, 76
Vrai, 185
Windows Microsoft(programme), 16
XCAS(programme), xiii, 3, 79, 13, 1518, 20,

26, 28, 31, 3436, 39, 45, 49, 5153,


5557, 61, 63, 64, 6769, 75, 81, 83,
88, 91, 95, 99, 113115, 136, 139,
143, 145, 146, 148150, 153, 157,
165, 166, 169, 170, 173, 176,
179182, 184, 189, 191, 192, 194,
196, 197, 199, 205, 210, 216, 217,
222, 225, 227, 247, 249, 257, 259,
260, 281287
Yacas(programme), 3, 7, 8, 13, 15, 26, 28, 45,

49, 61, 65, 67, 73, 113, 116, 139, 153,


185, 187, 281287
Zrjdz, 200

295

Index des commandes

Bc

quit, 21, 22
replot, 24
set, 21, 22, 24, 9698
sin, 21, 22
size, 24, 97
splot, 21, 22, 98
sqrt, 21, 22
surface, 96
term, 24
terminal, 21, 22
textcolor, 24
title, 24
using, 24
view, 97
with, 98
xlabel, 24, 97
xrange, 24, 97
xtics, 97
ylabel, 24, 97
yrange, 24, 97
ytics, 97
zlabel, 97
ztics, 97

a, 45
auto, 24
define, 24, 72
for, 24
ibase, 48, 48, 49
l, 45, 72
obase, 48, 49
print, 24
quit, 24, 49
return, 72
scale, 24, 45, 45
temp, 24

GnuPlot
border, 24
clabel, 96
cntrparam, 96
color, 21, 22, 24
contour, 96
eps, 21, 24
exit, 24
exp, 24
graph, 24
hidden3d, 21, 22
isosamples, 21, 21, 22, 97
label, 24, 98
left, 24, 98
linetype, 24
nopoint, 24
norotate, 24
output, 21, 22
plot, 24
postscript, 21, 24
print, 47, 48

Gp
\p, 46
atan, 46
cos, 153
deriv, 64, 116
exp, 116, 153
log, 67
Mod, 49
Pi, 46, 153
polroots, 64
sqrt, 53

1  


LATEX

\VerbatimEnvironment, 17
\includegraphics, 21
fancyvrb, 16
VerbatimOut, 16

Maxima
:=, 67
^^, 78
ASINH, 140
bfloat, 46, 46, 68
charpoly, 78, 78
cos, 154
cosh, 169
determinant, 77
diff, 62, 114, 114, 166, 169
DISPLAY2D:FALSE, 14
DISPLAY2D:FALSE;, 14
DISPLAY2D:TRUE, 14
eigenvalues, 78, 78
exp, 114, 154, 169
FALSE, 49
float, 68, 154
fpprec, 46, 46
ilt, 169, 170
integrate, 139141, 170
invert, 77
laplace, 169, 170
laplace(f(x),x,p), 169
log, 67, 140, 142
matrix, 77, 77
mod, 49
MODULUS, 49
ode2, 166
partfrac, 140, 141
plot2d, 154
positive, 141
ratsubst, 154
realpart, 141
rhs, 140
romberg, 141
sin, 139, 142, 170
solve, 62, 78, 140
sqrt, 140
tan, 140
taylor, 154

298

MuPAD
begin, 3740
DOM_SET, 58
else, 39
end, 38
for, 38, 40
from, 38, 40
if, 39
in, 59
intersect, 39, 59
intlib::byparts, 147
minus, 39
proc, 3740
step, 38, 40
substring, 40
then, 39
to, 38, 40
union, 39
while, 39

Octave
daspk, 161
endfunction, 74
eye, 77
function, 74
inv, 77
log, 74
lsode, 161
pinv, 77
poly, 77, 77
rand, 77
rank, 77
roots, 77
schur, 77
size, 77

Scilab
*, 73
.*, 73
.*., 75
%io(1), 30
%io(2), 30
abs, 273
atanh, 127
champ, 273275
companion, 61

1  


cos, 117, 157, 161
deff, 119
derivat, 61
derivative, 113, 116118, 120
det, 62, 126, 127
disp, 41, 246
else, 41, 236239, 242
end, 41, 110, 111, 113, 123, 128, 159,

235240, 242246
endfunction, 41, 72, 73, 113, 116123,

126128, 150, 157, 160, 235245,


273, 276, 277
evstr, 242245
exec, 41
execstr, 245
exp, 73, 109, 113, 239
expm, 73, 159, 160
eye, 62, 76, 273, 276, 277
floor, 242
for, 41, 110, 111, 113, 123, 128, 159,
235238, 240, 242245
format, 150
fplot2d, 119
fplot3d, 120, 120, 121, 121, 122, 123,
124
fplot3d1, 120, 121, 123
freq, 111
fsolve, 123
function, 41, 72, 73, 113, 116123,
125128, 150, 157, 160, 235245,
273, 276, 277
geomean, 105
graycolormap, 271, 272
gsort, 107
harmean, 105
hist3d, 111
histplot, 108
if, 41, 41, 236239, 242244, 246
intg, 142, 150
inv, 76
kernel, 76
linsolve, 76
list, 158, 159
list(), 159
log, 72, 73, 239
ls, 30

matrix, 111
max, 244
mean, 105
median, 105
min, 237, 242
modulo, 49, 236, 237
nfreq, 106, 109
norm, 75, 76, 116118, 126, 159, 161
ode, 157, 158, 160, 274, 275
ones, 241, 273
param3d, 117, 123, 124, 158
param3d1, 158, 159
perctl, 106, 107
pinv, 126
plot, 73, 105, 107, 109, 113, 157, 160
plot3d1, 271273
plot3d3, 121, 121, 123
pmodulo, 49, 235, 236, 242
poly, 14, 61, 76
quart, 106
rand, 76, 105, 106, 108, 157, 274
rank, 75
read, 270
reglin, 91, 105
roots, 61, 76
rot(g,x), 117
savewave, 239
schur, 76
sci2exp, 14
sin, 14, 117, 238
size, 75, 128, 235238, 273, 274, 276,

277
sort, 106
spec, 62, 76, 126
sqrt, 109, 119, 126, 127, 150
stdev, 105
strange, 106
string, 30, 41, 238, 240
sum, 111, 236, 242, 244
tabul, 106, 109, 109, 110, 111
tangent, 120, 125, 126
tanh, 239
then, 41, 236239, 242244, 246
trace, 127
unix_g, 30
unix_w, 30

299

1  


variance, 105
while, 246
write, 30, 238, 274, 275
xbasc, 157, 158, 160
xinit, 106108, 111, 120, 121, 123, 128,

158, 159, 272


xset, 271, 272
zeros, 76, 110, 127, 128, 236, 241, 243,

273, 276, 277

Shell
-l, 67
bc -l, 72
info, 8
lynx, 8
man, 8
read, 30
xdvi, 8

XCAS
:=, 250
=<, 250
chaine, 35
abs, 56, 227
abscisse, 180, 180, 190, 195, 196, 216,

216, 217, 218


affichage, 95, 148, 175, 176
affixe, 181, 197
aire, 70, 95
alors, 36, 174, 190
and, 101, 179, 180, 229
angle, 93
animation, 103, 103
ans, 16, 115, 178
apply, 8789
approx, 56
asc, 35, 36, 87, 87
assume, 55, 72, 72, 94, 179, 180, 211, 213,
226, 231
atan, 46
augment, 80, 80, 250, 252
avance, 37
barycentre, 194
begin, 16
bissectrice, 219
bleu, 71, 101, 102, 104, 148, 155, 156,
162, 175, 178, 192, 195, 212215,

300

219, 221
blockmatrix, 250, 250, 252
blue, 228, 230, 232
break, 103
cat, 16, 35
cercle, 192, 194197
char, 35, 35, 36, 87, 87
charpoly, 85, 85
Cmplx_var, 55, 56
col, 85, 85, 209, 209
color, 134, 155, 156, 222, 228, 230, 232
Complex, 56
concat, 34, 35, 209, 230, 248, 251, 251,

252
cone, 221, 222
conique, 210, 215, 217
contourplot, 134, 135
convert, 154, 155, 248, 248
coordonnees, 95
cos, 34, 145, 146, 148, 154, 155, 217, 227,

231, 232, 264


cosh, 170
couleur, 52, 70, 71, 93, 95, 101, 102, 104,

148, 162, 175, 178, 192, 194, 195,


210, 212216, 218, 219, 221, 222,
228, 228, 230
count_eq, 100
courbe_parametrique, 197
cyan, 52, 93, 134, 148, 212, 213, 221, 222
degree, 254
delcols, 250, 252
derive, 115
desolve, 20, 161, 162
det, 79, 87, 137, 190192, 209
diff, 63, 69, 69, 114, 114, 115, 133, 136,
136, 137, 145, 170, 211
DIGITS, 46, 57
Digits, 46, 46, 56, 56, 150
droite, 70, 72, 92, 93, 104, 180, 180, 181,
196, 197, 212214, 216219, 264,
264
dsolve, 162
e, 215
egv, 85, 85
eigenvals, 85, 85
eigenvalues, 209

1  


eigenvectors, 209
element, 70, 70, 72, 72, 93, 95, 148, 148,

155, 162, 182, 192, 194, 201, 213,


213, 214216, 216, 218, 221, 222
else, 103, 104, 196, 214, 250255, 264
end, 16
equation, 93, 196, 216, 216, 221, 222,
264, 264
evalb, 216, 216, 218
evalc, 197
evalf, 46, 52, 53, 56, 57, 68, 100, 102,
104, 149151, 166, 229, 265, 266
exact, 221, 221
exp, 57, 114, 115, 154, 166, 170, 264
expr, 35
faire, 36, 37, 164, 165, 175, 176
fclose, 16, 17
floor, 104, 155, 155, 156, 203, 251, 252,
264
fonction_derivee, 69, 115
fopen, 16, 17
for, 32, 35, 51, 100, 101, 103, 148, 151,
162, 196, 197, 203, 230, 231,
249252, 254, 256, 261, 264
fpour, 36, 175, 176
fprint, 16, 17
fsi, 36, 174, 190
fsolve, 196
ftantque, 36, 37, 164, 165
funcplot, 134
GF, 256, 256, 257
grad, 133, 133
graphe, 71, 71, 175, 178
head, 102, 102
hessian, 136, 136, 137
histogram, 102, 102
i, 92, 190, 264
ibpdv, 144, 144, 145, 146
id, 68, 115
idn, 80, 85
if, 33, 51, 103, 104, 196, 214, 248252,
254, 264
ilaplace, 170, 170
image, 79
implicitplot, 134, 135, 265
in, 16

infinity, 179, 227


int, 52, 53, 143145, 147, 150, 229231
integer, 226, 231
integrate, 143, 170
inter, 93, 193, 195, 196, 221, 222
inter_droite, 216
inter_unique, 70, 181
interactive_plotode, 162
intersect, 34
inv, 79, 83, 83, 88
inversion, 196, 197
iquo, 248
irem, 50, 50, 88, 88, 89, 248
is_prime, 51
isprime, 52
ispseudoprime, 52
jaune, 70, 101, 102, 218, 219
jusque, 36, 175, 176
k,T,j, 81
ker, 78, 85, 85
laplace, 144, 170
latex, 16, 17
lieu, 218
limit, 212, 227
limite, 9, 179
list2mat, 87, 87, 88, 251, 251, 252
ln, 52, 53, 55, 57, 68, 115, 144, 145, 149,

156
local, 32, 33, 35, 56, 100, 101, 103, 148,

151, 162, 175177, 197, 200, 203,


214, 230232, 248, 251, 252,
254257, 261, 264
longueur, 93, 94, 193, 196
longueur2, 214, 214
magenta, 194, 212, 213, 216, 218, 219
map, 34
mat2list, 88, 89, 101
mean, 100, 100, 102, 104
median, 104
mediatrice, 218
member, 249, 249, 250, 252, 254, 255
mid, 35
milieu, 93
min, 251
minus, 34
mod, 103, 250, 252, 264

301

1  


moustache, 100, 101, 102, 104
moyenne, 102, 104
mRow, 81
mRowAdd, 81, 81, 82
ncols, 80, 249, 251, 252
nDeriv, 115, 115
newton, 56
nextprime, 51, 51
nInt, 149
nops, 252, 254, 256
normalize, 209, 209
nrows, 82, 249, 251, 252
NULL, 34, 100, 101, 103, 148, 162, 164,

165, 175, 195197, 249, 252, 254,


264
op, 248, 250, 252
ordonnee, 180, 180, 190, 195, 196, 216,
216, 217, 218
parallele, 70, 70, 219
parameq, 197, 197
partfrac, 143
pas, 36, 52, 104, 175, 176, 190, 251, 252,
254
perpendiculaire, 70, 72, 216, 216, 218,
219
pi, 53, 143, 216, 221, 222, 229, 264
plan, 221, 222
plot, 20, 52, 95, 148, 155, 156, 162, 230
plotarea, 148, 148
plotfunc, 134, 212, 213, 225, 228, 232
plotimplicit, 214, 214, 222, 222, 265,
266
plotode, 162
plotseq, 176, 176, 201, 201, 202
point, 52, 6972, 9295, 148, 162, 163,
164166, 175, 176, 180, 181, 190,
192, 194197, 203, 212214,
216218
point_milieu, 148
poly2symb, 85, 85
polygone, 70, 70, 148
polygone_ouvert, 164
pour, 36, 36, 92, 104, 175, 176, 200, 215,
229
preval, 144, 145, 147

302

print, 101, 102, 102, 104, 104, 250252,

254
product, 257, 264
projection, 214
proot, 64
purge, 192, 196
q2a, 208, 208, 209
quo, 253, 254
rand, 99, 99, 100, 101
randpoly, 63
rank, 209
ranm, 100, 100, 101, 103
re, 55
read, 16, 17
rectangle_droit, 148
rectangle_gauche, 148
remove, 34
rempli, 70, 93, 95, 101, 102, 104, 134,

148, 221, 222


resoudre, 177, 177
return, 3133, 35, 51, 57, 148, 151, 174,

177, 190, 196, 197, 203, 214, 215,


230, 231, 248, 251255, 261, 264
right, 216, 264, 264
romberg, 143
roots, 63
rotate, 254, 254, 255
rouge, 93, 148, 162, 175, 176, 194, 214,
216, 218, 219, 221, 222
rowspace, 86, 86
scalar_product, 181, 217
segment, 93, 95, 216, 219
select, 34
seq, 34, 34, 52, 53, 103, 147, 166, 166,
200, 201, 261
set, 33, 34
si, 36, 36, 174, 190
simplifier, 70, 177, 178, 182, 182, 256
simplify, 16, 79, 93, 94, 137, 155, 191,
209212, 216, 217, 229232, 257
sin, 68, 69, 115, 143, 145147, 170, 217,
231, 232
sinon, 36, 174, 190
size, 34, 35, 53, 248, 250, 252
solve, 55, 55, 56, 57, 79, 85, 93, 133, 136,
191, 192, 195, 201, 205, 221, 222

1  


sort, 250, 250, 252
SortD, 102
sqrt, 56, 115, 143, 149, 150, 180, 181,

ystep, 134, 135, 265, 266


zip, 34
zstep, 265, 266

211, 213, 215217


subs, 196
subsop, 34
subst, 137, 137, 144, 144, 206, 260, 261
sum, 83, 83, 149, 227, 229, 232, 249, 249,

250252, 260, 261


symb2poly, 254, 254
symetrie, 92, 93, 196, 212, 213
tan, 143
tantque, 36, 36, 37, 164, 165
taylor, 154, 155
transpose, 8789, 209, 254, 255
trapeze, 148
triangle, 93, 95
triangle_rectangle, 70
trigsin, 146, 147
unapply, 68, 68, 69, 115, 261, 261
union, 34
unitV, 86, 86
vecteur, 181, 182
vert, 95, 148, 212, 213, 216, 218, 219
while, 33, 56, 101, 151, 229, 248, 250,

252, 255
xstep, 134, 135, 221, 222, 265, 266

Yacas
<=, 187
And, 185, 186, 186, 187
CanProve, 185, 185, 186, 187
Clear, 186
Cos, 153
Curl, 116
D, 65, 116
Exp, 116, 153
GetPrecision, 46
Integrate, 139
Ln, 73, 139
Mod, 49
N, 46, 47, 73, 139
Not, 185, 186, 186, 187
Or, 185, 186, 186
Pi, 47, 139
Precision, 47
PrettyForm, 15, 153
Psolve, 65
Sin, 139
Tan, 139
Taylor, 153

303

Guillaume Connan
Stphane Grognet

GUIDE DU CALCUL
AVEC LES LOGICIELS LIBRES
Le Guide du Calcul avec les logiciels libres vous propose de
matriser les bases de plusieurs logiciels gratuits de calcul formel
et numrique, et de gomtrie dynamique : XCAS, Scilab, Bc,
Gp, GnuPlot, Maxima, Octave, Yacas, et galement MuPAD
(non libre). Ces logiciels sont multiplateformes (Windows, Mac,
Linux) et sinstallent rapidement.
La grande originalit de cet ouvrage est de dtailler pas pas
lutilisation de plusieurs logiciels pour plusieurs types de calcul.
Il propose ainsi des applications en mathmatiques, en physique
et en sciences de lingnieur (par exemple : quations
diffrentielles utilises en physique, traitement du son...). Il vous
aidera savoir utiliser le bon logiciel au bon moment pour
rsoudre le bon problme.
Cet ouvrage sadresse toute personne voulant utiliser le calcul
en mathmatiques laide de logiciels libres : tudiants en
mathmatiques ou en informatique, professeurs de lyce
souhaitant utiliser ces outils dans le cadre de leur cours et
jusquaux candidats lagrgation dsirant se prparer
lpreuve de modlisation.
Un index thmatique et un index des commandes par logiciel
aident le lecteur trouver rapidement linformation quil
recherche.

GUILLAUME CONNAN
Professeur agrg de
mathmatiques au Lyce
Jean Perrin (Rez).
STPHANE GROGNET
Matre de confrences
lUniversit de Nantes,
directeur de lIREM
des Pays de la Loire.

MATHMATIQUES

PHYSIQUE

CHIMIE

SCIENCES DE LINGNIEUR

INFORMATIQUE

SCIENCES DE LA VIE

SCIENCES DE LA TERRE

ISBN 978-2-10-053934-5

www.dunod.com

Vous aimerez peut-être aussi