You are on page 1of 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 Gnralits a. Public vis b. Organisation Pourquoi des logiciels libres ? Liste des logiciels abords Vive le calcul !

1 1 1 1 2 2 3

2 3 4

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 7 7 7 7 8 8 8 8 9 13 13 13 13 14 15 15 18 20 23 26 27 29

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 A 2.2 Obtenir des sorties compatibles avec le logiciel de typographie LTEX A a. LTEX et les calculs avec XCAS A b. LTEX et les sorties graphiques de XCAS A c. LTEX et GnuPlot A d. Combiner Bc, GnuPlot et LTEX 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


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

a. Le copier-coller la souris b. Communication via des chiers 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 premiers x 1 b. La fonction Li :x dt et les nombres premiers 2 ln t 4.6 Nombres p-adiques

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

C HAPITRE 5 : QUATIONS
5.1 Avec XCAS

vi


5.2 Avec MuPAD


58 61 61 62 63 64 65 67 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

C HAPITRE 6 : P OLYNMES
6.1 6.2 6.3 6.4 6.5 Avec Scilab Avec Maxima Avec XCAS Avec Gp Avec Yacas

C HAPITRE 7 : F ONCTIONS
7.1 Avec Gp 7.2 Avec Maxima 7.3 Avec XCAS a. Cas gnral b. Dnir 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

vii


92 93 95 96 99 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

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

C HAPITRE 10 : S TATISTIQUES
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 sufsante 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


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


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

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 afne 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

ix

Partie III THMES


T HME 1 : XCAS AU LYCE ?
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...

171
173 173 173 179 179 182 183 183 185 185 185 186 189 189 189 190 192 193 193 196 199 200 200 201 203 205 205 205 205 206 208 208 209 210 211 211 213 214 214

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 Modlisation Observation chiffre Observation graphique Diagramme de bifurcation

T HME 5 : C ONIQUES
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 a. Ellipse dquation
x2 a2

+ b2 = 1
x2 a2 y2 b2

y2

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


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 225 225 228 229 235 235 235 236 237 238 241 247 248 248 248 249 251 253 255 259 259 260 260 260 262 262 263 264 265

T HME 6 : S RIES DE F OURIER


6.1 Exploration 6.2 Interprtation physique 6.3 Phnomne de Gibbs

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

T HME 8 : C ARRS MAGIQUES T HME 9 : C ODES CORRECTEURS D ERREURS


9.1 Mthode nave a. Liste des lments de Fk 2 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. Dnition mathmatique b. Construction informatique 10.3 Dnition 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 dnition semi-algbrique

xi


265 266 267 269 269 270 273 276 277

a. Carr b. Hexagone 10.5 Prolongements

T HME 11 : TACHES DES ANIMAUX


11.1 11.2 11.3 11.4 11.5 Introduction Afchage des donnes Construction sur un rectangle Construction sur un tore Construction sur un cylindre

Partie IV ANNEXES
TABLEAUX COMPARATIFS B IBLIOGRAPHIE I NDEX GNRAL I NDEX DES COMMANDES

279
281 289 291 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



collge lyce suprieur

Cet ouvrage aborde les niveaux :

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 scientique 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 sufsamment riches et sufsamment documents pour quon puisse aussi dcouvrir un domaine mathmatique travers eux. La manire de penser lchange de connaissances sen trouve modie. 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 bnque 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 protable 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 chiers 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 en mode Logiciel
Bc GnuPlot Gp(pari) Maxima MuPAD Octave Scilab XCAS(giac) Yacas

Fonctionne en mode graphique

Type calculette en prcision arbitraire traceur de gures mathmatiques calculateur formel orient corps de nombres calculateur formel calculateur formel calculateur numrique matriciel calculateur numrique matriciel calculateur formel calculateur formel

Licence GPL GPL GPL GPL Propritaire GPL cecill GPL GPL

texte oui

oui oui oui oui oui oui oui oui(iacas) oui oui 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. A Les relations des logiciels de calcul avec le logiciel de typographie LTEX 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, xg, 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.


man bc

Pour obtenir laide de Bc taper dans un terminal :

on obtient une rponse du genre :


Rponse du logiciel
bc(1) NAME bc - An arbitrary precision calculator language bc(1)

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 -w -s -q -v

Define the standard math library. Give warnings for extensions to POSIX bc. Process exactly the POSIX bc language. Do not print the normal GNU bc welcome. 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 scientique, 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 scientique
logiciels
Bc Yacas Gp GnuPlot XCAS Maxima Scilab Octave

symboles accepts pour la partie exponentielle 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 modier 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 ches 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 n 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 modier 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 chier, il est possible dutiliser des diteurs de texte automatiss tels que sed, awk, Perl. . .


opration Logiciel
Scilab

Mise en forme du rsultat obtenir la sortie au format enjoliv il ny a rien faire


x2+1;

obtenir la sortie au format de lentre

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

exemple

Maxima

x2+1;

x2+1;

14


opration Logiciel
Gp Yacas XCAS

Mise en forme du rsultat obtenir la sortie au format enjoliv il ny a rien faire exemple

obtenir la sortie au format de lentre il ny a rien faire il ny a rien faire il ny a rien faire

exemple


il ny a rien faire

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.

A Il est possible de demander XCAS de calculer partir dun chier LTEX. Pour cela, il faut comA mencer par indiquer LTEX quon lautorise excuter des tches externes en modiant le chier ( ou lquivalent sur des systmes non libres ) /usr/share/texmf/web2c/texmf.cnf. Il suft dy remplacer shell_escape=f par shell_escape= t.

15


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

Si on travaille sous Emacs avec AucTeX, il suft de rajouter la toute n du chier :


%%% Local Variables : latex
s h e l l e s c a p e

%%% m o d e :

%%% T e X m a s t e r : %%% E n d :

A Ensuite, voici le code LTEX placer en prambule :

\ \ \

[12pt]{article} {fancyvrb} {\executGiac}[1]{ \ 18{giac <#1


pour faire appel giac

%c o m m a n d e

\ \ \

} }

Remplacer \write18{giac Microsoft.

<#1}} par \write18{giac

#1}} sur Windows

A Cette commande permet de schapper ( escape... ) momentanment de LTEX 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 chier 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 chier ;

("fichier externe") qui charge un chier externe; A (commande ou sortie) qui transforme en code LTEX une commande ou un rsultat afch dans XCAS ;

(fichier,Unquoted,cible) qui crit cible sans guillemets dans fichier ; (nom fichier) qui ferme le chier.

A On cre ensuite un nouvel environnement LTEX quon appellera Xcass pour faciliter la saisie. On utilise nouveau lenvironnement VerbatimOut, mais cette fois-ci nous devons spcier A loption \ pour expliquer LTEX 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+y sin(x),y(0) 2],y)[0]; \ {Xcass} \

{document}

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


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. A Il faut donc maintenant placer ces commandes dans le prambule du chier LTEX. 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}}

A Il ne reste plus qu faire appel cet environnement lintrieur dun chier LTEX :

La solution de lquation diffrentielle y"+y 0 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+y 0,y(0) 1,y(0) 1],y)[0]; \ {Xcass} Nous obtenons galement son }~: graphe grce la commande \Com{XCAS}{plot

\ {xcasf} plot(desolve([y+y 0,y(0) 1,y(0) 1],y)[0],x -PiPi,color blue); \ {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 dnie par : cos (x) + sin (x) Nous obtenons galement son graphe grce la commande :

courbe

A Pour insrer une gure produite par GnuPlot dans un chier LTEX, rien de plus simple. Il suft tout dabord dinstaller lextension gnuplottexa . Plusieurs possibilits soffrent alors nous :

on insre directement le graphique dans le texte :


Du texte prsentant ce graphique~: \

{gnuplot}[scale

1.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 -5 10 -10

et du texte aprs.

Compilation directe de la gure GnuPlot


A Le problme, cest que cette mthode fatigue trs vite la mmoire de LTEX et quon A X. ne peut pas demander de trop gros calculs GnuPlot et donc LTE

Ainsi, le dessin produit est peu prcis car on ne peut dpasser les valeurs 10 et 10 pour

A Mieux vaut donc passer par lintermdiaire dun chier eps pour laisser LTEX 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)


VENTUEL epstopdf avec pour transformer le fichier eps en pdf travaillez pdfLaTeX .

Appel si

vous

epstopdf --outfile tempgnu_eps.pdf tempgnu.

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

21

Rponse du logiciel

Du texte prsentant ce graphique :


1 0.8 0.6 0.4 0.2 0 -0.2 -0.4

f(x,y)

10 5 -10 -5 0 -5 5 -10 10 0

et du texte aprs.

Inclusion de la sortie eps produite par GnuPlot

A On peut galement utiliser MetaPOST : cela conomise aussi la mmoire LTEX et permet ventuellement de changer le style de gure en retouchant le chier .mp :

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

\begin{gnuplot}

mpost tempgnu.mp
# Appel VENTUEL en pdf mptopdf si vous pour transformer avec le fichier produit par MetaPOST travaillez pdfLaTeX .

mptopdf tempgnu.0

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

ce qui donne :

22


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 -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. Nous allons dans cet exempleb illustrer la convergence de la suite de terme gnral un = 1 1 n vers 1 . e Partageons les tches :

Bc va se charger des calculs ; GnuPlot va se charger de lillustration ;


A LTEX va se charger de la mise en forme des rsultats.

Commenons par crer des commandes pour faire excuter des commandes en dehors de A LTEX. Dabord pour Bc :
\ \

{\executBC}[2]{ \ \ 18{bc -q
fichier fichier contenant contenant les les

-l

#1 #2 }} >
de bc calculs des

% #1 % #2

commande rsultats

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 ; ( 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 aprs la vi rgu le */ somme(199); / * 2 0 0 v a l e u r s * /
/*

pour

bc

les

indices

dmarrent

*/

*/

\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 chier fich.gnu :

1 "exp(-1) 0.3679 lt 3 [1:200] [0.245:0.37] donnes.dat


# # image en y aura la lgende endroit

\begin{VerbatimOut}{fich.gnu} " at
# On


place

-0.22, .99, 0.5


exp ( 1) c omme


label au bon

back

1:2

pas

de

titre

puisqu i l

LaTeX

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 eps

label

des

ordonnes

out fich1.eps 0.8, 0.8


exp ( 1) 0.3679

(-1)
\end{VerbatimOut}

On excute le chier fich.gnu dans GnuPlot :


\ExecuteGnuPlot{fich.gnu}

24

Enn, on inclut la gure 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 1 n un = 1 n vers 1 : e


exp(-1)=0.3679 0.36

approximation de (1-1/n)^n

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.

1 Illustration de lim 1 n n A GnuPlot et LTEX

= e 1 avec bc,

25

A De jolis graphiques avec LTEX

Appeler GnuPlot nest certes pas la seule manire dinsrer des graphiques dans un A chier LTEX. 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 magniA ques dessins en totale cohrence avec LTEX : il sagit entre autres de PStricks (qui A consiste en fait en une srie dextensions LTEX), de MetaPOST et de Tikz principalement. Il crent de magniques 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 gures des pages 220, 264, 193 ou 195 par exemple.

A Le logiciel TeXmacs permet de crer des documents la LTEX , 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,... A On peut ensuite exporter le document obtenu au format pdf, ps, html, LTEX.

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 safche 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 inopiA ns. Lexport LTEX 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); 1 x - 1 --------- - ---------2 (x + 1) 2 2 (x + 1)

(%o2)

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 chier texte. En crivant le rsultat obtenu par un logiciel dans un chier, et en lisant ce chier 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.

Pour fabriquer des noms de chiers o crire, pour fabriquer des instructions GnuPlot (par exemple) placer dans un chier, 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 chiers spciaux qui ne sont pas des chiers 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 ux 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

(2*x)
}

double(x): {

On clique sur OK pour vrier 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; } n+" "+p; }

deux

variables

internes

au

programme

32

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;


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

Reprenons le calcul prcdent avec un test darrt tant que :

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): { (n 0) 1; n*factif(n-1); }

et en plus on voit une procdure rcursive.

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 explicite

et $ pour des suites dnies par une formule

(k^2,k 15) (p^2)(p 15) m5

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

crochets

porte

le

L2[24] (L1,L2) (x->x>0,L1); (L1,2 32);


supprimer un

numro

(x->x<0,L1); (L2,3 );

//

pour

substituer

ou

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

oprande

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 "".

34


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.


L: }

