Instabilité numérique

mardi 14 septembre 2010
par  Alain BUSSER

L’introduction des TICE doit s’assortir de signaux d’alarme du genre « il faut se méfier de ce qu’on voit sur l’écran ». Les meilleurs exemples sont les suites dont on peut démontrer qu’elles convergent et dont on a l’impression, numériquement, qu’elles divergent ou que leur limite est différente de la limite théorique. Seulement ces exemples sont quelque peu difficiles à trouver.

Premier exemple

La suite « à la Fibonacci » u_{n+1}=u_n+u_{n-1} avec u_0=1 et u_1=\frac{1-\sqrt{5}}{2} est géométrique de raison \frac{1-\sqrt{5}}{2} donc tend vers 0. Théoriquement...

Si on calcule ses 20 premiers termes avec IDLE :

on trouve qu’elle a bien l’air de tendre vers 0, mais si on pousse un peu plus loin :

le 100e terme a l’air plutôt ... divergent :

Le problème en Première est que classiquement, pour prouver que la suite est géométrique, on utilise le raisonnement par récurrence, qui est déjà considéré comme difficile en Terminale...

Mais une fois de plus, on peut (en attendant la Terminale) demander aux élèves de faire confiance en un logiciel de calcul formel, par exemple Maxima et son merveilleux module « solve_rec » :

Une autre difficulté posée par cet exemple est que la récurrence se fait sur deux termes (u_{n+1} fonction de u_n et de u_{n-1}). Plus simple en Première serait un exemple où u_{n+1} ne dépend que de u_n. Mais un autre exemple de récurrence sur deux termes est cité ici.

Exemple homographique

La suite u_n définie par u_0=2-\sqrt{3} et u_{n+1}=4-\frac{1}{u_n} est constante. Théoriquement...

Dans la pratique cela semble bien être le cas au début :

mais numériquement, la limite de la suite semble être 2+\sqrt{3}...

Pour montrer que la suite est constante, on a besoin de simplifier 4-\frac{1}{2-\sqrt{3}} par multiplication aux numérateur et dénominateur par le conjugué 2+\sqrt{3} de 2-\sqrt{3}. Ce qu’aucun élève de Seconde n’a appris à faire... Là encore, un logiciel de calcul formel peut venir à la rescousse.

Exemple affine

La suite u_n définie par u_0=\frac{1}{3} et u_{n+1}=4u_n - 1 est constante. Théoriquement...

Numériquement elle diverge un peu comme l’exemple du premier onglet. Le script ci-dessous

produit sous CaRMetal

un tableau sans équivoque :

n u_n
1 0.33333333333333326
2 0.33333333333333304
3 0.33333333333333215
4 0.3333333333333286
5 0.3333333333333144
6 0.33333333333325754
7 0.33333333333303017
8 0.3333333333321207
9 0.3333333333284827
10 0.3333333333139308
11 0.3333333332557231
12 0.3333333330228925
13 0.3333333320915699
14 0.3333333283662796
15 0.3333333134651184
16 0.33333325386047363
17 0.33333301544189453
18 0.3333320617675781
19 0.3333282470703125
20 0.33331298828125
21 0.333251953125
22 0.3330078125
23 0.33203125
24 0.328125
25 0.3125
26 0.25
27 0
28 -1
29 -5
30 -21
31 -85
32 -341
33 -1365
34 -5461
35 -21845
36 -87381
37 -349525
38 -1398101
39 -5592405
40 -22369621
41 -89478485
42 -357913941
43 -1431655765
44 -5726623061
45 -22906492245
46 -91625968981
47 -366503875925
48 -1466015503701
49 -5864062014805
50 -23456248059221
51 -93824992236885
52 -375299968947541
53 -1501199875790165
54 -6004799503160661
55 -24019198012642644
56 -96076792050570580
57 -384307168202282300
58 -1537228672809129200
59 -6148914691236517000
60 -24595658764946067000
61 -98382635059784270000
62 -393530540239137100000
63 -1.5741221609565483e+21
64 -6.296488643826193e+21
65 -2.5185954575304773e+22
66 -1.007438183012191e+23
67 -4.029752732048764e+23
68 -1.6119010928195055e+24
69 -6.447604371278022e+24
70 -2.5790417485112088e+25
71 -1.0316166994044835e+26
72 -4.126466797617934e+26
73 -1.6505867190471736e+27
74 -6.602346876188694e+27
75 -2.6409387504754778e+28
76 -1.0563755001901911e+29
77 -4.2255020007607644e+29
78 -1.6902008003043058e+30
79 -6.760803201217223e+30
80 -2.7043212804868892e+31
81 -1.0817285121947557e+32
82 -4.326914048779023e+32
83 -1.730765619511609e+33
84 -6.923062478046436e+33
85 -2.7692249912185746e+34
86 -1.1076899964874298e+35
87 -4.430759985949719e+35
88 -1.7723039943798877e+36
89 -7.089215977519551e+36
90 -2.8356863910078204e+37
91 -1.1342745564031281e+38
92 -4.5370982256125126e+38
93 -1.814839290245005e+39
94 -7.25935716098002e+39
95 -2.903742864392008e+40
96 -1.1614971457568032e+41
97 -4.645988583027213e+41
98 -1.8583954332108852e+42
99 -7.433581732843541e+42
100 -2.9734326931374163e+43

Le paquet magique « solve_rec » de Maxima confirme pourtant que la suite est constante :

Conclusion : Le comportement d’une suite dépend de l’outil dont on se sert pour l’étudier...

Exemple parabolique :

