Comprendre l'Outil Informatique jusqu'à ses Limites
ou
Peut-on Calculer et Visualiser Tout ce qui est Calculable ?
CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641, École polytechnique, Institut Polytechnique de Paris, CNRS, France
france telecom, France Telecom R&D
[Site Map, Help and Search [Plan du Site, Aide et Recherche]]
[The Y2K Bug [Le bug de l'an 2000]]
[N'oubliez pas de visiter Une Machine Virtuelle à Explorer l'Espace-Temps et au-delà où vous trouverez plus de 10.000 images et animations à la frontière de l'Art et de la Science]
(Site WWW CMAP28 : cette page a été créée le 30/10/2004 et mise à jour le 03/10/2024 17:06:40 -CEST-)
(texte présenté au Colloque Architectures, Urbanisme et Géométries, Cite des Géométries, Maubeuge, 08/10/2004)
Résumé : Après avoir rappelé brièvement les notions de calcul et d'ordinateur,
ce texte définit l'Expérimentation Virtuelle,
nouvelle approche de la connaissance scientifique. Ses
avantages sont décrits et illustrés à
l'aide de quelques exemples empruntés à la
Mécanique Quantique et à la Mécanique Céleste. Les
limites de l'outil informatique sous-jacent liées,
principalement à la programmation, aux erreurs
d'arrondi et aux modes de représentation,
sont ensuite exposées en détail.
Mots-Clefs :
Anaglyphes,
Art et Science,
Autostéréogrammes,
Chaos Déterministe,
Création Artistique,
Entrelacs,
Erreurs d'arrondi,
Expérimentation Virtuelle,
Génie Logiciel,
Géométrie Fractale,
Infographie,
Mathématiques,
Mécanique Céleste,
Mécanique Quantique,
Physique,
Sensibilité aux Erreurs d'Arrondi,
Simulation Numérique,
Stéréogrammes,
Synthèse de Phénomènes Naturels,
Synthèse de Texture,
Visualisation Scientifique,
Voyage Virtuel dans l'Espace-Temps.
Plan de ce document :
1-CALCUL ET ORDINATEUR :
En août 1900 se réunit à Paris le second Congrès International des Mathématiciens.
David Hilbert y présenta en séance plénière, non pas des résultats récents,
mais bien plutôt une liste de vingt-trois problèmes qu'il considérait comme majeurs
et qui devaient constituer les grands jalons de la recherche mathématique du vingtième siècle.
Certains d'entre-eux ne sont toujours pas résolus : à la date ou ce texte est rédigé,
c'est le cas du problème
dit de Riemann.
D'autres le furent depuis : c'est le cas, en particulier,
du dixième problème. Celui-ci traitait des équations diophantiennes (du nom de Diophante d'Alexandrie,
mathématicien ayant vécu au troisième siècle de notre ère) ; il s'agit d'équations polynômiales
à une ou plusieurs variables et à coefficients entiers dont seules les solutions entières sont alors recherchées
(leur étude est à l'origine
du fameux grand théorème de Fermat).
La question alors posée par David Hilbert consistait à demander s'il existait une procédure "mécanique"
(autrement dit, un algorithme ; le plus ancien -et le plus célèbre ?-
d'entre-eux étant bien certainement celui d'Euclide
destiné à calculer le Plus Grand Commun Diviseur de deux nombres) permettant de dire de façon certaine si une
équation diophantienne donnée admet au moins une solution.
Pour y répondre, il fallu formaliser la notion d'algorithme définie comme étant
une suite finie d'opérations non aléatoires permettant,
à partir d'un ensemble de données, d'arriver à un certain résultat. Plusieurs logiciens (Alonzo Church,
Kurt Gödel,...) ont proposé des définitions différentes mais équivalentes. Mais celui qui nous intéresse
ici est Alan Turing qui conçut la machine abstraite éponyme.
Cette dernière est constituée :
- d'un "ruban" R contenant, dans les deux directions, une
infinité de cases, chacune étant vide
ou contenant un symbole S appartenant à un certain ensemble fini (par exemple {0,1}) ;
- d'une "tête" T, se trouvant dans un certain "état" E
(appartenant lui-aussi à un ensemble fini) et
pouvant lire et écrire R.
A chaque "pas de temps" la case située sous T est
lue ; en fonction de E et de la valeur du symbôle lu S, trois actions conditionnelles peuvent avoir lieu :
- effacement ou remplacement de S,
- changement de E
- et enfin déplacement du ruban d'un "cran" à droite ou à gauche.
Malgré sa rusticité, ce "dispositif" a permis de définir précisement ce qui était calculable et
ce qui ne l'était pas. Et c'est seulement dans les années soixante-dix que, grâce à lui, Davis,
Robinson, Putman et Matyasevitch purent enfin donner
une réponse négative au problème posé quelques décennies plus tôt...
Alan Turing, à côté de John Von Neumann (sans oublier Charles Babbage un siècle auparavant...),
est aussi considéré à juste titre comme l'un des pères fondateurs de l'informatique moderne.
En effet, en parallèle de ses activités en logique mathématique, il a participé concrètement
à l'effort de guerre dans les années quarante et à la construction des premières
"machines à calculer électroniques" britanniques. Et même si ces premiers ordinateurs étaient des
monstres volumineux, peu fiables et exigeants (en énergie et en assistance), ils n'étaient pas différents,
dans leurs grands principes, de ceux qui ont envahis notre vie quotidienne.
Il est souvent affirmé que les ordinateurs sont des incarnations de la machine de Turing (en notant malgré tout
qu'il existe des différences importantes, en particulier en ce qui concerne la capacité mémoire
qui est finie pour les ordinateurs et illimitée pour la machine de Turing) et qu'ainsi,
ils peuvent calculer tout ce qui est calculable... Avant d'examiner si cela est vrai, présentons
une de leurs applications aujourd'hui fondamentale pour la science.
2-DEFINITION DE L'EXPERIMENTATION VIRTUELLE :
Pour décrire, structurer, transmettre et explorer les relations, les régularités et les symétries
des phénomènes observés,
c'est le langage des mathématiques qui est utilisé et aujourd'hui,
toutes les lois de la nature sont exprimées sous la forme d'équations qui
n'ont bien souvent pas d'équivalents dans nos langues naturelles.
Des modèles mathématiques décrivent donc le comportement des systèmes
que les chercheurs et les ingénieurs étudient ; il s'agit donc
en quelque sorte d'une analogie : un système et son modèle, à un niveau d'observation donné
et dans les mêmes conditions "expérimentales",
doivent produire, pour les grandeurs physiques caractéristiques, des valeurs égales (à epsilon près...).
Pour un système donné, un modèle qui est sensé le décrire contient des équations reliant
entre-elles ces différentes grandeurs (par exemple des coordonnées), des conditions
initiales (donnant certaines valeurs à l'instant 0) et enfin des conditions aux limites (précisant, par
exemple, ce qu'il se passe aux frontieres du domaine à l'intérieur duquel se fait l'étude).
Ainsi qu'il est facile de l'imaginer, ils sont en général d'une très grande complexité ;
leur étude pourra donc présenter des difficultés tant théoriques que techniques.
L'ordinateur sera alors un collaborateur précieux et de plus en plus irremplacable,
mais dont il faudra peut-être se méfier...
Des les années quarante, John Von Neumann avait imaginé la possibilité
de faire des expériences numériques grâce aux ordinateurs. Mais
les machines d'alors n'avaient ni les performances,
ni l'ergonomie de celles d'aujourd'hui.
Une Expérience Virtuelle sera une expérience effectuée non pas sur
un système "réel", mais bien plutôt sur son modèle mathématique traduit en un ou plusieurs
programmes exécutés dans la mémoire d'ordinateurs (le mot virtuel ayant été
choisi en tant que l'un des antonymes de réel).
Des méthodes dites numériques seront en général nécessaires
afin de connaître la solution des équations, non point sous la forme générale
de formules explicites inaccessibles ou inexistantes,
mais sous celle particulière de valeurs numériques. Cette situation ne doit
d'ailleurs pas nous choquer. N'oublions pas que l'acte fondamental du scientifique est la
mesure : la réalité ne se manifeste à lui, au
cours des expériences, que par l'intermédiaire de nombres (des
coordonnées, des vitesses, des températures,...) ; il n'a en fait jamais accès aux
formules du "Vieux"...
Que faire alors des résultats obtenus ?
Bien souvent, leur volume s'exprime en milliards de nombres (ou
davantage encore). Le recours à l'image de synthèse est alors une nécessité absolue
(notons au passage que cela est vrai aussi pour la plupart des expériences réelles
menées avec les grands instruments scientifiques tel les télescopes et les accélérateurs de particules).
3-QUELQUES EXEMPLES D'EXPERIENCES VIRTUELLES :
3.1-La Mécanique Quantique :
L'expérimentation virtuelle va nous permettre de manipuler et de voir des objets
autrement inaccessibles.
Voici quelques exemples allant de la théorie des supercordes à l'atome d'hydrogène :
-
La théorie des supercordes est actuellement la solution la plus
prometteuse en ce qui concerne l'unification de la Mécanique Quantique
(les interactions fortes et électrofaibles) et de la
Relativité Générale (interaction gravitationnelle).
Elle demande pour cela sept dimensions supplémentaires "à côté" des
quatre dimensions (trois d'espace et une de temps) que nous percevons.
Ces sept dimensions, auxquelles nous ne sommes pas sensibles,
seraient organisées selon des variétés de Calabi-Yau,
dont la "forme" et la topologie conditionneraient notre Physique
(nombre de familles de particules élémentaires -3- et leurs propriétés,
en particulier).
-
Le nucléon (proton ou neutron) n'est pas une particule élémentaire.
Il est constitué de trois quarks dits de valence
et d'une mer de particules virtuelles (quarks et gluons) en interaction.
-
L'hydrogène, le plus simple des atomes, bien
qu'il soit parfaitement connu,
peut encore nous révéler bien des surprises. Cette image représente
la densité de probabilité de prèsence de l'électron lors d'une
certaine superposition linéaire d'états propres.
La luminance de chacun des points code
l'information pertinente : plus un point est lumineux,
plus l'électron à de chance de se trouver sur la ligne de visée
joignant l'œil de l'observateur à ce point.
Ces quelques images ne peuvent pas ne pas nous intriguer ; en effet,
les "objets" ici représentés relèvent de la Mécanique Quantique, laquelle nous
interdit, par exemple, de connaître simultanément avec une infinie
précision la position et la vitesse d'une particule, ce qu'elles semblent montrer malgré tout.
De plus, quelles significations ont les formes et les couleurs utilisées, alors que ces
notions n'ont aucun sens à cette échelle ? Nous reviendrons ultérieurement sur ces problèmes...
3.2-La Mécanique Céleste :
Le sens de la vision, toujours en alerte, pourra réagir instantanément
à toute surprise visuelle apparaissant durant une expérience virtuelle et ainsi,
de cette nouvelle approche pourront surgir des découvertes éventuellement importantes.
-
En injectant dans le modèle du problème des N-corps
les coordonnées et les vitesses des neuf planètes connues du système solaire
à une date donnée, il est possible de calculer leurs trajectoires ultérieures.
Au cours de cette expérience, l'observateur tourne autour du
système afin de bien noter le cas particulier de Pluton dont la
trajectoire n'est pas dans le plan des autres planètes (dit
plan de l'écliptique). Il est important de noter
l'aspect "mensonger" de cette représentation. En effet, le
système solaire ne peut être représenté à l'échelle ; le Soleil,
dans ce cas, serait plus petit qu'un point d'image et son
diamêtre doit donc être démesurement exagéré. De même, les planètes apparaissent
comme ayant une taille du même ordre de grandeur que celle du Soleil, ce qui n'est
évidemment pas le cas en réalité. Enfin, étant donné le diamêtre
de la sphère matérialisant le Soleil, les trajectoires des quatre
premières planètes devraient être cachées par celle-ci. Ainsi, il est nécessaire,
après des calculs respectant les échelles réelles, de procéder
à des dilatations non linéaires des trajectoires de façon à pouvoir
les distinguer.
-
Quel est le ciel que voyaient nos ancêtres et que nous voyons
encore en le regardant "naïvement". Cette expérience place donc la
Terre au centre du système solaire (par un simple changement de référentiel).
Le Soleil tourne alors autour de
la Terre, alors que les huit autres planètes décrivent des
boucles de rétrogradation qui furent longtemps expliquées à grand
coup d'épicycles (du moins jusqu'a Copernic...).
-
Alors comment serait perçu notre système solaire depuis
un point de vue quelconque ? C'est ce que montre cette expérience
dans laquelle une dixième planète n'interagissant pas avec les
autres (mais uniquement avec le Soleil) et dont quelques trajectoires possibles sont étudiées
depuis l'orbite de Pluton jusqu'au voisinage du Soleil. Le ciel perçu pas ses habitants
(virtuels) serait très régulier à proximité du Soleil et progressivement
deviendrait d'une telle complexité qu'aucun système d'épicycles
ne saurait l'expliquer. La leçon à tirer de cela est double : d'une
part un système peut présenter un "visage" complexe, voire
chaotique, alors qu'en fait, à condition de trouver
le bon point de vue, il peut se simplifier considérablement (mais
comment trouver le "bon point de vue" pour un système quelconque ?).
Ce phénomène nous permet d'introduire la notion de
Chaos Virtuel (ou Subjectif)
[Plus d'informations...].
D'autre part, si notre humanité s'était développée plus loin
du Soleil et en dehors du plan de l'écliptique (si tant est que la
chose fut possible), nos astronomes, nos mathématiciens,
mais aussi nos prêtres des temps passés auraient observé un ciel beaucoup
plus irrégulier ; les conséquences en auraient été certainement considérables en ce qui
concerne la science, la philosophie et certainement les religions...
-
Enfin, dans cette dernière expérience, la planète
fictive conserve une trajectoire de taille fixe, mais son
plan tourne de 360 degrés dans l'espace.
(le lecteur est invité à consulter le site
http://www.lactamme.polytechnique.fr
où il trouvera des dizaines d'autres exemples ainsi que de très nombreuses informations complémentaires)
4-LES DIFFICULTES ET LES LIMITES DE L'OUTIL :
Les quelques exemples précédents
pourraient laisser croire qu'effectivement,
nos ordinateurs peuvent calculer tout ce qui est calculable.
Mais en fait, il en va tout autrement...
Au préalable, il convient de rappeler que lors d'une expérience virtuelle nous ne faisons qu'étudier le
modèle d'un système et non point ce système lui-même.
Confondre le système et son modèle serait identique à ne pas faire de différence entre un
paysage et sa photographie. Le modèle ne peut pas, sauf cas très particuliers, représenter le système
dans toute sa complexité. Les approches "réelle" et "virtuelle"
sont bien évidemment complémentaires et les prédictions faites grâce aux
Mathématiques et à la Programmation, lorsqu'elles concernent des "fragments" de Réalité, doivent être
validées (précisons qu'il est aussi possible de faire des
expériences virtuelles dans des univers purement imaginaires, auquel cas ce risque de
confusion ne se rencontre pas).
Tout reposant finalement sur l'ordinateur, la programmation sous-jacente
conditionnera bien entendu (mais qui s'en souvient ?) la qualité, la
valeur et la cohérence des résultats scientifiques ainsi obtenus. Mais une
programmation exempte d'erreurs (sachant que, en dehors d'exemples simplistes, elle
n'existe malheureusement pas...) est-elle garante de cette qualité ? Nous allons
montrer qu'il n'en est rien. Trois raisons vont se conjuguer pour rendre parfois
douteux nos résultats ; en effet, contrairement peut-être à certaines idées
préconçues, il est difficile d'une part de bien calculer à l'aide d'un ordinateur, d'autre part
de visualiser des résultats numériques et enfin de résister à la tentation de faire des
images spectaculaires sans intérêt scientifique (ou pédagogique)...
4.1-Les Développements Mathématiques :
Il est évident qu'au niveau de l'analyse mathématique du problème
de nombreuses erreurs peuvent apparaître : de nature conceptuelle,
d'utilisation d'hypothèses implicites, de mise en place d'un
contexte inapproprié,...,
et plus simplement, de vulgaires fautes de signes...
D'autre part, et c'est là un point essentiel
que nous détaillerons ci-après,
il convient de garder présent à l'esprit en permanence
qu'un ordinateur est une machine tout à la fois finie et discrète.
Cela signifie que, sauf cas très exceptionnels,
le modèle mathématique ne peut être
utilisé tel quel ; il est impératif de lui appliquer des méthodes
dites numériques afin que des résultats
concrets puissent être obtenus. Cela signifie, par exemple,
que le temps et l'espace doivent être échantillonnés et représentés ainsi
par un ensemble fini de points. Ce processus peut être évidemment source
d'anomalies graves.
Une fois ces deux premières etapes franchies (analyses mathématique et numérique respectivement),
le modèle est théoriquement pret à être mis en œuvre dans un ordinateur...
4.2-La Programmation :
S'il peut apparaître évident à beaucoup qu'il est bien plus facile de
rédiger un programme qui fonctionne mal qu'un programme au comportement parfait,
cela est malheureusement bien souvent oublié ; il est vrai d'ailleurs que les outils
mis à notre disposition (tant au niveau logiciel qu'au niveau matériel) donnent l'illusion
d'une grande (trop grande ?) facilité...
Mais si l'ordinateur peut aisément signaler au programmeur les fautes de syntaxe,
en ce qui concerne la logique du problème, il n'a a priori
que peu de compétences...
Certains utopistes fondent de grands espoirs sur une approche de la programmation
de beaucoup plus haut niveau, ou le programmeur ne ferait que spécifier
son problème, laissant le soin à "quelque chose" de programmer à sa place.
Deux remarques s'imposent alors : d'une part, les spécifications d'un problème
complexe sont en général elles-mêmes complexes et peuvent donc contenir des erreurs, des
incohérences,... D'autre part, ce "quelque chose" est nécessairement un
programme, lui-même d'une grande complexité et donc victime potentielle des
mêmes maux que les autres programmes... Notons au passage que le nombre d'erreurs
contenues dans un programme croit exponentiellement avec la complexité de celui-ci ;
ainsi, au-delà d'un certain seuil, tout programme contient des anomalies,
celles-ci pouvant d'ailleurs ne jamais se manifester, ou bien se produire au bout
de nombreuses années d'utilisation sans problèmes apparents...
Imaginons malgré tout qu'un programme exempt de fautes ait été rédigé
(cela est possible : il suffit, par exemple,
de réaliser un programme simple et court).
Mais ce programme parfait produira-t-il les résultats attendus ?
Malheureusement cela n'est pas toujours le cas pour une première raison liée
à la compilation, opération qui consiste à traduire un programme écrit en
langage de haut niveau (par exemple le Fortan) en une suite d'opérations élémentaires
(les quatre opérations de l'arithmétique, la comparaison de deux nombres,...)
que seules les processeurs savent exécuter.
Un compilateur est lui-même fait d'un ensemble de programmes complexes et même s'ils
sont en général bien testés (à cause, en particulier, de l'usage intensif
qui en est fait, sachant que, malgré tout, des tests exhaustifs
sont tout simplement impossibles), ils ne sont pas exempts d'erreurs (comme tout autre programme...).
Mais les compilateurs n'ont pas l'exclusivité des anomalies !
Les librairies utilisées (et dans lesquelles le programmeur pourra trouver,
par exemple, les fonctions mathématiques usuelles), elles-aussi, peuvent présenter
des comportements aberrants.
Une remarque essentielle s'impose alors : pour quelques erreurs
détectées (parce que leurs conséquences sont "visibles"),
combien d'erreurs latentes sont présentes ?
Ainsi, un programme peut-être correct au niveau de son source,
alors que son exécutable peut, sur un certain système,
ne pas l'être !
Par exemple, cette image
semble correspondre visuellement à ce qui est attendu, mais est-elle ce qu'elle serait si ce programme
(supposé évidemment sans erreurs de logique...) était exploité sur un système parfait ?
Il faut noter au passage que, malgré tout, il est possible
de développer des stratégies destinées à améliorer la situation
[Plus d'informations...]
Mais malheureusement l'histoire n'est pas terminée...
4.3-Le Calcul :
Finalement tout se ramène donc à des calculs élémentaires effectués par des machines.
L'un des "objets fondamentaux" de la physique mathématique est le corps
des nombres réels [Plus d'informations...].
Or la précision des opérations
(exprimée en nombre de bits mémorisés et manipulés lors des calculs ;
aujourd'hui, le monde scientifique utilise majoritairement les représentations sur 64 bits)
est limitée pour des raisons théoriques (que faire d'autre ?),
pratiques et économiques évidentes.
Les nombres réels ne pourront donc pas , sauf cas particuliers,
être représentes exactement dans un ordinateur : ils n'existent tout simplement pas
pour ces machines !
Un ordinateur (quelqu'en soit le type) est une machine tout à la
fois finie (elle possède une capacité mémoire limitée) et
"discrète" (l'information doit être échantillonnée et quantifiée avant tout
traitement numérique). Ces deux caractéristiques sont malheureusement
trop souvent oubliées, ce qui peut ètre alors la source de
désagréments (euphémisme...).
A titre d'exemple du caractère fini
des ordinateurs, la suite triviale définie par :
S = 0
0
S = S + 1
n n-1
ne peut pas ètre étudiée quel que soit n dans un ordinateur.
En ce qui concerne le caractère discret
des ordinateurs, la conséquence immédiate est, en
toute généralité, l'impossibilité
de manipuler les nombres Réels. Ces derniers n'existent tout
simplement pas dans l'univers numérique. Ils sont très grossièrement
approchés par les nombres dits flottants.
A cause de cela, des constantes apparemment très simple (par exemple
4095.1 et 4096.1 qui seront utilisées ci-après)
ne sont pas représentables exactement en machine.
De plus, pour ces nombres, les opérations arithmétiques élémentaires
ne sont en général pas internes.
Lors de chacune d'entre-elles,
une erreur d'arrondi est introduite ;
celle-ci est alors la cause
de la perte de la propriété d'associativité
de l'addition et surtout
de celle de la multiplication (notons que dans ces conditions,
la multiplication n'est alors plus distributive par rapport à l'addition).
Ainsi, par exemple, en simple précision (c'est-a-dire sur 32 bits
et ce afin de simplifier l'impression hexa-décimale des résultats
-voir la même expérience en double précision 64 bits-),
le programme suivant (où la fonction 'MUL' est destinée à forcer l'ordre
des multiplications) :
float MUL(x,y)
float x,y;
{
return(x*y);
}
main()
{
float A=3.1,B=2.3,C=1.5;
float X,Y;
X=MUL(MUL(A,B),C);
Y=MUL(A,MUL(B,C));
printf("\n (%f x %f) x %f = %f\n",A,B,C,X);
printf("\n %f x (%f x %f) = %f\n",A,B,C,Y);
}
donne comme résultats :
(3.10 * 2.30) * 1.50 = 10.695000 = 0x412B1EB8
#### #
et :
3.10 * (2.30 * 1.50) = 10.694999 = 0x412B1EB7
#### #
ce qui constitue deux résultats différents. On notera au passage
que l'expérience peut être refaite
avec d'autres langages de programmation (par exemple java
ou le programmeur maîtrise l'ordre d'évaluation des opérations,
mais est-ce bien vrai ?) ;
elle révèle évidemment le même phénomène...
La propriété d'associativité de l'addition
est, elle-aussi perdue, mais qu'elle se manifeste
plus rarement et de façon moins grave au niveau de ses conséquences.
Ainsi, en simple précision (c'est-à-dire sur 32 bits
et ce afin de simplifier l'impression hexa-décimale des résultats
-voir la même expérience en double précision 64 bits-), le programme suivant
(ou la fonction 'ADD' est destinée à forcer l'ordre des additions) :
float ADD(x,y)
float x,y;
{
return(x+y);
}
main()
{
float A=1.1,B=3.3,C=5.5;
float X,Y;
X=ADD(ADD(A,B),C);
Y=ADD(A,ADD(B,C));
printf("\n (%f x %f) x %f = %f\n",A,B,C,X);
printf("\n %f x (%f x %f) = %f\n",A,B,C,Y);
}
donne :
(1.10 + 3.30) + 5.50 = 9.900000 = 0x411E6666
# #
ce qui est différent de :
1.10 + (3.30 + 5.50) = 9.900001 = 0x411E6667
# #
Le seul aspect positif de ce "dysfonctionnement" est qu'il permet de
nous rappeler (montrer ?) qu'un ordinateur, sauf cas particuliers
(celui des petits nombres entiers, par exemple),
ne calcule pas exactement !
Lors de l'étude de systèmes non linéaires,
tout cela peut avoir des conséquences absolument
dévastatrices. A titre d'exemple, le calcul de l'itération
(dite Dynamique de Verhulst ) :
2
X = (R+1)X - RX
n n-1 n-1
peut se faire par le programme élémentaire
donné de façon très détaillée ci-après (sont mises en gras, les lignes
réellement essentielles) :
main()
{
double R=3.0;
double X=0.5;
int n;
for (n=0 ; n <= 80 ; n++)
{
if ((n%10) == 0)
{
printf("\n iteration(%04d) = %9.6f",n,X);
}
else
{
}
X = (R+1)*X - R*X*X;
}
}
donne sur une O200 Silicon Graphics (processeur R10000),
sous IRIX 6.5.5m et cc 7.2.1,
les résultats suivants en fonction des options d'optimisation :
O200 Silicon Graphics (R10000, IRIX 6.5.5m, cc 7.2.1) :
option '-O2' option '-O3'
X(00) = 0.500000 0.500000
X(10) = 0.384631 0.384631
X(20) = 0.418895 0.418895
X(30) = 0.046399 0.046399
X(40) = 0.320184 0.320192
X(50) = 0.063747 0.059988
X(60) = 0.271115 1.000531
X(70) = 1.328462 1.329692
X(80) = 0.817163 0.021952
(on notera pour la petite histoire qu'il est nécessaire,
dans toutes ces expériences, de préciser
sans ambiguïté les versions du système et du compilateur utilisés,
au cas où ces résultats devraient être reproduits fidèlement).
Il est facile de calculer simultanément les extrema
de tous les résultats de tous les calculs intermédiaires
lors de chaque opération arithmétique élémentaire.
Le minimum trouvé est strictement positif et inférieur a 1,
sans être petit par rapport au plus petit nombre positif représentable.
Le maximum, quant à lui, vaut quelques unités.
Il n'y a donc jamais de calculs élémentaires au cours desquels
seraient combinés deux nombres d'ordres de grandeur très
différents et donc incompatibles avec la représentation
flottante. Il convient de noter au passage que ce dernier problème peut
être lui-aussi la cause de phénomènes "ennuyeux" ; ainsi, à titre
d'exemple, en double précision 64 bits,
additionner 1 à 1e16 ("10 à la puissance 16") est sans effet,
ce qui conduit à l'égalité paradoxale suivante :
16 16
10 + 1 = 10
Il est essentiel de remarquer que d'une part, ce
calcul ne fait appel à aucune méthode numérique (d'intégration par exemple)
et que d'autre part, ce programme ne peut être faux...
Moralité : ce programme ne calcule pas l'itération définie ci-dessus
dans le corps des nombres Réels. Oui, mais alors,
qu'étudie-t-il ? Sans que la réponse soit "n'importe quoi",
il faut bien dire que l'itération qui s'exécute effectivement
n'est pas "réellement" connue, car elle dépend d'un
trop grand nombre de paramètres non maîtrisés,
voire inconnus...
Augmenter la précision des calculs (l'exemple précédent
utilise la double précision -64 bits-), ne fait
que retarder de quelque peu l'apparition du phénomène
ainsi que le montre cette expérience faite
avec bc
("arbitrary-precision arithmetic language"). Le tableau suivant
donne le numéro d'itération n
à partir duquel la partie entière est fausse,
en fonction du nombre de décimales utilisées pour
faire le calcul (paramètre scale) :
scale = 010 020 030 040 050 060 070 080 090 100
n = 035 070 105 136 169 199 230 265 303 335
Il est évident que le faible gain obtenu ne peut justifier
le coût de cette opération.
Ce qui précède ne doit pas faire croire
qu'un calcul mathématiquement linéaire soit
à l'abri de ces problèmes. Ainsi, examinons
le programme suivant
(sont mises en gras, les lignes réellement essentielles) :
main()
{
double B=4095.1;
double A=B+1;
double x=1;
int n;
printf("initialisation x = %.16f\n",x);
for (n=1 ; n <= 9 ; n++)
{
x = (A*x) - B;
printf("iteration %01d x = %+.16f\n",n,x);
}
}
Les valeurs calculées (après compilation sans optimisation par 'gcc' sur un PC Linux) sont les suivantes :
initialisation x = +1.0000000000000000
iteration 1 x = +1.0000000000004547
iteration 2 x = +1.0000000018630999
iteration 3 x = +1.0000076314440776
iteration 4 x = +1.0312591580864137
iteration 5 x = +129.0406374377594148
iteration 6 x = +524468.2550088063580915
iteration 7 x = +2148270324.2415719032287598
iteration 8 x = +8799530071030.8046875000000000
iteration 9 x = +36043755123945184.0000000000000000
Etant donne l'algorithme et, en particulier, qu'initialement :
x = 1
ainsi qu'il existe la relation suivante :
A-B = 1 (mathématiquement parlant...)
entre les constantes 'A'
(il est à noter qu'avec une partie décimale égale à 0.1, les parties entières posant
problème sont des puissances de 4 ; pour des parties décimales différentes,
la situation est plus complexe...)
et 'B',
la variable 'x' est un invariant et devrait donc rester égale à sa valeur initiale
(1) tout au long des itérations.
Or clairement,
il n'en n'est rien (et ce même apres un très petit nombre d'itérations...).
Au passage, ce programme donne la réponse attendue (1) si l'on remplace
double par float ou
encore si une compilation avec optimisation est demandée !
Il conviendra donc de ne pas confondre la
linéarite mathématique et la
linéarite numérique ; cet exemple
est linéaire mathématiquement parlant mais non linéaire au
niveau du calcul numérique (une multiplication par une constante est présente,
or dans la mémoire d'un ordinateur il n'y a que peu de différences entre une
constante et une variable...) !
Au passage, ces constantes d'apparence simple ne sont pas
représentées exactement en machine :
B = 4095.1 = {0x40affe33,33333333}
A = B+1 = 4096.1 = {0x40b00019,9999999a}
A-B = 1.0000000000004547 = {0x3ff00000,00000800}
|
1.0 = {0x3ff00000,00000000}
les valeurs précédentes ayant ete obtenues avec un PC.
Les conséquences de tout cela sont nombreuses ; résumons les visuellement :
-
Un système réversible peut perdre cette propriété s'il est
sensible aux erreurs d'arrondi. Dans cet exemple,
au "milieu temporel" du calcul, tous les vecteurs vitesses
sont "inversés". L'état final obtenu est malheureusement
très différent de l'etat initial.
- Visualisation bidimensionnelle des erreurs d'arrondi dans le calcul de la dynamique de Verhulst
[Plus d'informations].
De la façon d'écrire un programme (et en particulier de la façon
de parenthéser) peuvent dépendre les résultats.
- L'attracteur de Lorenz -sensibilité aux conditions initiales (la Rouge, la Verte et la Bleue)-.
- L'attracteur de Lorenz -sensibilité à la méthode d'intégration utilisée (Rouge=Euler, Vert=Runge-Kutta/second ordre, Bleu=Runge-Kutta/quatrième ordre)-.
- Calcul de l'attracteur de Lorenz sur trois ordinateurs différents (le Rouge, le Vert et le Bleu : sensibilité aux erreurs d'arrondi). Ainsi un système sensible aux conditions initiales (comme l'est
l'attracteur de Lorenz) est sensible aux erreurs d'arrondi (et réciproquement ?).
- Rotation autour de l'axe X de l'attracteur de Lorenz (1000 itérations), calculée sur deux ordinateurs différents. Ce mouvement de rotation calcule conjointement par deux ordinateurs
différents semble correct. En effet, le calcul ne portant
que sur 1000 itérations, l'anomalie finale n'est pas encore suffisamment
importante pour être visible.
- Rotation autour de l'axe X de l'attracteur de Lorenz (5000 itérations), calculée sur deux ordinateurs différents. Cette fois-ci, le mouvement de rotation semble incorrect
(bien observer les saccades entre certains couples d'images).
En effet, le calcul porte ici sur 5000 itérations ce qui
laisse le temps à l'anomalie de s'amplifier suffisamment pour être visible
à la fin de ce processus.
Cette expérience, combinée avec la précédente,
montre la difficulté de faire du calcul parallèle portant sur des
modèles sensibles aux erreurs d'arrondi, à l'aide d'un
ensemble de machines hétérogenes (aussi bien au niveau matériel
qu'au niveau logiciel -une simple différence de version du compilateur utilisé
peut suffire !-).
- Intégration du problème des N-corps (N=4 : une étoile, une planète lourde et une planète légère avec un satellite) calculé avec 2 options d'optimisation différentes (sensibilité aux erreurs d'arrondi).
Heureusement, tous les problèmes traités sur ordinateur ne sont pas aussi
sensibles aux erreurs d'arrondi (bien qu'elles soient évidemment toujours présentes).
Ces anomalies se rencontreront a priori
avec tous les problèmes dits sensibles aux conditions initiales.
En effet, tout résultat intermédiaire dans un calcul peut être
considéré comme la condition initiale du calcul suivant. Une erreur d'arrondi
dans une valeur constitue donc une imprécision dans les conditions initiales du
calcul qui l'exploite. Mais elles pourront aussi se rencontrer avec des problèmes
linéaire comme cela fut montré précédemment...
Ainsi, les exemples précédents, par leur "brutalité", montrent l'existence
de ce phénomène en rappelant que dans certaines circonstances les résultats obtenus
peuvent être, non pas approchés, mais "tout simplement" faux...
Alors, ne pourrait-on pas se passer des Nombres Réels pour faire de la physique mathématique ?
4.4-La Visualisation :
En ce qui concerne la visualisation,
contrairement à la synthèse d'image
spectaculaire telle celle-ci , il
s'agit, dans le contexte de l'Expérimentation Virtuelle, de montrer bien souvent des objets
sans image, soit qu'ils n'existent pas dans la
nature (tel cet ensemble de Julia dans les quaternions ),
soit que, bien qu'étant
naturels, il soit impossible, voire interdit, de
les représenter (comme l'atome d'hydrogène ) ou encore
tout simplement parce qu'ils n'ont pas
d'équivalents visuels (une pression ou une
température par exemple...). S'il est clair
que montrer un objet à quatre dimensions
est chose difficile (tel ), il est
malheureusement moins évident que toute
tentative de représentation, dans ce
domaine, est délicate. La difficulté vient
bien entendu des espaces, en général non
naturels, dans lesquels résident ces objets,
mais surtout de la non unicité des images
que l'on peut en donner : même dans les cas
les plus simples, des ambiguïtés et des
contradictions peuvent surgir. En toute généralite,
il n'y a pas unicité de la représentation.
Ainsi, la visualisation d'un tableau de nombres
pourrait être considérée, naïvement, comme une opération
élémentaire et bien maitrisée depuis de nombreuses
décennies. En effet, la géographie ou la météorologie font
appel à des couleurs pour représenter des altitudes, des
températures ou encore des pressions. Malheureusement,
cette simplicité n'est qu'apparente : ces quatre images nous
montrent le même ensemble bidimensionnel (un "tableau") de nombres, la
seule différence se situant dans le code des couleurs
utilisées. En effet, pour obtenir ce type de représentation, il
suffit d'associer aux nombres (ou plus généralement à des
plages de valeurs numériques) des couleurs (en appelant aussi
couleur, par abus de langage, le noir, les gris et le blanc) ;
par exemple, il sera décidé arbitrairement de représenter par
du rouge les points associés à des valeurs numériques
comprises entre 1.37 et 3.62. De cet arbitraire naissent les
difficultés ici présentées. De toute évidence, dans cet exemple, la perception
varie fortement d'une image à l'autre, les conclusions
possibles sur l'unique tableau de nombres sous-jacent
pouvant même être en contradiction les unes avec les autres !
Ces quatre représentations peuvent être qualifiées d'orthogonales...
De plus, il est souvent tellement facile de
calculer de telles images, que le risque peut
être grand de confondre esthétisme et valeur
scientifique : une belle représentation n'est
point nécessairement bonne (que vaut, par exemple,
cette image ?),
alors que, bien souvent, ce critère
d'harmonie est utilisé pour juger une
théorie scientifique (c'était, par exemple, la démarche
suivie par Paul Dirac). Malgré cela, il ne faudrait pas
négliger l'apport de l'Art à la Science. En
effet, il est des codes culturels définis au
cours des siècles passés ; ceux-ci doivent
être respectés ici sous peine, dans le cas
contraire, de produire des visualisations qui
soient en contradiction avec nos mécanismes
perceptifs. A titre d'exemple, une couleur
dite froide (respectivement chaude) est en
général associée à des valeurs numériques
faibles (respectivement élevées) et cette
convention quasi universelle doit ici
s'appliquer.
Enfin, il ne faut pas oublier que, par définition,
ces images sont faites pour être regardées. Or le système visuel n'est lui-même
pas exempt de défauts. Des illusions d'optique peuvent donc survenir et par exemple :
Une sémiologie de la Visualisation Scientifique reste à créer ;
elle serait un lieu de rencontre privilégié entre artistes et scientifiques.
5-CONCLUSION :
Ainsi, un ordinateur ne peut pas calculer tout ce qui est mathématiquement calculable.
Il ne peut pas non plus nous montrer globalement et "objectivement" les résultats de ses calculs.
Malgré cela, les scientifiques et les ingénieurs, une fois avertis de ces limites, ont à leur
disposition un nouvel instrument (un "levier intellectuel") dont les implications épistemologiques auront au
moins l'importance de la lunette de Galilée en son temps et qui induit simultanément
une juste renaissance de la pensée visuelle.
Une question se pose alors : ces univers créés dans nos ordinateurs ont-ils le statut ontologique de
nouvelles réalités ?
Ces "univers-jouets" avec leurs lois
calquées sur celles de la nature, ou bien avec d'autres sur lesquelles il nous faut
expérimenter, ne sont-ils pas aussi réels que celui que nous n'appréhendons finalement
que par les modèles neuronaux créés par nos sens au cours des âges ? Enfin, ces
images de science, si elles crêent bien souvent la surprise chez ceux qui en ont un
besoin immêdiat et professionnel, interpellent frêquemment la sensibilitê du
profane et de l'artiste, signe certain d'un contenu beaucoup plus riche que les
apparences ne le laisseraient parfois supposer. Ne sont-elles point alors à
entendre comme un lieu de convergence entre l'Art et la Science, ou tout reste encore
à voir et à découvrir ?
Copyright © Jean-François COLONNA, 2004-2024.
Copyright © France Telecom R&D and CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2004-2024.