alph(n): { l,L; L: [];l:


chane

//

on

rentre

un

entier

(n);
forme de

// ses

est

une

liste ,

cat

transforme

en

la

(k: 0;k (l);k: k+2){ < (L, ( (l,k,2)))


nombre

chiffres

//

expr

transforme

une

chane

en

(L);
selon les

//

la

liste ASCII

de

nombres

est

transforme

en

lettres

codes

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 (j: 0;j< (c);j++){C: C+ ( }

vide

au

dpart

(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 suft 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.

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

Les boucles for deviennent des boucles avec une syntaxe diffrente :

, avec la mme syntaxe quen anglais ou bien

s: 0; j de 2*1-1

2*6-1

s: s+j;

donne la somme des six premiers entiers naturels impairs.


Les boucles while deviennent des boucles bien avec une syntaxe diffrente :

, avec la mme syntaxe quen anglais ou

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%2 0%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... on ouvre une fentre tortue pour permettre de jeunes En tapant sur + 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 :

(variables)

La syntaxe gnrale:
Nom_de_la_procedure:

le programme proprement dit

37



Par exemple
double:

(x)

2*x


double(x)

On valide. Normalement, on obtient un message encourageant :

On rentre alors
double(37)

et on obtient le rsultat escompt... On peut rendre le rsultat plus convivial :

(x) ( , (2*x)."
double:

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: k,p; (n)


38

p: 1: k 1 p: p*k ; ( ,

".

(n)."!

(p));


p: 1: k: 1: k<7 k: k+1: p: p*k : p;

Reprenons le calcul prcdent avec un test darrt tant que:

Ou, sous forme de procdure :

factowhile: k,p;

(n)

p: 1; k: 1; k<7 k: k+1: p: p*k : ( ,

(n)."!

".

(p));

On ne change pas une quipe qui gagne :


factif:

(n) 1

n 0

n*factif(n-1) ; :

qui est une procdure rcursive.


les ensembles

Cest un peu le mme principe que sous XCAS.

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 dnies par une formule explicite :
p^2p 15; m5;

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,b 32); (L1,2 z); (L2,5

());

//

null ()

(L2, ); (L1,L2,(x,y)->x+y);
L3: L1.L2;
// pour

tant

la

liste

vide

concatner

les chanes de caractres


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


ractre :

(C,5,2) renvoie une partie de la chane C de longueur 2 partir du 6e ca("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:

l,L;

(n)

//

on

rentre

un

entier

L: [];l:
forms

(n);
des chiffres de n

//

est

une

liste ,

la

chane

k 0 (l)-1 2 L: L.[ ( (l,k,2))] :


40
lettres la chane en nombre

// text2expr transforme

(L);

//

la

liste

est

transforme

en

chane

de

Pour excuter un chier dans Scilab, on peut taper nomDuFichier. Le logiciel Scilab naime pas les appels rcursifs des chiers pour les excuter dans des procdures : sa pile sature. Il vaut mieux tout placer dans des fonctions. On excute les chiers juste pour dnir les fonctions, qui, elles, peuvent tre appeles dans des procdures intriques. Les instructions de contrle de ux 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 afchant llment chaque tape.
t 1:3 T [] i t, (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.

y test(x) a "Cest ltape" b trois y x x 3 (b,a) ;

or([x

t])

; (x)+" nappartient pas t"

La seconde boucle permet de terminer la fonction rapidement si la variable x appartient au tableau t dja dni. Elle peut tre crite aussi bien
y

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

Pour exploiter la fonction test, il suft dexcuter la boucle


i [3*t t], test(i)

Le logiciel Scilab travaille essentiellement avec des fonctions, des nombres rels en virgule ottante, 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 suft de taper


4* (1)

1000

pour obtenir la prcision voulue en ajustant la variable

, et

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 ?

ou qui doit tre un nombre entre 1 et 1000

On rgle la prcision avec


4*

: 1000:; ( (1))

Voir aussi 5.1 page 56.


, puis on utilise :

On rgle la prcision avec

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

\p

La prcision dafchage est donne ou xe par linstruction \.

4* (1) \p 1000

Le rsultat est-il le mme que pour Bc ?

()

La prcision des calculs approchs est donne par linstruction

Pour obtenir ponctuellement des calculs en prcision arbitraire, il suft de le demander lors du calcul approch.

,1000)

Pour basculer la valeur de la prcision, taper

46

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

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



2**(30)

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

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.

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 :


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 nal.
% bc -lq ;
Rponse du logiciel 10

;
Rponse du logiciel

10

7;
A;

Rponse du logiciel 13

48

66+22;
Rponse du logiciel 121


2*7;

A; A;

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,3)

Avec Maxima

:3; (-5); :
Avec Octave
mod(-5,3)

Avec Scilab

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

(-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


(2008)^(2007^2009)%10

2009

, on peut faire :

...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 suft 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.

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 ni 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 dnissant, 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 dnition 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


et on descend

rajoute

si

le

nombre

est


}:;

premier

pir(n-1);

a marche en ayant pris soin de rgler le niveau de rcursion du CAS au maximum (dans la fentre de conguration du CAS). Cependant, le niveau de rcursion nest pas inni 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, afche 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 able 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(
les points

( ([50*k,pin(50*k)]),k 02000))
avec un

//

on

relie

de 50 jusqu 100 000 c: (x/((x)-1),x 3100000, +


En 81 secondes, on obtient :
Rponse du logiciel

( k , pin ( k ) )

Les courbes reprsentatives de et x sont extrmement proches


x 2

x ln x1

1 ln t

G AUSS conjectura la n du XVIIIe sicle que (x) tait quivalent Li(x) au voisinage de +. tablissons un petit tableau comparatif avec XCAS. Mais dabord, dnissons la fonction Li :
Li(x): ( Li(100000)

(1/(t),t,2,x))

a B EL ABAS , Karim Site ofciel de PARI/GP . URL: http://pari.math.u-bordeaux.fr/.

52

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 nes de lintgrale : mthode des trapzes, point milieu, Romberg, etc., la plus ne tant la dernire. Modions donc notre dnition 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)"], (1/((10^k)-1))],k 28)]

([10^k,pin(10^k),Li(10^k),

et on obtient, aprs environ 8 minutes de compilation :


Rponse du logiciel

x 100 1000 10000 100000 1000000 10000000 100000000

(x) 25 168 1229 9592 78498 664579 5761455

Li(x) 29.1 176.6 1246.5 9658.3 78984.6 668749.5 5801743.9

1/(ln(x)-1) 27.7 169.3 1218.0 9512.1 78030.4 661469.0 5740303.8

Le logiciel Gp connat les nombres p-adiques. Il suft de les rentrer avec la notation de Landau des dveloppements limits.
a:a 49+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+1 0) / / x e s t (t^2+3*t+1 0,t) (x^2+3*x+1) / / 0 p e u t (x^2+x+1 0) / / n e p a s


Configuration "

l inconnue

par

dfaut

tre

omis de cocher " complex " dans " Cas

oublier

(x^2+a*x+1 0,x) (x^2+a*x+1 0,a)

Notez que le paramtre a est considr par dfaut comme tant rel. Si lon veut travailler avec des variables complexes, il faut cocher dans le menu de conguration cas. Il faudra alors utiliser la fonction assume pour mettre des hypothses sur a :

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

//

partie

relle

de

la

premiere

racine

//

est

maintenant

suppos

rel

Toutefois, nous atteignons parfois les limites du calcul formel :

(x+(x)+100 0)

et cest une approximation numrique que nous obtenons.


a Nous examinerons plus prcisment les quations polynomiales la section 5.2 page 61.

Conguration du CAS Selon les cas, il faudra veiller bien congurer le CAS b : - ou non pour avoir des rsultats exacts ou approchs; - ou non pour avoir des rsultats (exacts ou approchs) sous forme relle ou complexe; - 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,x 1) / / x 1 p r c i s e (x^2-2 0,x 1,newton_solver)


Pour connatre la prcision de notre calcul :

le

dpart

de

l algorithme

(x^2-2,x

1)-(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 xes 12 et 108 .

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

-50)-(2)

//

1 e 50

signifie

10^( 50)

XCAS nous afche -2.828427. Reexion faite, ce nest pas tonnant : la variable qui xe le nombre de chiffres signicatifs est par dfaut x 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 :

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

Newton(f,pre,u0): {

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-2 0,x 0,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-2 0,x 1,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 solution appartient lintervalle ]0 ; e100 [, ce qui indique que la solution est assez petite...
x0

(x+(x)+100 0,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 <16 (la precision est alors independante de Digits, seul lafchage change). Si 16, la librairie multiprcision mpfr est utilise. Donc on peut demander la prcision souhaite jusqu DIGITS:=1000.

n+1 u n ) qui doit tre infrieur la prcision dans notre programme : cela est sufsant 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

c Cest un-aun ( cest--dire u

57

Calcul avec des ottants Attention au calcul avec des ottants : laddition nest pas toujours associative, 1 x avec x de lordre de 10100 peut tre gal 1, enn (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

(x^2-x+3 0,x);

Loutil gnral est solve :


(x^2-4*x+3 0,x);

Cest assez classique. Ce qui lest moins, cest la capacit de rsoudre des quations dpendant de paramtres.
S:

(x^2 - s*x+p 0,x):

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

(x^2-4*x+3 0,x));

La rponse 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 afche 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^2 4,x);

On peut sinon utiliser les ensembles habituels avec les notations suivantes :

58

N Z Q R R+ iR

NonNegInt Integer Rational Real Positive Imaginary

N 2Z Q R
+ +

PosInt Even PosRat NonNegative Negative

N 2Z + 1 Q Q C
+

NegInt Odd NegRat NonNegRat NonZero

iZ IntImaginary P Prime Ensembles de nombres et MuPAD


):

(x (x^2-4 0,x);
S : ( S

Une autre ruse permet de selectionner les solutions :

(x*PI/7) 0, x); (-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+z 2,2*x+a*y-z 3},{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)

(x),x);

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

( (

)(x+(x)+1 0));

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

Au-del, MuPAD semble jetter lponge :

( (

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)+10 0,x 1e-50

( (-10)),
50

);

indique MuPAD de chercher une approximation de la solution dans [10

,e

10

].

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 dnir la variable :

(0,x)

dnir le polynme x 2 + x + 1 :
P x^2+x+1

et calculer ses racines :

(P)
Le polynme peut tre construit avec ses coefcients
Q ([3 (Q) 2 1],x,coeff)

Il est noter que si lon ne prcise pas le drapeau coeff, le polynme est dni 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 coefcients 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 coefcients 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 >

x^2+2*x+3 (P,x)

Le logiciel Yacas traite les polynmes comme les logiciels prcdents. Trouver les racines du polynme P se fait comme suit :

La drive est la drive formelle de toutes les fonctions :


(x) P

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 : Dnir 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 dnir 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.

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

Pour calculer sa valeur en 2, on tape


machin(2);

Le logiciel Maxima considre les galits comme des quantits valuer ; une galit-dnition 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.

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


machin(x): 1/log(x)

dnit 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


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

(expression,variable)

On peut galement dnir la fonction drive dune fonction :


fp: fp(3)

+2*

);

68

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.

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 dnissons les points A et B dans un repre judicieusement choisi :
A: B:

(0,0) (0,-4)
libre pour y

// //

plaons plaons la B

A tel que AB la 4 fin en de laissant la le 1 er quadrant

tracer

courbe

sance

69

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

(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)

Dnissons 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 dnir N, commenons par dnir 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))

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


N(x):

(d(x),

(B,C))

Pour obtenir P, nous commenons par dnir 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 dnir 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 . Dnissons maintenant la fonction qui x associe laire du rectangle :
f(x):

(R(x))

Donnons son expression simplie :


70

(f(x))


Rponse du logiciel

x2 + 4x

4 3

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


X:

(t,f(t))
:

Traons enn la courbe reprsentative de f laide de la fonction

(f(x),x 03,

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 suft, dans le code prcdent, de remplacer :
t:

(03)
(t [1,0,3])

par :

o 1 reprsente une valeur arbitraire modiable 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: d:

(t,0)

(M,

(A,C))

, la nouvelle fonction est


machin(x){ 1/(x)}

Dans la calculette en mode texte appele par linstruction dnie comme suit :

Lvaluation se fait naturellement.


machin(2)

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

y machin(x) y 1/ (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,
t 2: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 coefcient par coefcient sont distinctes. Pour poursuivre lexemple, il faut alors dnir la fonction en utilisant la division ponctuelle : attention lespace derrire le nombre 1 !

y machin(x) y 1 ./ (x)
t 2: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 :
v 1:5 u v*t machin(u)

Le logiciel Yacas dnit 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 suft de le rclamer pour le rsultat prcdent.

(%)
73

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

y machin(x) y 1 ./ (x) ;
machin(2) t [2;3] machin(t)

Le point-virgule est ncessaire dans le corps de la dnition 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.

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 :


t v*u A u*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.


tr t A A , souvent utilise, est obtenue

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

A B V


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

On se donne un systme de trois quations trois inconnues dont les donnes sont alatoires.

On vrie 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)) B A-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)

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

(A)

On vrie 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

u v t A

La syntaxe de base dOctave est commune avec Scilab. Les instructions ci-dessous sont encore valables.
[2;3;5] [7 11 13] v*u u*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 coefcients du polynme caractristique de A. On peut calculer le pseudo-inverse de la matrice dgnre.
p (A) R (p) B A-R(2)* (3,3) c (B) c*B B*c

La dcomposition de Schur est la mme que pour Scilab :


[U,T]

(A)

(%i1)

On dnit une matrice avec

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

On calcule son dterminant :


(%i2)

Elle est donc inversible. On demande son inverse :


(%i3)

Calculons le produit pour vrier. 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 vrie 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;



x y

Quest-ce que lendomorphisme de R2 dexpression analytique canonique = = 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 dnit 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

(A)
Rponse du logiciel

[[-1,3]]

1 0 a 1

Dterminons les puissances entires de B =


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

Calculons jusqu la puissance cinquime :

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


Rponse du logiciel

1 0

2a 1

1 0

3a 1

1 0

4a 1

1 0

5a 1


1 0 a 0 a 1

Soit A = 1 a

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

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)2 ) ((a)3 )+a a+1 ((a)3 )+a a ((a)3 )+a

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

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

Crons une matrice :


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

0 1 1 0 1 1 1 0

Compltons-la par la matrice identit de mme taille. Protons-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

de

colonnes de

de

a correspondant

matrice au bout

identit

taille