La suite logistique u_{n+1}=4u_n(1-u_n) avec u_0=\frac{\sqrt{3}+2}{4} converge vers \frac{3}{4}. Théoriquement...

Numériquement, elle est chaotique sur [0 ;1] , comme le montre sa representation :

obtenue (avec division des abscisses par 10 pour y voir quelque chose) par le CaRScript suivant :


Commentaires

samedi 24 mars 2012 à 08h20

Pour répondre à Marc Jambon : il n’y a aucune erreur dans le code Python pour le calcul de fibo donné par l’auteur. En Python a, b = b, a+b fera exactement la même chose que si on avait introduit une 3e variable.

Le problème vient des erreurs d’arrondis. La norme IEEE-754 double précision n’est pas suffisante ici pour traiter correctement de si petits nombres. Grosso modo la suite doit osciller entre une valeur positive et une valeur négative or à un moment une valeur qui aurait dû être positive devient une valeur négative (proche certes mais ça change tout) et c’est la catastrophe. Il faut donc s’arrêter avant d’atteindre les limites de la représentation des nombres flottants en machine.

Voir : http://docs.python.org/tutorial/flo...

Logo de Marc Jambon
vendredi 3 décembre 2010 à 12h23 - par  Marc Jambon

Réponse au commentaire du 28 novembre 2010.

Je ne connaîs pas Python et il est possible qu’il accepte une substitution directement sur deux variables (là je ne m’engage pas), toutefois, j’ai fait le calcul sur Mathematica avec les 100 premiers termes, les calculs se font avec 6 décimales affichées jusqu’au 23e terme, puis avec un nombre décimal à 6 décimales multipliée par une puissance de 10 négative, la suite est alternée et décroissante en valeur absolue jusqu’au 50e terme qui est de l’ordre de 10^(–12), puis deux termes consécutifs sont négatifs à partir du 51e, on a une croissance en valeur absolue à partir du 57e terme, les puissances de 10 négatives deviennent inutiles à partir du 77e terme. Pour le 100e terme, Mathematica donne –0.929201, ce qui est complèment différent de ce qui est donné par Python, la gestion des arrondis est sûrement différente, c’est la seule explication qu’on puisse donner en admettant que le programme Python soit correct.

De toute façon, ceci confirme qu’il ne faut pas se fier à des calculs où l’on remplace valeur exacte par valeur approchée, les erreurs d’arrondis à partir d’un certain rang deviennent supérieures aux erreurs théoriques. Imaginons qu’on propose sur Mathematica une boucle « tant que la valeur absolue du terme de la suite est supérieure à 10^(–13) », le programme tournera sans fin, contrairement à ce qu’on pouvait attendre. Sûrement de même avec un autre logiciel en adaptant le test d’arrêt.

En tout cas, le sujet de l’article est particulièrement intéressant et les essais sont convaicants, beaucoup d’utilisateurs s’imaginent que les erreurs sont « négligeables » et ont une confiance aveugle dans leur calculateur ! Félicitation à son auteur.

Logo de marc JAMBON
lundi 29 novembre 2010 à 07h29 - par  marc JAMBON

Un exemple de suite définie par récurrence instable :
Un+1 = Un^2 + Un – 5

Si la valeur initiale est Rac[5], la suite est constante, pour une valeur approchée de Rac[5], la suite est divergente.

Logo de Alain BUSSER
dimanche 28 novembre 2010 à 11h36 - par  Alain BUSSER

Je persiste et signe : Il n’y a pas de « faute de programmation » (du moins ici) ; s’il est possible en Python d’utiliser une troisième variable (comme avec les autres langages de programmation), ce n’est pas nécessaire. Cette puissante fonctionnalité, Python la partage avec Lua et Ruby , ainsi d’ailleurs que JavaScript, qui grâce au paradigme des CaRScripts, permet ce genre d’affectation simultanée en bougeant un point dans le plan.

La perturbation engendrée par la valeur approchée n’est pas de nature algorithmique, elle est dûe à la combinaison

  1. du caractère fini de la précision en machine (Python étant plus précis, la divergence est plus lente) ;
  2. d’une dépendance sensible aux conditions initiales.
Logo de marc JAMBON
samedi 27 novembre 2010 à 07h53 - par  marc JAMBON

Quand, on remplace un nombre réel, ici : (1 –Rac[5])/2, par une valeur approchée, un résultat valable pour le nombre réel, ne l’est pas forcément pour son approximation. Là il n’y a aucun doute.

Toutefois, ici, il y a une faute (malheureusement classique) dans la programmation, au lieu de :

(a, b) = (b, a + b)

il aurait fallu introduire une variable auxiliaire c

c = a

(a, b) = (b, c + b)

Je soupçonne alors que la perturbation engendrée par la valeur approché serait nettement moindre.

Un exemple de perturbation plus convaincant pourrait être :

Un = sin(nπ)

La suite ainsi définie est constamment nulle, mais

Vn = sin(n*3,14)

n’est sûrement pas une suite constante.

Un autre exemple :

Un = ((Rac[2])^2n) / 2^n

remplacer Rac[2] par 1,414 ou 1,415 ...

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 8 mars 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mercredi 12 avril 2017, 14h-18h, campus du Tampon
- Mercredi 3 mai 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mardi 13 juin 2017, 14h-18h, campus du Tampon
- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6

Semaine des mathématiques

Du 23 mars au 4 avril 2017 dans l’académie de la Réunion.


Brèves

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

dimanche 26 mars 2017

Publication

735 Articles
Aucun album photo
128 Brèves
11 Sites Web
126 Auteurs

Visites

850 aujourd'hui
853 hier
1963269 depuis le début
34 visiteurs actuellement connectés