Intro
Intro
Intro
Simulation Numérique
Introduction
Eric Lunéville
Discrétisation
∂2p ∂2p
2
+ 2 + k2 p = 0
Eléments finis ∂x ∂y
Exploitation
ε = 10−6 =⇒ xp = 1.01328
ε = 10−7 =⇒ xp = 1.19209
ε = 10−8 =⇒ xp = 0
erreur de « cancellation » : x∼
=y →x−y = ?
erreur d’arrondi : x ≫ y → x + y = x
√
−b−signe(b) b2 −4ac c
Une méthode stable : x1 = x2 =
2a a∗x1
Sim. Numérique – Introduction 4
f l o a t S = 0 . ; in t N=200000000;
for ( int n=1;n<=N; n++) S+=1./n ;
erreur d’arrondi : x ≫ y → x + y = x
f l o a t s 3=s q r t ( 3 ) ;
for ( int i =1; i<=N; i ++) f l o a t a=s 3+f l o a t ( i ) ;
Mémoire : gestion
Allocation mémoire = demande de mém. centrale (RAM ou SWAP)
Allocation statique :
prévue à la compilation
Allocation dynamique
à la demande lors de l’exécution
non disponible en Fortran 77 (émulation)
intégré dans les langages plus récents : (C,C++,Java,Fortran95)
fuite de mémoire : garbage collector
Phase de développement
Conception, structures de données
principales fonctionnalités
architecture générale : outil de modélisation (UML)
plusieurs tests
Test globaux :
archivage des tests
options de compilation
Optimisation du code : temps de calcul (outil de profiling)
Débogage ascendant
tester chaque fonction de la plus interne à la plus globale
Faire des tests sur des petits cas puis sur de plus gros
test de débordement mémoire
Explorateur de code
Appel du compilateur
Debogueur intégré
Profiler intégré
Générateur de documentation
Gestionnaire de versions
Sim. Numérique – Introduction17
EDI sur PC
Quelques EDI libres
Kdevelopp : linux, multi-langage (www.kde.org/download)
Eclipse : multi-plateforme, multi-langage (www.eclipse.org)
Code::blocks : multi-plateforme, C++ (www.codeblocks.org)
DevCPP : windows, C++ (www.bloodshed.net)
Exemple : code::blocks
Quel langage ?
Histoire des langages pour le « calcul scientifique »
1947 Assembleur – langage machine
1951 A0 - premier langage compilé
1956 FORTRAN (FORmula TRANslator) - premier langage de haut niveau
1960 ALGOL (ALGOrithmic Language) - théorique, peu utilisé
1968 PASCAL - usage pédagogique
1972 C - à l'intention des informaticiens, développement d'Unix
1978 FORTRAN77 - normalisation importante du Fortran
1979 VISICALC (VISIble CALCulator) - premier tableur, ancêtre d'EXCEL
1981 C++ - "`évolution"' du C, concept Objet
1984 MATLAB - langage de type script
1987 CAML - Langage fonctionnel
1990 FORTRAN90 - FORTRAN intégrant l’allocation dynamique
1994 JAVA - langage objet "`pur"', simplification du C++, multi-plateforme
1995 FORTRAN95 - évolution du FORTRAN90
1996 OCAML (Objective CAML) - Caml objet
1996 ANSI C++ - Normalisation du C++
2000 C# - C++ simplifié, concurrent du JAVA (Microsoft) Sim. Numérique – Introduction21
Quel langage ? : Orienté Objet
Langage permettant de déclarer des nouveaux types de
variable (objet) auxquels sont attachés :
des données (voir d’autres objets) : structuration des données
des fonctions : structuration des fonctionnalités
des opérateurs (+,-,…) : structuration sémantique
Intérêts :
manipuler plus simplement des structures complexes (matrice,...)
complexité reportée dans la définition des objets
structuration implicite du code
séparation des concepts
plus grande ré-utilisabilté
très adapté au calcul scientifique (objets mathématiques naturels)
Objectifs du cours
Appréhender divers aspects de la
programmation scientifique