Ainsi :
T: GJ(M)
Rponse du logiciel

0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1

80

Pour effectuer une combinaison linaire des lignes, on peut utiliser (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:

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

0 0 1 0 1 1 1 1 1 1 0 1 0 1 0 0 1

On effectue L3 L3 L2 :
T:

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

0 0 1 0 1 0 1 1 2 1 0 1 0 1 1 0 1

On multiplie L3 par 1 avec 2


T:

(q)ui remplace L j par k L j :

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

0 0 1 0 1 0 1 1 1 1 0
1 2

0 1
1 2

0
1 2

On effectue L1 L1 L3 :
T:

(-1,T,2,0)

81


0 0 1 0 1 0


Rponse du logiciel
1 2

0 1 1

1 2

0
1 2

1
1 2

0
1 2

1 2

et enn L2 L2 L3 :
T:

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

0 0 1 0 1 0 0 0 1

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]
p 1

//

on

extrait

les

lignes

p 1

et

les

colonnes

}:;

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

qui vaut :
Rponse du logiciel

0 0 1 0 1 0 0 1

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.

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 traquants 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 simplier 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 Donnons linformation XCAS :
P: [[.8,.3,.2],[.1,.2,.6],[.1,.5,.2]]

0, 5

0, 2

Vrions 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 traquants se promenant de ville en ville, il peut tre utile de visualiser leurs dplacements par le diagramme de transition suivant
0,8 V1

0,1 0,3 0,1

0,2

0,5 V2 0,2 0,6 V3 0,2

(k) On notera xi la proportion de traquants 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. (k) (k) (k) Ainsi, x (k) = x1 , x2 , x3 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 maa locale dispose de 1000 traquants qui partent tous le matin du jour 0 de la ville de Zlot.
X: [[1000],[0],[0]]

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

563.887400 210.043500

226.069100

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

84

On recherche donc le sous-espace propre associ la valeur propre 1. Il faudrait dabord vrier 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 coefcients 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.140000 0.130000 0.340000

0.179443 0.094721 0.084721

0.000557 0.004721

0.005279

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

( (P),0)

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 dnir 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 dni 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 coefcients 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

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 nissant 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 coefcients dans Z/27Z et inversible :
A: [[1,22,25],[0,25,1],[25,3,1]]%27
Rponse du logiciel

0%27 2%27 1%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

4%27 8%27 10%27 2%27 6%27 13%27

9%27 4%27

2%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

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 afne
Logiciel(s) abord(s) : Scilab XCAS

Problmatique : Manipuler des objets lmentaires de gomtrie afne.

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 vrie en tapant :
a*U+b

qui donne V.

Les fonctions de gomtrie afnes 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-1 0) / / p a r t i r ( (1,2), (-3,1))


les coordonnes

d une //

quation par

cartsienne deux points dont on connat

passant

(1+ ,-3+ ) / / p a s s a n t p a r d e u x ([5+t,-2+2*t],t) / / p a s s a n t p a r


(1 ,2)

points le

dont

on

connat et de

les

affixes

point

(5 , 2)

vecteur

directeur

et dans lespace afne 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+z 0,x 2*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: M: m:

(y x) / / o n t r a c e l a d r o i t e (4,2) / / o n t r a c e u n p o i n t q u e l c o n q u e (d,M) / / o n t r a c e s o n s y m t r i q u e

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: p:

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


elles axe XCAS rpond 1 pour

la

droite

( mM )

est e l l e

orthogonale

oui et 0

(m,M),
la


( Mp )

(p,P))
( mP )

//

les

droites

( mM )

et

( pP )

sont


92

parallles // // on et trace la droite

(m,P) (M,p)

droite

est_faisceau_droite(
elles

(m,P),

(M,p),d)

//

( 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


A: a:

concourantes

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


sont conservs .

opposes

un

lment

quelconque

de

[ PR ]

appartient i l

[ pr ]

Les

barycentres

( (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 par la de ( MP ) : les rles de inverss rflexion .

de de on x

( MP ) ( mp ) exprime et de y x ont en fonction t de y

donc

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 )

et

( NR )

sont

(
et on obtient :

elles

parallles

(E,B,G),

//

on

colorie

le

plan

( EB G )

93

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


P: Q: M:

((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 ((F+C)/2) ((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

(a 0) >

//

on

s assure

que

est

positif

le

milieu

de

[ EG ]

EP

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 gure, on xe une valeur pour a :

94

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: A: B:

(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 ) (6,0) (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 (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 (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),x 06, ) / / o n t r a c e l a c o u r b e
P: f(x)
// on demande la formule donnant l aire en fonction " aire " f (x) d abscisse a

f (x) de x

fonction

Voici la sortie graphique :

95

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

dfinition de la fonction

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

f(x,y) x*x+y*y
# Lignes de niveau x xval

xval 2 dx 0.1 lignex(x,y)

(x >

xval-dx && x xval <


Lignes de niveau

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

yval 3 dy 0.1 ligney(x,y)

(y >

yval-dy && y yval <


lignes de niveaux

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

zval 30

z
les

%4.3g
: d / comme nt er de les deux lignes suivantes pour afficher / lignes niveaux

ATTENTION enlever

levels
# 10 , de 0 si 100

discrete zval
veut des lignes de niveaux rgulires : de 10 en

on

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

concernant GnuPlot.

96

# set

cntrparam

levels

incr

0 ,10 ,100

Borne

de

et


zmin 0 zmax 100
# set

xmin -5 xmax 5 ymin -7 ymax 7

[xmin:xmax]

[ymin:ymax]
Borne de z

z r a n g e [ zmin : zmax ]

dfinition

du

maillage


coefx coefy 1

nx 50 ny 50

nx,ny
dfinition de la taille du graphique

1 coefx,coefy
Graduation des axes


# set

1 1 10
Angle de vie

39,16
Dfinition des labels

title

" Exemple

de

surface "

"x" "y" "z"


Gestion des parties caches , des

# couleurs # set # set # set # set hidden3d nosurface p m3d 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) ligney(x,y)
f (x , y) f (x , y) f (x , y)

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


lines lines lines lt lt lt 2 2 , lignex (x , y) 2 , ligney (x , y) with with

lines lt 1 notitle,

# splot # splot # splot

with with with

lines lines

lt lt

1 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 efcace dtudier statistiques et probabilits sans tableur. On prote des capacits de Scilab pour obtenir de belles sorties graphiques.

Problmatique : On simule des expriences alatoires. On prote des capacits de

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. Protant 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 rexions, Galile rdigea un petit mmoire sur les jeux de hasard en 1620 expliquant le phnomne.

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. 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
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

(liste).

Comparaison du nombre de sorties du 9 et


du 10

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 (k: 1;k< essais;k++){ / / o n v a f a i r e p l u s i e u r s T: (1,taille, (6)+ (6)+ (6)+3); / /
fois 3 ds

dpart essais on lance taille

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

On calcule ensuite les moyennes dapparition de 9 et 10 avec


n: d:

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

/ / mean

en

anglais

100

On totalise le nombre total de lancers :


s: taille*essais;

On construit les botes moustache correspondant chaque face :


mn: md:

( (

([neuf]), ([dix]),

+ + ); + + );

On afche enn 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.


S:

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 :

;
1;k essais;k++){ <

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

(k:
s:

On cre une liste vide pour y mettre les nombres de rsultats conscutifs gaux :

; ( (1,10,
(2)));

On effectue 10 lancers de 0 ou 1 :
P:

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


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 :


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:

(liste) :

( ([S]), + ( ([S]));

);

On calcule la moyenne de S :
m:

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


M:

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

+ + :

);

On afche une phrase donnant les rsultats avec

("Sur

"+essais+" sries de 10 lancers, la de rsultats conscutifs gaux est "+m);

du nombre maximal

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

Histogramme et bote moustache pour 1000 sries de 10 lancers. On peut mme se lancer dans une animation avec... (suite dpendant de u, variations de u)

( (piece(10*u),u 1100))

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: ;
//

(k:

nous

allons

faire

simulations

1;k p;k++){ <

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] }

0){s + 1}

{s+ -1}

103


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),

+ +

);

On afche 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

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.

tant donns deux familles de nombres x et y de mme taille, on cherche la meilleure relation afne 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.
x 5* (1,9) y 3* (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 afnes voir f. page 91.

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

On peut extraire les frquences et lamplitude :

105


m n a

(s) (s) (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)

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

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); q 1:99; p (X,q) x p(:,1);y p(:,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

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 suft de modier la premire instruction ci-dessus en :
Y

(1,1000,normal);

108

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 exp t2 2 par la commande
t -3:.1:3;z
2

(-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] echantillon sample(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

Premier tirage pile ou face

Deuxime tirage pile ou face

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] echantillon sample(1000,de) t (echantillon) z (de); Z t(2); k 1:6, z(k) Z(7-k); ;

110

bar(z)

Pour le tirage de deux ds, la machine peut nous donner les frquences de chaque couple.
couple []; k de, couple [couple;de+ +k]; ; echantillon sample(1000,couple); t (echantillon); y t(1);z t(2);Y y;Z z; k 1: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 8:-1:3 7:-1:2]; [0]; k 1:11, ind vectorfind(somme,k+1,c); zz z(ind); [ ;(zz)]; ; ();bar( )

111

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.

y f(x) y (2*x) y fprime(x) y (f,x)


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

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

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 difcile de sen rendre compte sur la gure 11.27.


. Linstruction

Le logiciel Maxima donne des drives formelles avec la commande

(2*x),x);

donne le rsultat escompt.

(expression,variable)

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

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: fd(2)

(f);

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

Le logiciel Gp se comporte diffremment.

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

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} (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.

y f(x) y (x)^2 y g(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.


[J,H]


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

H h(x)

(f,x,order 2,H_form blockmat)

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

116

y V(x) y (x)^2*x(1)*x y rot( ,x) J ( ,x)


x [1;1;1] rot(V,x) y J-J

Le rotationnel du gradient est nul : on le voit sur lexemple

Pour tracer une hlice (gure 11.28), il faut dnir sparment les fonction coordonnes.

x X(t) x (t) y Y(t) y (t) z Z(t)


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

10 9 8 7 6 5 4 3 2 1 0 1.0 Z

0.6

0.2 Y

0.2

0.6

1.0

1.0

0.6

0.2

0.2 X

0.6

1.0

Une partie de lhlice

117

On dnit le vecteur tangent unitaire :

v vitesse(t) v (c,t) v T(t)


v vitesse(t) v v/(v)

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

On dnit le vecteur normal et la courbure :

v Tprime(t) v (T,t) y kappa(t) y (Tprime(t))/(vitesse(t)) v N(t)


A z x y v v Tprime(t) v v/(v)

On dnit le vecteur binormal grce au produit vectoriel :


v B(t) T(t)*N(t)-N(t)*T(t) A(1,2) A(2,3) A(3,1) [x;y;z]

On peut vrier 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 dnit alors la torsion :

v Bprime(t) v (B,t) y tau(t) y Bprime(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 (gure 11.29) ;

118

(t,kappa,style 5) (t,tau,style 13)

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 . Dnissons par exemple la selle, dont la courbure de Gauss est ngative :


z x*y

z f(x,y)


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

z ff(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 1 v(x1 , x2 ) = . f (x1 , x2 ) x2 0

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

F nappe(nom) chaine M [x(1);x(2);+nom+(x(1),x(2))] (M F(x),chaine)

119

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 gure 11.30.
x .1:.3:12; y x; z f(x,y) z 3*x*y/(x+y) (x,y,f,alpha 60,theta -120)

();

Extrait dun problme du bac de 2007


(France) Linstruction

(x,y,f,alpha
120

60,theta -120)

donne des couleurs qui reprsentent la cote, donc la valeur de la fonction f (gure 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 ag) 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.
x 0:.2:6; y 0:.2:8;


a 5 t -130 ();

z f(x,y) z 2*x^2-8*x+y^2-6*y+18

(x,y,f,alpha

a,theta t)

Pour dessiner le plan dquation y = 2, on rajoute un rectangle avec linstruction qui dessine des surfaces quadrangules : une seule cellule suft. 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,Y,Z,alpha

X [0 0;6 6];Y [2 2;2 2];Z [0 60;0 60]; a,theta t)

Pour tracer lintersection du plan et du graphe de f , il suft 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,alpha a,theta t)

Pour tracer les points A = (3, 2, 3) et B = (5, 2, f (5, 2)), il suft de tracer des graphes corresondant une lgre variation horizontale (gure 11.32).

121

Bun [4.9:.01:5.1];Bdeux [1.8:.001:2.2]; (Bun,Bdeux,f,alpha a,theta t) z g(x,y) z 3

(Bun-2,Bdeux,g,alpha

a,theta t)

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 gure 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

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) = = = 0 0 0

Voici lensemble complet des instructions :


x 0:.2:6; y 0:.2:8;

z f(x,y) z 2*x^2-8*x+y^2-6*y+18

a 5; t -130; (); (x,y,f,alpha a,theta t) X [0 0;6 6];Y [2 2;2 2];Z [0 60;0 60]; (X,Y,Z,alpha a,theta t)
// fplot3d ( x , [ 1 . 9 : . 0 1 : 2 . 1 ] , f , alpha a , theta t ) // n est plus utilis

Bun [4.9:.01:5.1];Bdeux [1.8:.001:2.2]; (Bun,Bdeux,f,alpha a,theta t) z g(x,y) z 3.1

(Bun-2,Bdeux,g,alpha
La fonction qui dfinit

a,theta t)
intersection

//

t 0


//

y inter(x) y [x(1)-t,x(2)-2,x(3)-f(x(1),x(2))]
paramtrage de l intersection

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

//

dessin

(abscisse,ordonnee,cote,[alpha a,theta t])

123

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 gure. 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 gure 11.35. (En slectionnant les lignes correspondantes, on peut augmenter ou diminuer la graisse des dessins qui reprsentent A et B.)

124

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 gure 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 dni grce au produit vectoriel des drives partielles.

v n(F,x) J (F,x)
un J(:,1) ; deux J(:,2) A un*deux-deux*un z A(1,2) x A(2,3) y A(3,1)

125


v [x;y;z] v v/(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.

V Gauss(F,x) h 1e-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, n 1 (x1 , x2 ) = xi 2 xi n
2

= 0 pour i = 1et 2.

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.

V N(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] J (F,x)
G Gauss(F,x) M (J)*G [directions,courbures]

elements(F,x)

(M)

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

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


126
K courbure(F,x)

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

La courbure moyenne est la somme des courbures principales.


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

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


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

elements(FF,O) elements(FF,x) elements(FF,y)

elements(F,O) elements(F,x) elements(F,y)

La pseudosphre est la surface de rvolution de la tractrice.

M H(x) a x(1);b x(2) r (1-a^2-b^2) c (r)-r M [a;b;c]

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

127

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.

(Z) ();X I/maille-.55;Y J/maille-.55;surf(X,Y,Z) ();surf(X,Y,couleur) ();surf(X,Y,Z,couleur)


Linstruction
dessin(H)

dessin(F) maille 30 I 1:maille; J I; Z (maille,maille); couleur Z; t I u J point [t/maille-.55;u/maille-.55]; z F(point); Z(t,u) z(3); couleur(t,u) courbure(F,point); ;

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

La pseudosphre : les couleurs reprsentent la cote

128

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 gures suggestives.

129

La selle : les couleurs reprsentent la cote

La courbure de la selle : les couleurs reprsentent la cote

130

La selle : les couleurs reprsentent la courbure

La sphre : les couleurs reprsentent la cote

131

La courbure de la sphre : les couleurs reprsentent la cote

La sphre : les couleurs reprsentent la courbure

132

R2

nonons ce thorme que nous ne dmontrerons pas ici :

R2

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 : (x, y) = g (x, y) f 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


Rponse du logiciel

1 0 0

0 0 1 1

1 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 conrms 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

R2

(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 afche :
y 1

0.5

-0.5

-1

-2

-1

Courbe de niveau de f avec la contrainte g (x, y) = 1

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 x 2 (x0 , y 0 ), s = f x y (x0 , y 0 ) = f y x (x0 , y 0 ) et t = f y 2 (x0 , y 0 ). Alors, si

= 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 );
f (x,y )

f (x,y )

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

< 0, alors f atteint un > 0, alors f atteint un

= 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

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

0 1 0 1 0 0

0 1 0 1

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


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])

Ici :

136

R2

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),x

a,y b)

( (

(f(x,y),V,2),x a,y b)

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 dafrmer que f atteint un maximum relatif aux points (1 ; 1) et ( ; 1). La reprsentation graphique va nous permettre de conrmer 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.



(x)

(x) (x)

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

et pour obtenir son intgrale sur lintervalle [0, ] :


A: (A,20) (x,0, ())

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

(x)

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

Mais Yacas a ses limites :


(x) (1+(

ne donne rien.

Pour obtenir une primitive de sin(x), avec le logiciel Maxima, il suft 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 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 simpli. Prenons maintenant le cas difcile. 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- Q(x):=1/PP(x);

(A[2]))*(x- (A[3]));

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):= TT(x):=

(Q(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 dnir 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 gure 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 3.0

Graphe de x log(x) x + 1

142

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),x) (R(x),x) (S(x),x) (S(x),x)


S(x): 1/(x^3+x+1)

R(x): 1/(x^3+x^2+x+1)

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),
donne :

x)

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)
Rponse du logiciel

donne :

(n + 1, x) (1)n

a Cest a de ne pas tre libre...

143

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),t x*a)

