9 8 7 6 5 4 3 2 1 Maquette de couverture : Simona Colombo, Milano Mise en page : PTP-Berlin, Protago TEX-Production GmbH, Germany (www.ptp-berlin.eu) Imprimé en Italie : Grafiche Porpora, Segrate (Mi) Springer-Verlag Italia S.r.l., Via Decembrio 28, I-20137 Milano Springer-Verlag Italia est membre de Springer Science+Business Media
Préface
Préface de la première édition Ce livre constitue une introduction au Calcul Scientifique. Son objectif est de présenter des méthodes numériques permettant de résoudre avec un ordinateur des problèmes mathématiques qui ne peuvent être traités simplement avec une feuille et un stylo. Les questions classiques du Calcul Scientifique sont abordées : la recherche des zéros ou le calcul d’intégrales de fonctions continues, la résolution de systèmes linéaires, l’approximation de fonctions par des polynômes, la résolution approchée d’équations différentielles. En préambule à tous ces aspects, nous présentons au Chapitre 1 la manière dont les ordinateurs stockent et manipulent les nombres réels, les complexes ainsi que les vecteurs et les matrices. Afin de rendre notre présentation plus concrète, nous adoptons les environnements de programmation MATLAB 1 et Octave. Rappelons qu’Octave est une réimplémentation d’une partie de MATLAB qui inclut en particulier de nombreuses fonctionalités numériques de MATLAB et est distribué gratuitement sous licence GNU GPL. Dans ce livre, nous introduisons progressivement les principales commandes et instructions de ces langages de programmation. Ceux-ci sont alors utilisés pour implémenter les divers algorithmes présentés, ce qui permet de vérifier, par la pratique, des propriétés théoriques comme la stabilité, la précision et la complexité. La résolution de divers problèmes, souvent motivés par des applications concrètes, fait l’objet de nombreux exemples et exercices. Tout au long du livre, nous utiliserons souvent l’expression “commande MATLAB” : dans ce contexte, MATLAB doit être compris 1. MATLAB est une marque déposée de TheMathWorks Inc., 24 Prime Park Way, Natick, MA 01760, USA. Tel : 001+508-647-7000, Fax : 001+508647-7001.
VI
Préface
comme un langage, qui est partagé par les programmes MATLAB et Octave. Un effort particulier a été fait pour que les programmes présentés soient compatibles avec les deux logiciels. Les quelques fois où ce n’est pas le cas, une brève explication est proposée à la fin de la section correspondante. Divers symboles graphiques ont été utilisés pour rendre la lecture plus agréable. Nous reportons dans la marge la commande MATLAB (ou Octave) en regard de la ligne où elle apparaît pour la première fois. Le symbole indique un exercice, et le symbole est utilisé pour attirer l’attention du lecteur sur un point critique ou sur le comportement surprenant d’un algorithme. Les formules mathématiques importantes sont encadrées. Enfin, le symbole signale un tableau résumant les concepts et les conclusions qui viennent d’être présentés. A la fin de chaque chapitre, une section présente des aspects plus avancés et fournit des indications bibliographiques qui permettront au lecteur d’approfondir les connaissances acquises. Nous ferons assez souvent référence au livre [QSS07] où de nombreuses questions abordées dans cet ouvrage sont traitées à un niveau plus avancé et où des résultats théoriques sont démontrés. Pour une description plus complète de MATLAB nous renvoyons à [HH05]. Tous les programmes présentés dans ce livre peuvent être téléchargés à l’adresse web suivante : http://mox.polimi.it/qs. Aucun pré-requis particulier n’est nécessaire à l’exception de connaissances de base en analyse. Au cours du premier chapitre, nous rappelons les principaux résultats d’analyse et de géométrie qui seront utilisés par la suite. Les sujets les moins élémentaires – ceux qui ne sont pas nécessaires en première lecture – sont signalés par le symbole
.
Nous exprimons nos remerciements à Francesca Bonadei de Springer pour son aimable collaboration tout au long de ce projet, à Paola Causin pour nous avoir proposé de nombreux problèmes, à Christophe Prud’homme, John W. Earon et David Bateman pour nous avoir aidé dans l’utilisation d’Octave, et au projet Poseidon de l’Ecole Polytechnique Fédérale de Lausanne. Enfin, nous exprimons notre reconnaissance à Jean-Frédéric Gerbeau pour sa traduction soigneuse et critique, ainsi que pour ses nombreuses et précieuses suggestions. Milan et Lausanne, juillet 2006
Alfio Quarteroni, Fausto Saleri
Préface de la deuxième édition Pour cette deuxième édition, l’ensemble de l’ouvrage a été revu. De nombreuses améliorations ont été apportées à tous les chapitres, tant dans le style que dans le contenu. En particulier, les chapitres concernant l’approximation des problèmes aux limites et des problèmes aux valeurs initiales ont été considérablement enrichis. Nous rappelons au lecteur que tous les programmes du livre peuvent être téléchargés sur internet à l’adresse suivante : http://mox.polimi.it/qs Enfin, nous souhaitons réitérer nos remerciements à Jean-Frédéric Gerbeau pour sa précieuse collaboration. Lausanne, Milan et Brescia, mai 2010
Ce livre fait appel à des notions de mathématiques élémentaires que le lecteur connaît déjà probablement, mais qu’il n’a plus nécessairement à l’esprit. Nous profiterons donc de ce chapitre d’introduction pour rappeler, avec un point de vue adapté au calcul scientifique, des éléments d’analyse, d’algèbre linéaire et de géométrie. Nous introduirons également des concepts nouveaux, propres au calcul scientifique, que nous illustrerons à l’aide de MATLAB (MATrix LABoratory), un environnement de programmation et de visualisation. Nous utiliserons aussi GNU Octave (en abrégé Octave) qui est un logiciel libre distribué sous licence GNU GPL. Octave est un interpréteur de haut niveau, compatible la plupart du temps avec MATLAB et possédant la majeure partie de ses fonctionnalités numériques. Dans la Section 1.1, nous proposerons une introduction rapide à MATLAB et Octave, et nous présenterons des éléments de programmation dans la Section 1.7. Nous renvoyons le lecteur intéressé à [HH05, Pal08] et [EBH08] pour une description complète des langages de MATLAB et Octave.
1.1 Les environnements MATLAB et Octave MATLAB et Octave sont des environnements intégrés pour le Calcul Scientifique et la visualisation. Ils sont écrits principalement en langage C et C++. MATLAB est distribué par la société The MathWorks (voir le site www.mathworks.com). Son nom vient de MATrix LABoratory, car il a été initialement développé pour le calcul matriciel. Octave, aussi connu sous le nom de GNU Octave (voir le site www.octave.org), est un logiciel distribué gratuitement. Vous pouvez le redistribuer et/ou le modifier selon les termes de la licence GNU General Public License (GPL) publiée par la Free Software Foundation. Quarteroni, A., Saleri, F., Gervasio, P.: Calcul Scientifique c Springer-Verlag Italia 2010
2
>> octave:1>
1 Ce qu’on ne peut ignorer
Il existe des différences entre MATLAB et Octave, au niveau des environnements, des langages de programmation ou des toolboxes (collections de fonctions dédiées à un usage spécifique). Cependant, leur niveau de compatibilité est suffisant pour exécuter la plupart des programmes de ce livre indifféremment avec l’un ou l’autre. Quand ce n’est pas le cas – parce que les commandes n’ont pas la même syntaxe, parce qu’elles fonctionnent différemment ou encore parce qu’elles n’existent pas dans l’un des deux programmes – nous l’indiquons dans une note en fin de section et expliquons comment procéder. Nous utiliserons souvent dans la suite l’expression “commande MATLAB” : dans ce contexte, MATLAB doit être compris comme le langage utilisé par les deux programmes MATLAB et Octave. De même que MATLAB a ses toolboxes, Octave possède un vaste ensemble de fonctions disponibles à travers le projet Octave-forge. Ce dépôt de fonctions ne cesse de s’enrichir dans tous les domaines. Certaines fonctions que nous utilisons dans ce livre ne font pas partie du noyau d’Octave, toutefois, elles peuvent être téléchargées sur le site octave.sourceforge.net. Une fois qu’on a installé MATLAB ou Octave, on peut accéder à l’environnement de travail, caractérisé par le symbole d’invite de commande (encore appelé prompt ) >> sous MATLAB et octave:1> sous Octave. Quand nous exécutons MATLAB sur notre ordinateur personnel, nous voyons : < M A T L A B (R) > Copyright 1984-2009 The MathWorks, Inc. Version 7.9.0.529 (R2009b) 64-bit (glnxa64) August 12, 2009
To get started, type one of these: helpwin, helpdesk, or demo. For product information, visit www.mathworks.com. >>
Quand nous exécutons Octave sur notre ordinateur personnel, nous voyons : GNU Octave, version 3.2.3 Copyright (C) 2009 John W. Eaton and others. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type ‘warranty’. Octave was configured for "x86_64-unknown-linux-gnu". Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit
1.2 Nombres réels
3
http://www.octave.org/help-wanted.html Report bugs to (but first, please read http://www.octave.org/bugs.html to learn how to write a helpful report). For information about changes from previous versions, type ‘news’. octave:1>
Dans ce chapitre nous utiliserons le symbole d’invite de commande (prompt ) >>, tel qu’il apparaît à l’écran. Cependant, nous l’omettrons à partir du chapitre suivant afin d’alléger les notations.
1.2 Nombres réels Tout le monde connaît l’ensemble R des nombres réels. Cependant la manière dont un ordinateur traite cet ensemble est peut-être moins bien connue. Les ressources d’une machine étant limitées, seul un sousensemble F de cardinal fini de R peut être représenté. Les nombres de ce sous-ensemble sont appelés nombres à virgule flottante. Nous verrons au paragraphe 1.2.2 que les propriétés de F sont différentes de celles de R. Un nombre réel x est en général tronqué par la machine, définissant ainsi un nouveau nombre (le nombre à virgule flottante), noté fl(x), qui ne coïncide pas nécessairement avec le nombre x original. 1.2.1 Comment les représenter Pour mettre en évidence des différences entre R et F, faisons quelques expériences en MATLAB qui illustrent la manière dont un ordinateur (p.ex. un PC) traite les nombres réels. Noter que nous pourrions utiliser un autre langage que MATLAB : les résultats de nos calculs dépendent principalement du fonctionnement interne de l’ordinateur, et seulement à un degré moindre du langage de programmation. Considérons le nombre rationnel x = 1/7, dont la représentation décimale est 0.142857. On dit que c’est une représentation infinie car il y a une infinité de chiffres après la virgule. Pour obtenir sa représentation sur ordinateur, entrons au clavier le quotient 1/7 après le prompt (représenté par le symbole >>). Nous obtenons : >> 1/7 ans = 0.1429 qui est un nombre avec quatre décimales, la dernière étant différente de la quatrième décimale du nombre original. Si nous considérons à présent 1/3
4
format
1 Ce qu’on ne peut ignorer
nous trouvons 0.3333. La quatrième décimale est donc cette fois exacte. Ce comportement est dû au fait que les nombres réels sont arrondis par l’ordinateur. Cela signifie que seul un nombre fixe de décimales est renvoyé, et que la dernière décimale affichée est augmentée d’une unité dès lors que la première décimale négligée est supérieure ou égale à 5. On peut s’étonner que les réels ne soient représentés qu’avec quatre décimales alors que leur représentation interne utilise 16 décimales. En fait, ce que nous avons vu n’est qu’un des nombreux formats d’affichage de MATLAB. Un même nombre peut être affiché différemment selon le choix du format. Par exemple, pour 1/7, voici quelques formats de sortie possibles en MATLAB : format format format format format format
short donne 0.1429, short e ” 1.4286e − 01, short g ” 0.14286, long ” 0.142857142857143, long e ” 1.428571428571428e − 01, long g ” 0.142857142857143.
Les mêmes formats existent en Octave, mais ne donnent pas toujours les mêmes résultats qu’en MATLAB : format format format format format format
short donne 0.14286, short e ” 1.4286e − 01, short g ” 0.14286, long ” 0.142857142857143, long e ” 1.42857142857143e − 01, long g ” 0.142857142857143.
Naturellement, ces variantes pourront conduire à des résultats légèrement différents de ceux proposés dans nos exemples. Certains formats sont plus cohérents que d’autres avec la représentation interne des nombres dans l’ordinateur. Un ordinateur stocke généralement un nombre réel de la manière suivante x = (−1)s · (0.a1 a2 . . . at ) · β e =(−1)s · m · β e−t ,
a1 = 0
(1.1)
où s vaut 0 ou 1, β (un entier supérieur ou égal à 2) est la base, m est un entier appelé la mantisse dont la longueur t est le nombre maximum de chiffres stockés ai (compris entre 0 et β − 1), et e est un entier appelé exposant. Le format long e (e signifie exposant) est celui qui se rapproche le plus de cette représentation ; les chiffres constituant l’exposant, précédés du signe, sont notés à droite du caractère e. Les nombres dont la forme est donnée par (1.1) sont appelés nombres à virgule flottante, car la position de la virgule n’est pas fixée. Les nombres a1 a2 . . . ap (avec p ≤ t) sont souvent appelés les p premiers chiffres significatifs de x.
1.2 Nombres réels
5
La condition a1 = 0 assure qu’un nombre ne peut pas avoir plusieurs représentations. Par exemple, sans cette restriction, le nombre 1/10 pourrait être représenté (dans le système décimal) par 0.1 · 100 , mais aussi par 0.01 · 101 , etc. L’ensemble F est donc complètement caractérisé par la base β, le nombre de chiffres significatifs t et l’intervalle ]L, U [ (avec L < 0 et U > 0) dans lequel varie e. On le note donc F(β, t, L, U ). Par exemple, dans MATLAB, on a F = F(2, 53, −1021, 1024) (en effet, 53 chiffres significatifs en base 2 correspondent aux 15 chiffres significatifs montrés par MATLAB en base 10 avec le format long). Heureusement, l’erreur d’arrondi produite quand on remplace un réel x = 0 par son représentant fl(x) dans F, est petite, puisque |x − fl(x)| 1 ≤ M |x| 2
(1.2)
où M = β 1−t est la distance entre 1 et le nombre à virgule flottante différent de 1 qui s’en approche le plus. Remarquer que M dépend de β et t. Par exemple dans MATLAB, la commande eps, fournit la valeur M = 2−52 2.22 · 10−16 . Soulignons que dans (1.2) on estime l’erreur relative sur x, ce qui est assurément plus pertinent que l’erreur absolue |x − fl(x)|. L’erreur absolue, contrairement à l’erreur relative, ne tient en effet pas compte de l’ordre de grandeur de x. 1 Le nombre u = M est l’erreur relative maximale que l’ordinateur 2 peut commettre en représentant un nombre réel en arithmétique finie. Pour cette raison, on l’appelle parfois unité d’arrondi. Le nombre 0 n’appartient pas à F, car il faudrait alors prendre a1 = 0 dans (1.1) : il est donc traité séparément. De plus, L et U étant finis, on ne peut pas représenter des nombres dont la valeur absolue est arbitrairement grande ou arbitrairement petite. Plus précisément, les plus petits et plus grands nombres réels positifs de F sont respectivement donnés par
eps
xmin = β L−1 , xmax = β U (1 − β −t ). Dans MATLAB ces valeurs sont fournies par les commandes realmin et realmax. Elles donnent
realmin realmax
xmin = 2.225073858507201 · 10−308, xmax = 1.797693134862316 · 10+308. Un nombre positif plus petit que xmin produit un message d’erreur appelé underflow et est traité soit de manière particulière, soit comme s’il était nul (voir p.ex. [QSS07], Chapitre 2). Un nombre positif plus grand que xmax produit un message d’erreur appelé overflow et est remplacé par la variable Inf (qui est la représentation de +∞ dans l’ordinateur).
Inf
6
1 Ce qu’on ne peut ignorer
Les éléments de F sont “plus denses” quand on s’approche de xmin , et “moins denses” quand on s’approche de xmax . Ainsi, le nombre de F le plus proche de xmax (à sa gauche) et celui le plus proche de xmin (à sa droite), sont respectivement +308 x− , max = 1.797693134862315 · 10 + −308 xmin = 2.225073858507202 · 10 . −323 292 , tandis que xmax − x− ( !). On a donc x+ max 10 min − xmin 10 Néanmoins, la distance relative est faible dans les deux cas, comme le montre (1.2).
1.2.2 Comment calculer avec des nombres à virgule flottante Comme F est un sous-ensemble propre de R, les opérations algébriques élémentaires sur F ne jouissent pas des mêmes propriétés que sur R. La commutativité est satisfaite par l’addition (c’est-à-dire fl(x + y) = fl(y+x)) ainsi que par la multiplication (fl(xy) = fl(yx)), mais d’autres propriétés telles que l’associativité et la distributivité sont violées. De plus, 0 n’est plus unique. En effet, affectons à la variable a la valeur 1, et exécutons les instructions suivantes : >> a = 1; b=1; while a+b ~= a; b=b/2; end La variable b est divisée par deux à chaque étape tant que la somme de a et b demeure différente (˜=) de a. Si on opérait sur des nombres réels, ce programme ne s’arrêterait jamais, tandis qu’ici, il s’interrompt après un nombre fini d’itérations et renvoie la valeur suivante pour b : 1.1102e-16= M /2. Il existe donc au moins un nombre b différent de 0 tel que a+b=a. Ceci est lié au fait que F est constitué de nombres isolés ; quand on ajoute deux nombres a et b avec b> x = 1.e-15; ((1+x)-1)/x ans = 1.1102 Ce résultat est très imprécis, l’erreur relative étant supérieur à 11% ! Un autre cas d’annulation numérique est rencontré quand on évalue la fonction f(x) = x7 − 7x6 + 21x5 − 35x4 + 35x3 − 21x2 + 7x − 1
Jul 20, 2005 - Procedures\StEM Access Procedures07-20-05.doc. StEM Mini-movie ... Contact one of the participating Post Production facilities from the approved vendor list provided on the last page of this document. 2. They will provide ...
Only to be used after the appliance is installed in a recirculation application. ... 2. Table 1. Aquastat set Temp. 100°F. + 20°F. 20F. = Tankless set Temp. 120°F.
Leaders in the Kit Car Market Westfield have introduced a kit car ... Build Manuals £17.50 (refundable upon order.) ..... DISC BRAKE REAR - VW MK4 GOLF. â.
Nov 21, 2005 - The European Council notes the joint UK-Austrian interim report on .... objectives, including energy security, competitiveness, employment, ...
10 mai 2019 - Les indications d'allergènes sont disponibles sur So Happy. Agriculture. Biologique. Appellation d'Origine. Protégée. Charolais. Plat du chef ...
In general, we could observe a healthy coral reef system in. French Polynesia with a ... presentations were proposed to secondary classes. Considering the tight ... is necessary for developing efficient resource management. In the global ...... FISHI
_2IK0Z5R10. Motivation. Today, while the computing trend is toward open, web -based and distributed systems, photogrammetry systems still remain desktop.
transponders. Telkom-2 will provide telephony, image and data transmission .... The Ariane 5-ECA (Industrial architect: EADS SPACE Transportation). 50.5 m.