qui rpond :
Rponse du logiciel

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

nous permet de voir que L f (ax) =

1 a pour les transformes de Laplaceb 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.

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

144

(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.


Wn =
/2

Ce sont les intgrales du type


0

sinn (x) dx

En particulier
/2

sinn+2 (x) dx =

/2

sinn (x) dx

/2

sinn (x) cos2 (x) dx


/2

sachant que sin2 (x) = 1 cos2 (x). Il faudrait donc calculer On pense une intgration par parties. Mais si on tape :
ipp((

sinn (x) cos2 (x) dx.

(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. 1 La ruse est de changer sinn+1 (x) en n+1 sinn (x)sin(x). Alors
r:

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


Rponse du logiciel

rpond :

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 simplier 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 efcace 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 simplier 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 simplier le rsultat avec la commande qui justement simplie 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

(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),k 014)

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

(hold(int)(f(x),x=
),v(x)).

Pour lintgration par parties, on utilise 1 Ainsi, on peut intgrer par parties 0 x n ex dx :

(n, NonNegInt): (n>0,and_); simplify(intlib byparts( (int)(x^n* (x),x 01),


qui rpond :
Rponse du logiciel

(x)))

en

1 0

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 :

RV,RR,R,k,av,ap,C; RV: ; RR: ; (k: 0;k< N;k++){

Rect(f,N,a,b): {

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)),


le rectangle

(ap,f(av)), (ap,0)); / /
pais

RR: RR, (R, RV: RV, (R, } C: (f(x),x ab, (RV,RR,C); / / l e s }:;

+ ); / / o n r e m p l i t l e s r e c t a n g l e s + ); / / l e c o n t o u r e n p l u s
3 graphes

); / / l a

courbe

superposs

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),x 02*Pi,20,rectangle_droit), ), ( ( (x),x 02*Pi,20,rectangle_gauche), )


148

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),k 1N)); }:; aireRect(x- (x),100,1,10) >
Rponse du logiciel 14.02524361
// subdivision rgulire

alors quavec par la fonction de calcul approch :


nInt((x),x 110))
Rponse du logiciel 14.02585093

Nous avons donc 3 bonnes dcimales avec 100 rectanglesd .

1 x 2 et :

Il nest pas trop difcile de trouver un rapport entre la fonction f : x


4*aireRect(x- (1-x^2),1000000,0,1) >

Avec 1000000 de rectangles et 76 secondes, on obtient difcilement 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


1

Interrogeons XCAS pour obtenir une approximation de


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 :
y

y f(x) (1-x**2) (20) (0,1,f)


Rponse du logiciel

4*

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

Approximation de avec la formule de Machin Vous savez bien que Arctan(x) x 2n+3 (1)k x 2k+1 < . 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
n

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 + arctanb = arctan ab > 1 et a < 0.
a+b 1ab

+ avec = 0 si ab < 1, = 1 si ab > 1 et a > 0 et = 1 si


n

On appelle polynme de G REGORY le polynme Gn (X) =

(1)k X 2k+1 . 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.

Le logiciel Yacas permet de calculer quelques dveloppements limits.


f(x): ( (x)) ( (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) f(x)

( (x))

Pour dvelopper lordre 20 il suft de rajouter :


\ps 20 f(x)

Pour obtenir le dveloppement en , il suft de dcaler : 2


f(x+ /2)

Le rsultat na pas besoin dtre converti en polynme puisque ce nest quune reprsentation lafchage de la fonction.

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)),x

0,6)

Le dveloppement peut etre transform en polynme avec linstruction En voici tout de suite une application.

(DL,polynom).

154

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 inni ou ni. On construit une procdure dl(f,x,n) qui dpend de la donne dune fonction f, dun ordre n et du point dobservation x :

( ( (f(x),x
}:;

dl(f,x,n): {

0,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 trait cte les courbes

par

les

couleurs

et

et on obtient pour la fonction cosinus en 0 avec n = 25 :

Approximation polynomiale de la fonction


cosinus

155

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)],x 02, [ ])


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.

Lquation diffrentielle y (t ) = 2y(t ) + 10cos(10t ) est rsolue sur lintervalle [1, 1] avec la condition initiale 1.

yprime f(t,y) yprime 2*y+10* (10*t)

y0 1;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.

On se donne une matrice antisymtrique dordre trois (quelconque) ;


AA (3,3,unif) A AA-AA

le sous-groupe de Lie quelle engendre dans le groupe spcial orthogonal est construit avec une quation diffrentielle ordinaire.

yprime f(t,y) yprime A*y

La machine se fait une joie de tracer une partie de lorbite du premier vecteur de la base canonique.

() z (y0,t0,t,f); (z(1,:),z(2,:),z(3,:))

y0 [1;0;0];t0 -1;t -1:.1:1

1.0 0.6 0.2 Z 0.2 0.6 1.0 0.6 0.4 0.2 0.0 Y 0.2 0.4 1.0 0.8 0.6 0.4 X 0.2 0.0 0.4 0.2 0.8 0.6 1.0

Rotation dun vecteur

Maintenant on trace lorbite de la base canonique ;

() z (y0,t0,t,f);

y0 [1;0;0];t0 -1;t -1:.1:1;

y1 [0;1;0]; zz (y1,t0,t,f); y2 [0;0;1]; zzz (y2,t0,t,f); X z(1,:);XX zz(1,:);XXX zzz(1,:); Y z(2,:);YY zz(2,:);YYY zzz(2,:); Z z(3,:);ZZ zz(3,:);ZZZ zzz(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,[2,3,4])) ([X,XX,XXX]-XXXX)

XXXX [];YYYY [];ZZZZ []; u t-t0 G (u*A); XXXX [XXXX;G(1,:)]; YYYY [YYYY;G(2,:)];ZZZZ [ZZZZ;G(3,:)];

159

Rotation algbrique de la base

Lexponentielle matricielle rclame linstruction que chaque coefcient....

; sinon cest une exponentielle appli-

Lquation diffrentielle du second degr y = 100y se rsout grce la matrice compagnon comme dans la thorie.
A [0 1;-100 0] yprime f(t,y) yprime A*y y0 [0;1];t0 -1;t -1:.01:1; zz (y0,t0,t,f); z zz(2,:); (t,z)

()

160

La sinusode de pulsation 10 qui rsoud lquation y = 100y avec la condition initiale voulue
On peut vrier la valeur de lapproximation quand on connat la solution thorique :
erreur

(z- (10*(t+1)))

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.

La machine peut donner une rsolution formelle ; on nest pas oblig de xer les conditions initiales.
([y+100*y,y(0) a,y(0) b],y)
Rponse du logiciel [a*cos(10*x)+(b*sin(10*x))/10]

renvoie

161

Mais on atteint vite les limites du calcul symbolique : linstruction suivante choue.

([y+y^2,y(0) a,y(0) b],y)

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
ba N ,

quand h est sufsamment petit . On choisit ici h = x de subdivisions. Cela se traduit par
Eu(f,N,a,b,uo): {

avec N un nombre arbitrairement

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: ([y f(y,x),y(0) uo],y)[0]:; / / o n
avoir

utilise

dsolve

pour

Cnum:

(polygone_ouvert(S),
polygone de la // solution on trace attendue les deux

la

solution

exacte

+line_width_2):; ):;

//

on

construit

notre

Cexact:

((sexact,x ab), +
graphes .

//

on

construit

le

graphe

Cnum,Cexact; }:;

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 :

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.

f (x) = k f (x) (1)

On sintresse aux fonctions f drivables sur R satisfaisant la condition

pour tout x R, avec k un rel arbitrairement x. 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 sufsamment petit et pour tout rel a, f (a) Montrez alors que f (a + h) (1 + kh) f (a). f (a + h) f (a) h


Pour obtenir ce trac, nous allons choisir un rel k, un segment [a; b], nous allons xer 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 dnit un point dont on connat les coordonnes avec la commande :

163


A: B: C:

(1,2); (3,-1); (4,5); (liste

On relie ces points par des segments de droite grce la commande de points) :
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 vriant : 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 rchir au moyen dobtenir les images par f de chacune des extrmits des segments de la subdivision. g (x+0,25)g (x) Il suft 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);
liste une X Y // // suite vaut vaut tant on
3 1

de

points

vide

au

dpart

que

s crit le

tantque de

en

XCAS (X,Y) notre

rajoute

point

coordonnes

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 coefcient directeur, des bornes de lintervalle de dnition, 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 coefcients quelconques quon donnera lordinateur. On cre ainsi une sorte de fonction de plusieurs variables.

164

Notons donc h le pas, m le coefcient directeur, [a ; b] lintervalle de dnition 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 procdure // on prcise quels sont les variables de

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 / / on 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


liste

vide

au

dpart

coordonnes

(X,Y)

notre

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)

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)...

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 suft 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



}:; :;

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)),x 0100)
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

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

renvoie

ode(y(t) (y(t))^2,y(t)); (%)

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.


F(p) =
+

Le logiciel Maxima donne la transforme de Laplace F(p) de la fonction f (x) conformment la formule f (x)e px d x
0

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 coefcient constant : y = a y + ch(ax) avec y(0) = 1.
F(p):= F(p);

(y(x),x)-a*y(x),x,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 coefcients 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.
0

La fonction Arctan est une primitive de F , on obtient donc /2 :


I:

(Fprime(p),p,

,0);


g(x): G(p): G(p) F(p): F(p)

Le logiciel XCAS a un comportement similaire Maxima. La transforme inverse sappelle au lieu de .

(a*x) (g(x),x,p)
(G(p),p,x) ( (f(x),x),x,p)

Il ne connat pas les relations entre transforme et drive, mais il peut rsoudre aussi lquation diffrentielle :
g(p): y(x): y(x)

(a*x),x,p) ((g(p)+1)/(p-a),p,x)

Lintgrale est calcule de la mme faon ; attention la dernire ligne : la dnition dune constante et la notation de linni 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 gure 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.

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 suft de rentrer lexpression de un en fonction du terme prcdent :

n
}:;

u(n,a,b,uo): { 0 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 xer a,b et u0 hors de la procdure et dnir u de manire plus standard ainsi :

n
et alors :

u(n): { 0 uo; a*u(n-1)+b }:;

a: 0.7 b: 1 uo: 1 u(100);

On a limpression davoir de srieux candidats pour la valeur de la limite. Pour conrmer 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

S,k; S: ; / /

AffSuite(n,a,b,uo): {
S est vide au dpart : il n y a pas encore de points

(point_carre+ ); k de 0 n 1 S: S, (k,u(k,a,b,uo));

//

pour

l esthtique

//

on

rajoute

le

point

de

coordonnes

(k ,u(

k) )

notre

liste

On afche les valeurs de la suite ainsi que la limite prsume issue de notre calcul :
AffSuite(20,-.5,1,1),

(0.66666667,x 020,

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

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 efcace 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

le

point

de

coordonnes

( k , u_k )

notre

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 afche 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+1 x,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 Vrions :

p,c; p: (a*x+b x)[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


}:;

expu(n,a,b,uo): {

Par exemple, toujours avec a = 0, 7, b = 1 et u0 = 1 :


expu(n,7/10,1,1)

177


Rponse du logiciel

7 n 10 10 + 3 3

Comparons maintenant les graphes :


AffSuite(20,7/10,1,1),

(expu(x,7/10,1,1),x 020,

Et voil... Nous pouvons mme nous payer le luxe de vrier que expu vrie 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

(a )n

b a1

) b

Oups...

( ())

//

simplifie

le

rsultat

prcdent

Rponse du logiciel 0

178

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); (expu(n,a,b,uo),n,+

//

0<a<1

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.

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

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 dnie laide dune fonction : Soient a et b deux rels strictement positifs tels que a > b et f la fonction dnie sur [a ; a] par f (x) = b 1 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 = a 2 . a 2 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 vrie. 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 dnir 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) M: (t,f(t)):;

(t a):; <

Pour dnir 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 dnir une droite de multiples faons (par une quation, deux points, comme intersection de deux plans, une reprsentation paramtrique...). Nous la dnirons ici par lquation classique y = f (x) (x xM ) + f (xM ) :
fp: d:

(f):; (y fp( (M))*(x-

(M))+

(M)):;

180

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 dnir le point F et la droite D :


F: D:

((a^2-b^2),0):; (x a^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 afxes 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


Rponse du logiciel

t 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 difcults 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.

Pour observer ce phnomne en gomtrie dynamique, il suft douvrir une fentre de gomtrie en tapant puis en dnissant 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

Nous voici donc en mesure de tracer nimporte quelle tangente une ellipse laide dune querre puisquil suft 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 justis compte tenu des limitations des logiciels promus ofciellement : le tableur et les logiciels de gomtrie dynamique, par essence, ne permettent

183

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 injusti 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. Enn, 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 scientiques (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 . Ce calcul est aussi appel algbre de Boole. Il nest pas question de dvelopper ni de simplier 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 (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. Vrions dabord laxiome du tiers exclu. On suppose que le prdicat A na pas t utilis plus avant dans la session Yacas.

(A

A)

Cest toujours vrai ! La machine connat aussi laxiome de non-contradiction :


(A

A)

est toujours faux.

Vrions 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 ches du clavier. Nous allons essayer de prouver lquivalence de deux prdicats P et Q.



(P > 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 dnition :
P: Q:

(A B) A B

En rexcutant les tests logiques,

(P > Q) (Q > P)

les deux rponses True; nous afrment la tautologie recherche : non (A et B) non A ou non B.

Vrions maintenant que la double ngation est bien lidentit, cest--dire que la ngation est une involution. On efface dabord Q qui sert rednir P :
Q

(Q)
Q

Q P:

On vrie avec le test enjoliv :

( (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.

(A); (B) P: (B A) Q: A B ( (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. Rednissons les prdicats P et Q pour rutiliser la procdure de test.

186

P: Q:

(x > y) x y ( (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 gal : pour Yacas.

signie infrieur ou

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 efcacement 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 coefcients , et .

Il suft 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 afne (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 afne 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 x2 x3 y1 y2 y3 z1 z2 = 0 z3

Il suft de remarquer que


x1 x2 x3 y1 y2 y3 z1 z3 x1 + y 1 + z1 x3 + y 3 + z3 y1 y2 y3 z1 z3 0 y1 y3 y2 y3 y3 z1 z3 z2 z3 = (y 1 y 3 )(z2 z3 ) (y 2 y 3 )(z1 z3 ) z3

z2 = x2 + y 2 + z2

z2 = 0 1

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);

//

donne

la

1 re

coordonne

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"); ;}:;

barycentrique

normalise

Alors :
align(

(1+

),

(2+2*

),

(3+3*

))

renvoie :
Rponse du logiciel les points sont aligns

190

Rappelons ce thorme

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 afne (A,B,C) et mettre en vidence lappartenance des points aux droites
A: B: C: K: J: I: [1,0,0]:; [0,1,0]:; [0,0,1]:; A+k*B:; j*A+C:; 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 xJ xK yI yJ yK zI zJ = 0 zK (1)

Exprimons alors x en fonction des autres coefcients


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: (x)

On utilise cette fois-ci lgalit (1)

((-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 !


y C M_6 M_3 6 7

Le 5 aot 2007, nous sommes tombs sur la gure suivante parue dans le journal Le Monde

c T O M_4

1 M_5 A M_2 M_1 B x 0

-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: x: y: O: c: a: A: T:

(05); (-33); (-15); (x,y); / / u n p o i n t O v a r i a b l e (O,R); / / l e c e r c l e c a u s s i (0 5,); (-a,0);B: (a,0); ( (A,B,C), +line_width_2)
triangle bleu ct variable

//

un

beau

192

M_1: M_3: M_5:

(c,T)[0];M_2: (c,T)[1]; (c,T)[2];M_4: (c,T)[3]; (c,T)[4];M_6: (c,T)[5];

//

on

construit

les

points

Il ne reste plus qu tester


l1: l2:

(C,M_6)+ (A,M_2)+ (B,M_4); (C,M_3)+ (A,M_5)+ (B,M_1);

Cela semble concluant... Il ne reste plus qu le dmontrer. Il suft 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 gure ?

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 gure 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

o X

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 1

c1:

point .

(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] (C,cc)[0]

et I, le point de contact entre (C) et :


I:

Mais connatre ces deux points ne suft 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: K:

([( (k1)-a)^2+( (k1))^2 b^2,( (I))^2 b^2],[a,b]); ( ( (S[1][0],0),S[1][1]), );

(I)-a)^2+(

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; cs:
// une liste de points de contact qui contient dj

;cs:

k1

cs,c1;

//

liste

des

cercles

195

liste

os: ;os: os,o1; / / css: ;css: css,

des

centres

(y 0),c1);

//

liste

des

cercles

(j:

symtriques

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],x xx); / / c e c i p e r m e t d
obtenir l ordonne ( O _ j 1 // on K_j ) car on va utiliser nouveau solve de oj sachant que ce point appartient la droite

hj

(x);

re v i d e

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 r j = 2(j +1) comme nous lafrme 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) ,yy eqj],[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, ( (y 0), (os[j], (os[j],ks[j])));
// son symtrique

(cs,css)
}:;

};

//

on

trace

les

deux

sries

de

cercles

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 proterons de lexistence sur XCAS des commandes (courbe) qui renvoie lcriture paramtrique complexe dune courbe et (affixe,paramtre). Par exemple :

( ( ( (x+iy),r)))
algbrique

//

evalc

renvoie

la

forme

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

. l inversion : attention

(courbe_parametrique(
on affiche g et son

dont

(paramG),t -500500,tstep 0.5),g);


l inversion .

il

faut

extraire

l affixe .

//

image

par

}:;

On ouvre une fentre de gomtrie avec On dnit le ple :


C:

et

(-5)

On dnit les images des bords du tube :


inv_courbe(C,10, inv_courbe(C,10, (x -1)); (x 1));

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++) { g: inv_courbe(C,10, ( L: L,g; }:; L

; (j: -n;

(0,2*j),1));

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 an 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 sufsant 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 uide parfait comme celui dun point sur une hypersurface de dimension innie. 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 simplie, 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 .

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 coefcient 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),k 110)


Rponse du logiciel
0.3329912894,0.3333329986,0.333333333,0.3333333333,0.3333333333

(u(2.5,0.2,10* k),k 15)


Rponse du logiciel
0.6,0.6,0.6,0.6,0.6

(u(3.5,0.2,10* k),k 15)


200

Rponse du logiciel
0.8683116395,0.8284245987,0.8749972464,0.8269407066,0.8749972636

(u(3.71,0.2,10* k),k 15)


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 efcace. Nous allons donc utiliser la commande (f(x),uo,n) qui donne la reprsentation classique des suites dnies par une relation un+1 = f (un )a :

(1.6*x*(1-x),x

0.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
particulires - Cours de Maths . Paris: Ellipses, 2002

point de f

fixe

non

nul

de

a Pour une tude originale de ces suites, on pourra se rfrer R OUQUS , Jean-Philippe/D OMINGUEZ , Sophie Leons

201


fp(x1)
x1


// on vrifie

si le point fixe // on est attractif uo ou rpulsif ou moins proche de

(f(x),x1+0.0000001,2500)

choisit

plus

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

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 xe 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.

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 pas le pas entre deux valeurs de R

1/N ,

il

aura

res: [0tmp];
// i l y aura 20 points par ligne car on

R *N fait

points

tracs

varier

de

100

120

ligne: [020]; (r: 0;r<R;r+ 1/N){ tmp: 0.2;


//

calcul

de

u100

(k: 0;k 100;k++){ < tmp: r*tmp*(1-tmp);


calcul des 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

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 naux 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.

Pour nous simplier 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; , . Nous supposerons que a et b ne j 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+E 0)


Rponse du logiciel

(A)(x)2 (2xC)E 2D

a c e En posant = 2d , = d et = 2d , est donc la courbe dquation y = x 2 + x + dans , avec = 0 : O; j

(a*x^2+b*x+c)
Rponse du logiciel

a x + 2ba

4ac((b)2 ) 4a

On obtient donc quil sagit de la parabole de sommet S 2 ; Si d = 0. Alors admet pour quation :

42 4

(x^2+2*C/A*x+E/A)
Rponse du logiciel

x+

2C 2 + 2A

4E A

2C 2 A 4

x+ Deux cas doivent encore tre distingus :

c a

c 2 ea a2

c 2 ea 2 < 0, alors = c ea
2

0, alors est la runion de deux droites verticales . ab = 0

206

On obtient comme quation quivalente puisque a et b sont non nuls :

(A*x^2+2*C*x)+

( (B*y^2+2*D*y,y

x))+E


Rponse du logiciel

A x + 2C 2A

2 2 2 (2C) + B x + 2D (2D) + E 4A 2B 4B

c j Soit le point de coordonnes a ; d dans O; , . b 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. Posons k = ca d + e. b
2 2

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 x2 y 2 + =1 2 2 dans ; , ; j

k et = a

k on obtient que b

Si k = 0, alors on peut poser m 2 = a et a pour quation (y mx)(y + mx) = 0 dans b ; , . Ainsi est la runion de deux droites ; j Si k = 0, en posant =
k a

et =

k b

on obtient que la courbe a pour quation

x2 y 2 = 1 2 2 dans ; , . j Finalement :

ax 2 +by 2 +2cx +2d y +e = 0

a b

ab = 0 ab > 0 ab < 0

207

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.

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 dans un repre O; , du plan. On supposera que (a, b, c) = (0, 0, 0). j


Posons V = x y

,A= a b


b c et L = d c . Alors lquation de scrit
t

VAV + t LV + k = 0

Avec XCAS,

(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

a b

b c

On sait quil existe une matrice de rotation P SO2 (R) telle que :
t

PAP =

=D

u v Soit , la base orthonormale de R2 telle que P soit la matrice de pasage de , u v , . Soit V tel que V = PV , alors dans le repre O; , , a pour quation : u v j
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



si det(A) = 0, est du type parabole ; si det(A) > 0, est du type ellipse ; si det(A) < 0, est du type hyperbole.


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) (vecteur) qui norme un vecteur et on (M,n) :

On normalise cette matrice en utilisant extrait la colonne n de la matrice M avec


u: v: P:

( (Q,0)); ( (Q,1)); ( (u), (A)

(v))

On obtient la matrice diagonale :


D:

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 :

(
cest--dire :

(V)*D*V+

(L)*R*V

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...

(
donne successivement :

(x^2+6*x*y+y^2+4x))

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 + 1 = 0 2

et mme une reprsentation paramtrique que nous ne commenterons pas ici.

Pour obtenir le trac, on tape :

(
210

(x^2+6*x*y+y^2+4*x),gray)

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 vrier que lellipse (E) est globalement invariante par reexion daxe O; , O; et par symtrie par rapport O. Nous pouvons donc nous restreindre tudier j lensemble (E ) des points de (E) dabscisse et dordonne positives. (E ) est la courbe reprsentative de la fonction f: R+ x

R b
XCAS

x 1 a2
que a est positif .

(a>0); / / p o u r e x p l i q u e r f: x- b*(1-x^2/a^2) > (


(f(x),x))

Cette fonction est dnie et continue sur [0 ; a] et drivable sur [0 ; a[.

Rponse du logiciel
(a)2 ((x)2 ) )bx (a)3 (a(x)2 )

On obtient f (x) =

bx a a2 x2

pour tout x [ ; a[.

211

fp: (f); (fp(x),x,a,-1) / / 1 i n d i q u e


x<a

la

direction

de

la

limite

On a lim f (x) = , donc (E ) admet une demi-tangente verticale au point dabscisse a. xa


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),x 02):; G1: ( (0),G):; G2: ( (x 0),G):; G3: ( (y 0),G):; (G, + ), (G1, + (G2, + ), (G3, )

),

ce qui donne :

tude analytique de lellipse

212

On peut visionner linuence des coefcient 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),x 0a):; G1: ( (0),G):; G2: ( (x 0),G):; G3: ( (y 0),G):; (G, + ), (G2, +

(G1, + ), ), (G3, )

x2 a2

b2 = 1
R b
x2 a1

y2

On effectue la mme tude avec g :

R+ x

(a>0):; F: x- b*(x^2/a^2-1) > a: 2:; b: 1:; H: (F(x),x 25):; H1: ( (0),H):; H2: ( (x 0),H):; H3: ( (y 0),H):; (H, + ), (H1, + (H2, + ), (H3, )
ce qui donne :

),

tude analytique de lhyperbole

213

F: M:


(0,0); (x,y):; ((-5) (0 2)

MF = eMH

Ouvrons une fentre de gomtrie de coordonnes (x ; y).

. On cre un point xe F et un point quelconque

On cre deux lments variables d, qui caractrise la directrice, et E, lexcentricit.


d: E: 5)

On cre le projet de M sur la directrice :


H:

(x d),M)

On trace le lieu du point M vriant MF = eMH avec la courbe dquation implicite f (x, y) = 0 et tance AB.

(f(x,y),x,y) qui trace (A,B) qui calcule le carr de la dis)

(
et la directrice :

( (M,F)-E*( (M,H)),x,y), )

(x d),

On visualise alors parfaitement les 3 cas : e < 1, e = 1 et e > 1.

Soit le centre de lellipse. Dans le repre orthonorm ; , , avec un vecteur unitaire j


x de la droite vectorielle associe au grand axe, lellipse admet pour quation a 2 + b 2 = 1. Les rsultats suivants sobtiennent classiquement avec les notations usuelles dans le cas a > b:
2

y2

c = a2 b2 F(c ; 0) D: x =
a2 c

e=

c a
2

F (c ; 0) D : x =a c

On peut demander XCAS de faire le travail :


214

foyer_ellipse(a,b): { c,E; (a b){ ("inversez a et b")} <

{ 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.

FM FT = 0

Observons ce rsultat en ouvrant une fentre de gomtrie aprs avoir tap On dnit la conique et on la trace :
a: b: E:

(15) (1.5) (x^2/a^2+y^2/b^2 (E, )

1):;

215


en faisant varier

On dnit maintenant un point quelconque de E avec la fonction un rel t entre 0 et 2 :


t: M:

(0 2* ) (E,t) (M, +point_width_5)

On dnit un foyer et une directrice et le segment [M, F] :


F: D:

((a^2-b^2),0) ( (x a^2/(a^2-b^2)), ) ( (M,F), ) (point,droite) :


)

On dnit la perpendiculaire (MF) en M avec


d:

(F,

(M,F)),

et lintersection de D et d avec
T:

(courbe1,courbe2) :

(d,D) (T, +point_width_5) ( (T,M), + ) (droite) :

On demande lquation de la droite (TM) avec

(T,M))

Puis on se souvient du rsultat vu page 212 qui dit que la tangente en M(x0 ; y 0 ) lellipse a yy pour quation xx20 + b 20 = 1. On obtient donc que : a y = 1 xx0 b 2 a2 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 conrme 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

Construction de la tangente une ellipse


C: M: F: D: d: T:

Effectuons la preuve dans le cas gnral grce aux capacits formelles de XCAS :

(x^2/a^2+y^2/b^2 1):; (a* (t),b* (t)):; / / d f i n i t u n p o i n t d e C ((a^2-b^2),0):; (x a^2/(a^2-b^2)):; (y (b/ (M))*(1-x* (M)/a)):; / /
yyo / b 1

en

effet

xxo / a+

(d,D):;

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 1 x 2 admet 2 pour foyer F(0 ; 1 ) et une directrice dquation y = 1 . 4 4 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),

9. Le lieu ressemble une parabole... Vriez 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

Construction la rgle et au compas dune


parabole

Compltons la gure 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),

4. Tracer en jaune pointill (jaune+dash_line) la bissectrice FMmm : que constatez-vous ?


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 reexion ?


Rayon incident Normale au point dincidence Rayon rchi

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 rchi. 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 rchis 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 ?

Nous ne vous apprendrons pas lorigine du mot coniques. Nous allons nous contenter de lillustrer.

220


K:

x = t
4

On construit un cne de centre lorigine, daxe (Oz) et de demi-angle au sommet

([0,0,0],[0,0,1], /6,

0.02),

On construit le plan dquation x = t avec t variant entre 10 et 10 :


t: Q:

((-10) 10) ( (x t), +

On demande de tracer lintersection du cne et du plan :

( (Q,K),

Intersection dun cne avec un plan dquation x =t tudions lintersection de K et du plan x = t . On utilise qui renvoie le rel ottant 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


1 1 y y


Rponse du logiciel

(y)2 + 1 (y)2 + 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 conrme. 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),x

1],[x,y,z])[0][2]

Il ne nous reste plus qu utiliser

:
1],[x,y,z])[0][2])^2,y,z)

(z^2 (

([

(K),x

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: t: k: P:

([0,0,0],[0,0,1], /6, ((-10) 10) ((-2) 2) (x t+k*z, + ) ( (K,P), +

0.01)

En faisant varier k, on visualise le passage de lhyperbole lellipse puis la parabole :

222

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 coefcients de Fourier :

cn =

1 T

a+T a

f (t )e

2int/T

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)


Alors :

XCAS : Fonction x x 2

(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 suft 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 coefcients 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 vrie 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, vrions le lemme de Riemann-Lebesgue pour rigoler :

Lemme de Riemann-Lebesgue Soit f L 1 [a ; a + T]. Alors


a+T n+ a

lim

f (t )e

2int/T

dt = 0

cn: (x^2,x,2*Pi,n,-Pi); ( (cn),n + )

Pour la dmonstration, cest un autre problme... Vrions maintenant graphiquement la convergence de la srie de Fourier :
f4: t- (x^2,x,2*Pi,0,-Pi)+( > n*t),n 14)

(x^2,x,2*Pi,n,-Pi)* (

cre la fonction t a0 +

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 suft de rentrer :

227

[red,

([t^2,f4(t)],t -PiPi,

])

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 k=0

(ak cos(kt ) + b k sin(kt ))

converge vers f , ou ventuellement sa rgulariseb et dont lnergie est E (f ) = 1 T


a+T a

f 2 (t ) dt

On utilise alors la formule de Bessel-Parseval et on obtient classiquement


2 E ( f ) = a0 + + n=1 2 2 an + bn

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


E: (1/(2* ))*( (t^4,t - (E)

));

nous dit que E ( f ) = 4/5


2 Notons E n ( f ) = a0 + n k=1

n 16 4 + 2 9 k=1 k 4 Nous voudrions savoir partir de quelle valeur de n nous obtenons E n ( f ) = p% de E ( f ) :

2 2 ak + bk

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

Vrions :
Energie: n- ^4/9+(8/k^4,k 1n); > 100* (Energie(4))/ (E); 100* (Energie(5))/ (E)

ce qui conrme 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,0,(-.5<t)

(t 0),-1,t <

0,0,(0<t)

(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

Reprsentons dabord graphiquement des fonctions dnies 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],x LI[k],


" morceaux " de courbes

));

//

on

cre

une

liste

de

} }

Par exemple :
plot_mor([-1/20,01/2],[-1,1],2,

donne :


Pour le calcul de a0 :

XCAS : Trac dune fonction dnie par morceaux

four_ao(LI,LV,m,T): { integ,k; integ: 0; (k: 0;k<m;k++){ integ: integ+(1/T)*( } (integ) }

(LV[k],x

LI[k]));

Dans le cas qui nous occupe :


four_ao([-1/20,01/2],[-1,1],2,1)

On calcule de mme les an :

230

four_an(LI,LV,m,T,p): { integ,k; integ: 0; (k: 1;k<m;k++){ integ: integ+(2/T)*( } (integ) }

(LV[k]* (p*2*Pi*x/T),x

LI[k]));

et les b n :
four_bn(LI,LV,m,T,p): { integ,k; integ: 0; (k: 0;k<m;k++){ integ: integ+(2/T)*( } (integ) }

(LV[k]* (p*2*Pi*x/T),x

LI[k]));

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 modier 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]* } (integ) }

(p*2*Pi*x/T),x

LI[k]));

Alors :
four_bn_general([-1/20,01/2],[-1,1],2,1)

231

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 n=1

(an cos(2nt /T) + b n sin(2nt /T)) :

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),k 1N))


}

s_fourier(LI,LV,m,T,N): {

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): { (s_fourier(LI,LV,m,T,N),x xminxmax, B: plot_mor(LI,LV,m,red):; A,B }

A,B; A:

):;

et on obtient pour N = 8 :

232

XCAS : phnomne de Gibbs avec N=8

qui met en vidence de petites crtes plus grandes prs des points de discontinuit. Vrions 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.

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 x, seuls certains intervalles sont autoriss, chaque note apparat au plus une fois, on retombe sur la note initiale la n. 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 n 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.


y x

y intervalle(x)


y x s

j 2: (x,2) y(:,j) (y(:,j)-x(:,j-1),12)

La fonction gamme donne les gammes associes aux suites dintervalles.


y gamme(x)

(x,2) j 2:s

((x(:,[1:j]),c),12)
y(:,j)

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 !

z iteration(y,k,taille,w) W (w,1) s (y,1) ; z (s*W,k) ; i s:-1:1 , j W:-1:1,


yy y(i,k) ; Z (yy+w(j),12) ; l W*(i-1)+j z(l,[1:k]) y(i,[1:k]) ; z(l,k+1) Z ;
// // // // // limination chaque et il note ne de mauvaises seule y avoir lignes fois deux intervalles successifs identiques . : on ne doit rencontrer

qu u n e pas

doit

k 1 Y 0 ; ZZ Z-2*yy+Y ; or([ (ZZ,12) ; ; ;

0,Z

Y y(i,k-1) ;

; Z)])

0, or(y(i,[1:k])

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.


y x s

y pcc(x)

(x,2) j 1:s-1 k j+1 y(:,j) x(:,k)

y(:,s) x(:,1)

On marque les lignes redondantes et on les limine la n.

236

y [l,c]

nettoie(x) (x)

marque [] i 1:l-1 j i+1:l z x(i,:) k 1:c-1 z pcc(z) z x(j,:)

marque [marque,j] ;

y x y(marque,:) []

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 :

z cherche(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 z w ; i 1:taille-1 , z iteration(z,i,taille,w) ; ;


//

Il

faut

retomber

sur

do

(z,1) ; s:-1:1 , or(w z(i,)) ;


viter deux

z(i,:) [] ;
identiques

aux

;
bouts de la gamme

//

(z,1) ; i s:-1:1 , (z(i,1)+z(i,taille),12)

Pour

intervalles

z(i,:) [] ;

237

// on //


;
limine les permutations circulaires

z gamme(nettoie(intervalle(z))) s
// // // si w [6;3] et taille 2 ou 3

affichage

du

rsultat

(z,1)

s 1 pluriel s ; pluriel ; ; > chaine Il y a + (s)+ gamme+pluriel+ solution+pluriel (%io(2),chaine)

Le logiciel Scilab permet de fabriquer des sons sous forme de chiers 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.)
//


pour

attention

ne

doit

pas

tre

un

tableau

u orgue(t,frequence,rotationRoues,profondeur,nuance) omega (1+profondeur * (t*rotationRoues *2*%pi))*2*%pi*frequence


une nergie indpendante de la frquence

//

amplitude nuance/(1+frequence/441) u amplitude * (t*omega) ;

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.

Z concret(v,duree,frequence,rotationRoues,profondeur,nuance) intervalle soundsec(duree,44100) ; Z [] k intervalle, Z [Z v(k,duree,frequence,rotationRoues,profondeur,nuance)];

Lcriture des chantillons numriques dans un chier sonore se fait automatiquement. Linstruction y=[u,v] ; wavwrite(y,44100,16,nom) donnerait des rsultats bizarres.


238

y sortie(u,v,nom)


Il reste craser les extrmits pour diminuer les dgts du jeu en boucle.

y [u;v] ; y nom

(nom,y,44100)

y enveloppe(t,duree,frequence,rotationRoues,profondeur,nuance) or([t 0 t duree]) y 0 ; yy orgue(t-duree/2,frequence,rotationRoues,profondeur,nuance) ; y yy* (100*t)* (100*(duree-t));

Puis utiliser les fonctions prcdentes en initialisant les variables.


rotationRoues 7 / / l e s r o u e s t o u r n e n t . h e r t z profondeur .003 frequence 441 / / 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 . z concret(enveloppe,2,frequence,rotationRoues,profondeur,nuance); nom orgueA3.wav nom orgueBIS.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 coefcient 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. Protons-en pour construire des fonctions logarithme et exponentielle musicales.

y lm(x,octave) y (x)*12/ (octave) y em(x,octave) y (x* (octave)/12)


Les chiers-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 chiers-sons, il suft dexcuter dans Scilab une commande shell :

(mkdir

Sons)

Lautomate est prt tre crit ; le lecteur pourra aisment modier 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

y sequence(duree,rotationRoues,profondeur,nuance,octave) n -2:8;N (n) gamme [A] suite [] k N, suite [suite gamme+k];

k suite, nom orgue+ (k)+.wav ; i vectorfind(suite,k,c)-5 / / 5 e s t l a p l a c e d u l a 3 . frequence 441*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 z concret(enveloppe,duree,frequence,rotationRoues,profondeur,nuance) ; sortie(z,z,Sons/+nom) ;


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.
octave 2.01 rotationRoues 7 / / profondeur .003 nuance .999 / / f f f f duree 1
les roues tournent

y suite

hertz

le

maximum

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 afche 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) ; u I; d 2*I; t 3*I; q 4*I; c 5*I; s 6*I; e 7*I; h 8*I; n 9*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) M m;U u;D d;T t;Q q;C c;S s;E e;H h;N n;

Un infme bricolage pour numroter les matrices extraites ne devrait faire peur personne.


(k-kk)/3 ; zz

z numero(k) kk (k,3) ; K

(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.


Z Y

Z annulation(Y,M)

k 1:9 l 1:9

M(k,l)~ 0 Z(k,l) M(k,l) Z(k,:) 0;Z(:,l) 0;Z(k,l) M(k,l); K numero(k);L numero(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 vrier les nombres qui ne sont utiliss quune fois dans chaque ligne ou colonne.


// // s il on

M attribution(m,u,d,t,q,c,s,e,h,n)
a qu u n e la case rponse par ligne ou par colonne de M c o r r e s p o n d a n t e

ny

remplit

M m liste [u,d,t,q,c,s,e,h,n] compteur 1


// boucle1

y liste Y (y) colonne (Y,r) ; ligne


// boucle2

(Y,c)
la colonne

si

j 1:9
une seule rponse sur

//

// boucle3

colonne(j)
// boucle4

compteur

k 1:9

// boucle5

M(k,j) 0 M(k,j) Y(k,j)

// f i n

de

boucle5

242

// fin

de

boucle4

// fin

de

boucle3

// fin

de

boucle2

// boucle2bis

si

j 1:9
une seule rponse sur la ligne

//

// boucle3bis

ligne(j)
// boucle4bis

compteur

k 1:9

// boucle5bis

// fin

M(j,k) 0 M(j,k) Y(j,k)


de boucle5bis

// fin

de

boucle4bis

// fin

de

boucle3bis

// fin

de

boucle2bis

compteur compteur+1
de boucle1

// fin

Si tous les nombres sauf un ont t limins pour un emplacement donn, lemplacement peut tre attribu.


// // // si un compte on

M ATTRIBUTION(m,u,d,t,q,c,s,e,h,n)
seul tenu chiffre de la est apparat les possibilits toutes case

remplit

de M c o r r e s p o n d a n t e

M m liste [u,d,t,q,c,s,e,h,n]
// boucleA

k 1:9

// boucleB

l 1:9 verticale compteur 1

(9,1)

// boucleC

y liste Y (y) verticale(compteur) Y(k,l)

243

// f i n // un

compteur compteur+1
de boucleC

test

(verticale)
chiffre est possible

seul

// boucleCbis

// f i n

test (verticale) M(k,l) test


de boucleCbis

// f in

de

boucleB

// f i n

de

boucleA

Le travail fait par la fonction attribution suivant les lignes et colonnes est fait dans les tableaux extraits par la fonction attripb.


// // s il on

M attrib(m,u,d,t,q,c,s,e,h,n)
a qu u n e la case rponse par matrice 3 par 3 extraite de M c o r r e s p o n d a n t e

ny

remplit

M m liste [u,d,t,q,c,s,e,h,n] compteur 1


// boucle1

(y)
K 0:2

y liste

// boucle2

// boucle3

L 0:2 Z Y(3*K+[1:3],3* L+[1:3]) test (Z)


// si une seule rponse sur la matrice 3 par 3 extraite // boucle4

test
// boucle5

compteur

kk 1:3

// boucle6

ll 1;3 k 3*K+kk ; l 3*L+ll


M(k,l) 0 M(k,l) Y(k,l)
boucle7

// boucle7

// f i n de

244

// fin

de

boucle6

// fin

de

boucle5

// fin

de

boucle4

// fin

de

boucle3

// fin

de

boucle2

compteur compteur+1
de boucle1

// 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)
principale

fonction

[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] y liste Y (y) Z annulation(Y,M) (y+ Z)

MM attribution(M,U,D,T,Q,C,S,E,H,N) y liste Y (y) Z annulation(Y,MM) (y+ Z)

MMM ATTRIBUTION(MM,U,D,T,Q,C,S,E,H,N) y liste Y (y) Z annulation(Y,MMM) (y+ Z)

M attrib(MMM,U,D,T,Q,C,S,E,H,N)

Le nombre ditrations et le drapeau darrt sont initialiss.


stop 0 longueur 0

La boucle ditration utilise les fonctions prcdentes.

245



// une //

stop
tape


0
de travail

[M,U,D,T,Q,C,S,E,H,N] op(m,u,d,t,q,c,s,e,h,n) ;
mesure de l effort

longueur longueur+1 ;
// est ce fini

[M,U,D,T,Q,C,S,E,H,N] stop 1 ;

[m,u,d,t,q,c,s,e,h,n]

[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 afch avec leffort fourni.

(m); (longueur);
Si a bloque avant de trouver une solution, cest quon ne peut pas continuer par limination : il faut xer une valeur arbitraire dans M (de prfrence o la collision est faible). Les instructions suivantes donnent des indications.
collision u+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) ; collision u+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 nis (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 Fn . La transmission altre parfois linformation : ainsi 2 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 efcace mais qui ne concernera que les codes de Hamming. Enn, 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


Fk 2

Nous voudrions crire les 2k vecteurs de Fk sous forme de listes de longueur k. Plusieurs op2 tions 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 xe le nombre de composantes k :
Fdeux(n,k): { L; L: []; (n> 2){ L: ([ (n,2)],L); n: (n,2); } 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 : Fn 2 m N (m) =
n i=1 m i

alors vous vrierez que lapplication : Fn Fn 2 2 (m, m ) N (m + m ) = (m m )

248

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 suft 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 Fk par uM , lendomorphisme canoniquement associ M. 2
Ima: ; (j: 0;j<2^k;j++){ Ima: Ima,M*Fdeux(j,k)%2; }; Ima: [Ima];

construit la liste des images des vecteurs de Fk par uM . Techniquement, on rajoute la s2 quence 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: n:

(M); (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 Fn qui nappartiennent pas I m(uM ). Nous 2 utiliserons la fonction (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) L: L,Fdeux(k,n);

0)

}; 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 Fn : si cest un des 2 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 pour plus de rapidite (=< fait la modication 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) ([[0n]],U)%2

On rajoute une ligne nulle quon remplacera par les vecteurs de I m(uM )
U:

On forme ensuite la premire ligne de notre matrice nale en ajoutant la premire ligne de U celle de Ima
N: [(U[0]+Im[g])(g 02^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])(g 02^k-1) ]]):; h: h+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; bien un mot de code");

250

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 en "+Ima[q]%0); > {q: q+2^k; (v+" doit tre corrig en "+Ima[q]%0);} };

Il reste vrier que le choix du message corrig est justi. 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 :

L,k; k: (M);
L: []; (j: 1;j<2^k;j++){ L: (L,(M*Fdeux(j,k))); } ( (L)); }

PoiMin(M): {

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 Fn . 2 Il sagit en fait pour nous de vrier 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 nale 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) L: L,Fdeux(K,n); }; L: [L]; (j: 0;j (L);j++){ < L[j] <[(L[j]),(L[j])]; }

0)

(L,(x,y)->x[0]<y[0]); U: (L,00); U: ([[0n]],U)%2; N: [(U[0]+Ima[g])(g 02^k-1)]:;


h: 1; (h (2^n-2^k)){ < ( (U[h],N) 0) N: (2,1,[N,[(U[h]+Ima[g])(g 02^k-1) ]]):; h: h+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; bien un mot de code");

252

(q 0) (v+" doit tre corrig en "+Ima[q]%0); > {q: q+2^k; (v+" doit tre 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 inefcace 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 !

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 Fn mais plutt par 2 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 j (X n + 1) qui est nul dans F2 [X]/ donc que m(X) h(X) = n=0 m j X j g (X)h(x) = j j =0 m j X (X n + 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


et on

On transforme ensuite h(X) en la liste des coefcients grce la fonction ajoute autant de zros que ncessaires pour former une liste de longueur n :
L:

(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...

; (j: 0;j<n- (h(x));j++){ H: H, (L,-j)};


H: 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(n (h(x)))]%2) { (m+"est 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 Fn , il suft de 2 rajouter au message reu le k e vecteur de la base canonique de Fn : 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);
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

de la bonne taille.");

254

{ 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 efcace que notre premier algorithme.

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 xant 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 nis 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 (caractristique,longueur,options). Par exemple, avec :
K: (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

gen(t,m): { g,alpha,j,p; K: (2,m,[x,K]);alpha: K(x); p: (poly_min(cyclo(2*j-1,m),alpha),j 1t); (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 suft. 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 dnies implicitement. Problmatique : On va chercher donner une quation dun polygone rgulier de R2 dni normalement laide dun systme dingalits. Pour cela on dnira 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.


Commenons par descendre dune dimension pour poser le problme. La demi-droite de R dnie 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 dnir 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 :


(x, y, z) S :t R, P(x, y, z, t ) = 0

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.

Soit n un entier naturel non nula et k 0 ; n . On fabrique une suite de polynmes de la manire suivante :

P1 (x1 , u) = u x1 X = (x1 , . . . , xn )
Pk+1(x1 , . . . , xk+1 , u) = Pk a1 (X), . . . , ak (X), u (x1 + + xk+1 )
2

ak (X) = xk+1 (x1 + + xk )

Pour se familiariser avec ces polynmes, on peut construire les premiers la main. P2 (x, y, u) = P1 a1 (x, y), u (x + y)
2

. Or a1 (x, y) = y(x), donc


2

P2 (x, y, u) = P1 x y, u (x + y)

= u (x + y) x y


a(k,x): x[k+1]*(x[j],j,1,k)

La dnition des polynmes ak ne pose pas trop de problme :

Le problme vient surtout de cette dnition de polynmes qui dpendent dun nombre variable dindtermines et dont la dnition 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 efcace avec un langage impratif comme celui utilis par XCAS. Il faut donc apprendre rchir autrement et voir un programme impratif comme un casier tiroirs dont on peut volont modier 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 :
b a Dans le cas qui nous intresse, n = 3.

a dautres proprits comme par exemple les changements de variables dans les intgrales.

260

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),j 1k),(u-(x[j],j,1,k+1))^2] indeterminees: [ (x[j],j 1k),u]; polytemp: (polytemp,indeterminees,nouveauzarguments);

Au dpart, polytemp vaut Pk (x1 , . . . , xk , u). 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),j 1k),(u-(x[j],j,1,k+1))^2] indeterminees: [ (x[j],j 1k),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


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

yx

Notre problme est de dnir 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 afnes 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 2 2 (ax b) y 2 c y2 0 0 0

c Nous considrerons ici quil sagit du cercle de centre O et de rayon 1.

262

2i 2/n

d2 c

2i 1/n

d3 e
2i 3/n

d1 e
2i 0/n

d3 e
2i 4/n

c d2

d1 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 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 1 1 2 2 3 1 x 2 y 2 0

263

b1
2i 2/n

d2 b2

2i 1/n

d1 e d1
2i 0/n

d3 b3 e
2i 3/n

d2

b 2 e b 1
2i 4/n

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. (egalite)[0] renvoie la partie droite dune galit. Enn, la commande 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

Rponse du logiciel

((x + 1)2 (y)2 ) ((x + 1)2 (y)2 ), 1 (x)2 (y)2


v S = X R2 , b(X)

Vous pourrez prouver pendant vos temps libres quil existe un polynme P tel que 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,z 05, 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

Carr : projection sur (xOy)

(
(p2(b(6),z^2)),x -11,y -11,z 05, 0.1, 0.1, 0.1)

Varit dont la projection est un hexagone

266


Pour obtenir la vue de dessus, on clique sur Menu3-dvue de dessus z=cst :

Hexagone : projection sur (xOy)


http://agreg.dnsalias.org/Textes/590.pdf

Le texte complet du sujet dagrgation se trouve ladresse

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 nies

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 g 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 A t B t = + DA A

F(A, B)

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.

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 coefcients 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.

Les donnes sont stockes dans des chiers. Il faut dabord rcuprer les matrices qui correspondent aux dix tapes.
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 (./A0,maille,maille)/1e2 (./A1,maille,maille)/1e2 (./A2,maille,maille)/1e2 (./A3,maille,maille)/1e2 (./A4,maille,maille)/1e2 (./A5,maille,maille)/1e2 (./A6,maille,maille)/1e2 (./A7,maille,maille)/1e2 (./A8,maille,maille)/1e2 (./A9,maille,maille)/1e2 (./B0,maille,maille)/1e2 (./B1,maille,maille)/1e2 (./B2,maille,maille)/1e2 (./B3,maille,maille)/1e2 (./B4,maille,maille)/1e2 (./B5,maille,maille)/1e2 (./B6,maille,maille)/1e2 (./B7,maille,maille)/1e2 (./B8,maille,maille)/1e2 (./B9,maille,maille)/1e2 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

270

Les matrices Ai reprsentent les concentrations en produit A la date i . On dnit les coordonnes des noeuds de la grille.
xx 1:S yy xx

La palette des couleurs est rduite pour des vidoprojections en toutes conditions, et pour mettre en valeur leffet de seuil.

("colormap", (32))
r g b h [0;1]; [0;1]; [1;0]; [r g b];

On afche la premire donne, concentration en produit A au dbut.

("colormap",h) (xx,yy,A0)
On afche 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 lm 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

(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 xe.

()
// couleurs

("colormap", (32))
Il ne reste plus qu y placer le lm 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)


lap(A)

Le laplacien discret appliqu une matrice carre A est construit de manire traditionnelle.

D s (A)


DA DB k1 k2 k3 k4 1 2 .1 .02 .03 .04

tt s(1) t tt-1 TT s(2) T TT-1 j (t,t) z (t,1) kk [z,0;j,z] m 2* (tt,tt)-kk-kk J (T,T) Z (T,1) KK [Z,0;J,Z] M 2* (TT,TT)-KK-KK D m*A+A*M

Il faut dnir les donnes qui interviennent dans lquation dvolution.

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

Les conditions initiales sont dabord initialises par une rpartition spatiale alatoire.
t 0:.01:.13 ; t0 0 ; maille 10 y0 0.00001* (2*maille,maille) ;

La premire photographie de la situation est calcule. Les dimensions S et T sont dnies par commodit.
y T S

(y0,t0,t, (y,2) (y,1)/2

Les donnes initiales sont enregistres dans des chiers.


A0 y0(1:S,:) B0 y0(S+1:2*S,:) (./A0,A0) (./B0,B0)

Les donnes de la premire tape sont enregistres leur tour.


Y1 y(:,T-S+1:T) A1 Y1(1:S,:) B1 Y1(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, Y2 y2(:,T-S+1:T) A2 Y2(1:S,:) B2 Y2(S+1:2*S,:) (./A2,A2) (./B2,B2) y3 (Y2,t0,t, Y3 y3(:,T-S+1:T) A3 Y3(1:S,:) B3 Y3(S+1:2*S,:) (./A3,A3) (./B3,B3) y4 (Y3,t0,t, Y4 y4(:,T-S+1:T) A4 Y4(1:S,:) B4 Y4(S+1:2*S,:) (./A4,A4)

274

(./B4,B4)

y5 (Y4,t0,t, Y5 y5(:,T-S+1:T) A5 Y5(1:S,:) B5 Y5(S+1:2*S,:) (./A5,A5) (./B5,B5) y6 (Y5,t0,t, Y6 y6(:,T-S+1:T) A6 Y6(1:S,:) B6 Y6(S+1:2*S,:) (./A6,A6) (./B6,B6) y7 (Y6,t0,t, Y7 y7(:,T-S+1:T) A7 Y7(1:S,:) B7 Y7(S+1:2*S,:) (./A7,A7) (./B7,B7) y8 (Y7,t0,t, Y8 y8(:,T-S+1:T) A8 Y8(1:S,:) B8 Y8(S+1:2*S,:) (./A8,A8) (./B8,B8) y9 (Y8,t0,t, Y9 y9(:,T-S+1:T) A9 Y9(1:S,:) B9 Y9(S+1:2*S,:) (./A9,A9) (./B9,B9)

Les chiers sont prts pour lafchage (voir section 11.2). Si des chiers 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

La concentration en produit B la n de lanimation sur le rectangle

Le recollement des artes du rectangle affecte seulement la dnition du laplacien.

D s (A)

lap(A)

tt s(1) t tt-1 TT s(2) T TT-1 j (t,t) z (t,1) k [z,1;j,z] l 2* (tt,tt)-k-k J (T,T) Z (T,1) K [Z,1;J,Z] L 2* (TT,TT)-K-K D l*A+A*L

Le reste du programme est le mme. Lafchage de la concentration nale B donne des valeurs moins leves.

276

La concentration en produit B la n de lanimation sur le tore

La dnition du laplacien sur un cylindre est intermdiaire entre le cas du rectangle et celui du tore.

D s (A)

lap(A)

tt s(1) t tt-1 TT s(2) T TT-1 j (t,t) z (t,1) k [z,1;j,z] l 2* (tt,tt)-k-k J (T,T) Z (T,1) KK [Z,0;J,Z] M 2* (TT,TT)-KK-KK D l*A+A*M

Les donnes sont modies pour rapprocher les deux coefcients de diffusion.
DA 1 DB 1.00001 k1 .0002

277


k2 .0002 k3 0.0002 k4 .0002

Les intervalles de temps sont agrandis, le maillage est plus n.


t 0:.01:.27 ; t0 0 ; maille 20 ;

Le reste du programme est similaire aux autres cas. Lafchage de la concentration nale B montre une gure nettement diffrente.

La concentration en produit B la n de lanimation sur le cylindre

278

Quatrime partie

ANNEXES


Tableaux comparatifs


Logiciel
Bc Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS GnuPlot

Licence GPL GPL commerciale GPL GPL Scilab GPL GPL GPL

Site internet
http://www.gnu.org/software/bc/manual/bc.html http://maxima.sourceforge.net http://www.mupad.de http://www.octave.org http://pari.math.u-bordeaux.fr/ http://www.scilab.fr http://yacas.sourceforge.net http://www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html http://www.gnuplot.info/

Sites de tlchargement


Logiciel Maxima PARI/Gp Yacas XCAS

Fichier de conguration
/.wxMaxima /.gprc /yacas/yacasinit.ys /.xcasrc

O se trouve le chier de conguration ?


Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS set[1,2] %{1,2%}

Ensemble
[1, 2] {1, 2}

Liste
[1, 2] [1, 2] [1 2] [1,2] [1 2] {1,2} [1,2]

Matrice
matrix([1,2], [3,4]) matrix([[1, 2], [3, 4]]) [1 2;3 4] [1,2 ; 3,4] A=[1 2;3 4] {1,2},{3,4}} [[1,2],[3,4]] matrix(2,2,(j,k)->j+k)

Entrer une liste ou une matrice

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

quation
x=0 x=0 x=0 x=0 x=0 x==0 x=0

lment dune liste


l[2] l[2] l(2) l[2] l(2)

lment dune matrice


m[2, 3] m[2, 3] l(2,1) l[1,2] l(2,1) l[2][1]

Longueur dune liste


length(l) nops(l)

length(l)

l[2]

l[2][1]

size(l)

Manipulation des listes et matrices

Logiciel Bc Maxima MuPAD PARI/Gp Scilab Yacas XCAS

True
0 true true 0 %t True 0

False
1 false false 1 %f False 1

And
&& and and && & MathAnd and &&

Or
|| or or || or MathOr or ||

Not
! not not ! not MathNot !

Equal
== = = == = == Equals ==

Not equal

# <>

<>

!=

Oprateurs boolens

282

Logiciel Bc Maxima MuPAD Octave

Assignement
y=3 y:3; y:= 3; y=3;

Dnition de fonctions
define f(x,y) {return(x*y);} f(x, y):= x*y; f:= proc(x, y) function f(x,y) x*y endfunction begin x*y end_ proc;

PARI/Gp Scilab

y=3 y=3;

f(x,y)=x*y function f(x,y) x*y endfunction

Yacas XCAS

y:=3; y:=3

Function(f,x,y)[x*y;]; f(x,y):={x*y }

Comment rentrer une fonction ?

Logiciel Bc Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

If+then+else
if(test) ...;...; if test then ... else if test then ... else ... if test then ... elif test then ... else ... end_if if (test) ... else ... endif if(test,...,...) if test then, ..., else, ..., end if(test)..else... if(test)...; else ...; si(test)...; sinon ...; si test alors ...; sinon ...; fsi

Test if...then...else

283


Logiciel Bc Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Boucle for
for(i=1;i<=n;n=n+1){x;y;} for i:1 thru n do (x, y); for i from 1 to n do x; y end_for; for j=1:n x;y; endfor for(j=1,n,action) for k=1..n, x,end ForEach(j,1..n)[x;y;] 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 Maxima MuPAD PARI/Gp Yacas XCAS

Afcher texte et rsultat


print("sin(",0, ") =", sin(0))$ print(Unquoted, "sin(".0.")" = sin(0)): print("sin(",0,")=",sin(0)) Echo("sin(",0,")=",MathSin(0)); print("sin("+0+")="+sin(0))

Comment afcher un rsultat avec du texte ?


Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

e
%e E e exp(1) %e Exp(1) e

%pi PI pi Pi %pi Pi, Pi() Pi,pi,PI

i
%i I i I %i I i

+
inf infinity

2
sqrt(2) sqrt(2) sqrt(2) sqrt(2) sqrt(2)

21/3
2(1/3) 2(1/3) 2(1/3) 2(1/3) 2(1/3) 2(1/3) 2(1/3)

Infinity infinity

Sqrt(2), MathSqrt(2) sqrt(2)

284

Les principales constantes mathmatiques

Logiciel Bc Maxima MuPAD Octave PARI/Gp Scilab Yacas

ln
l(x) log(x) ln(x) log(x) log(x) log(x) Ln(x)

Arctan
a(x) atan(x) atan(x) atan(x) atan(x) atan(x) ArcTan(x)

n!

n! n! prod(1:n) n! factorial(n) n!

Les fonctions existantes

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

n mod m
mod(n, m) n mod m mod(n,m) n%m, Mod(n,m) modulo(n,m), pmodulo(n,m) Mod(n,m) n mod m, m%n

Calcul modulaire

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Partie relle
realpart(f(z)) Re(f(z)) real(z)

Forme algbrique dun complexe


rectform(f(z)) rectform(f(z))

real(z) Re(z) Re(z) evalc(z)

Calcul avec les complexes

285

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Somme :
i=1

f (i )

sum(f(i),i,1,n) ,simpsum sum(f(i), i = 1..n)

sum(k=1,n,f(k))

Sum(i,1,n,f(i)) sum(f(k),k,1,n), sum(f(k),k=1..n)

Calcul de sommes

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Limites : lim f (x)


x0

Dveloppements limits et asymptotiques


taylor(f(x), x, 0, 3) series(f(x), x = 0, 4)

limit(f(x), x, 0, minus) limit(f(x), x = 0, Left)

f(x)

Limit(x,0,Left) f(x) limit(f(x),x=0,-1)

Taylor(x,0,4) f(x) series(f(x), x = 0, 4)

Calcul de limites

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Calcul diffrentiel :

d 3 f (x, y) d x3

Intgration :
0

f (x) d x

diff(f(x, y), x, 3) diff(f(x, y), x$3)

integrate(f(x), x, 0, 1) int(f(x), x = 0..1) quad("f",0,pi/2)

deriv(f(x),x) intg(0,1,f) D(x,3) f(x,y) diff(f(x, y), x$3) Integrate(x,0,1) f(x) int(f(x), x = 0..1)

Calcul diffrentiel et intgral

286

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Graphe 2D
plot(x, x, 0, 1)$ plot(acsch(x), x, 0, 1)$

plotfunc(x, acsch(x), x = 0..1):

fplot2d(x,f) Plot2D(x,ArcCos(x),0:1) plot([x,acosh(x)],x=1..2,color=[green,red],legende=["x","Argch"])

Graphe 2D

Logiciel Maxima MuPAD Octave PARI/Gp Scilab Yacas XCAS

Graphe 3D
plot3d(abs(x*y), x, 0, 1, y, 0, 1)$ plotfunc(abs(x*y), x = 0..1, y = 0..1):

fplot3d(x,y,f) Plot3DS(Abs(x*y), 0:1,0:1) 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 ofciel 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 ofciel 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 ofciel 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

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 Afxes, 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 afne, 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 signicatifs, 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 ni, 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


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-dnition, 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 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 dnie 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

292


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 A LTEX(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 scientique, 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


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 xe attractif, 202 Point xe 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 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 afne, 105 Sous-espace propre, 85 Sous-espace vectoriel engendr, 86 ssh(programme), 3 Style de gure, 22

294


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
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

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

Gp
\p, 46 atan, 46 cos, 153 deriv, 64, 116 exp, 116, 153 log, 67 Mod, 49 Pi, 46, 153 polroots, 64 sqrt, 53


A LTEX

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

\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

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

298


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, 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,

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

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


variance, 105 while, 246 write, 30, 238, 274, 275 xbasc, 157, 158, 160 xinit, 106108, 111, 120, 121, 123, 128,

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,

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

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,

XCAS
:=, 250 =<, 250 chaine, 35 abs, 56, 227 abscisse, 180, 180, 190, 195, 196, 216,

231, 232, 264


cosh, 170 couleur, 52, 70, 71, 93, 95, 101, 102, 104,

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,

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

300


eigenvectors, 209 element, 70, 70, 72, 72, 93, 95, 148, 148, 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,

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

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


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, 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,

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

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

302


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,

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

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

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

You might also like