ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/document/GMC1035/introduction.tex
Revision: 939
Committed: Wed Jun 6 19:49:12 2018 UTC (6 years, 11 months ago) by francois
Content type: application/x-tex
File size: 15609 byte(s)
Log Message:
Ajout des notes de cours de GMC1035

File Contents

# Content
1 \section{Mathématiques versus méthodes numériques}
2 Les mathématiques sont des méthodes génériques et exactes. En réalité, ces méthodes sont rarement applicables sur des problèmes d'ingénierie.
3 \\
4 Par exemple :
5 \begin{itemize}
6 \item l'intégration est bien définie en mathématiques mais la notion de primitives associées à l'intégration est impossible à utiliser parce que dans la plupart des cas la primitive est inconnue.
7 \item Les temps et le nombre de calculs peuvent être importants pour être fait manuellement. Bien que la solution théorique existe, il existe beaucoup de cas en ingénierie où le nombre de calculs nécessaire pour obtenir la réponse est tellement important que la méthode devient inutilisable.
8
9 \end{itemize}
10 Le recours à l'ordinateur est obligatoire pour automatiser les tâches.
11 \\
12 \\
13 \emph{L'objectif est de transformer les théories mathématiques en méthodes numériques pour utiliser un ordinateur pour trouver des solutions numériques à un problème (d'ingénierie dans notre cas).}
14 \\
15 \\
16 Malheureusement il existe une énorme différence entre un ordinateur et la théorie des mathématiques. Sur un ordinateur un nombre ne peut pas être représenté par un nombre infini de chiffres.
17 Par exemple $\frac{1}{3}$ existe en mathématiques et ne peut pas exister en méthodes numériques où on a $0.3333333...3$ et $\frac{1}{3}\neq0.3333333...3$.
18 \\
19 \\
20 \emph{L'utilisation d'un ordinateur pour solutionner des problèmes numériques introduit \underline{\textbf{nécessairement}} une erreur de calcul.}
21
22 \section[La représentation des nombres]{Représentation des nombres à l'aide d'un ordinateur}
23 Un ordinateur est un ensemble de composants électriques. En fait ce sont beaucoup de circuits électriques avec des interrupteurs qui laissent le courant passer ou non. On a donc deux états par circuit 0 ou 1.
24 Les nombres sont représentés à l'aide de ces deux états. Les nombres sont donc représentés uniquement par des 0 et des 1. L'ordinateur fonctionne en base 2 (nombre binaire 0 ou 1 à n bits).
25
26
27 \subsection{Entiers positifs}
28 L'entier positif $N$ en base 10 est représenté par $n$ bits en base 2:
29
30 \begin{equation*}
31 (N)_{10}=(a_{n-1}a_{n-2}a_{n-3}...a_2a_1a_0)_2
32 \end{equation*}
33 Les $a_i$ sont les différents bits et valent 0 ou 1 et
34 \begin{equation*}
35 N=a_{n-1}*2^{n-1}+a_{n-2}*2^{n-2}+a_{n-3}*2^{n-3}+...+a_2*2^2+a_1*2^1+a_0*2^0
36 \end{equation*}
37
38 Exemple : $(300)_{10}=(?)_2$
39 \begin{eqnarray*}
40 \frac{300}{2}&=&150\quad reste\,0\quad a_0=0\\
41 \frac{150}{2}&=&75\quad reste\,0\quad a_1=0\\
42 \frac{75}{2}&=&37\quad reste\,1\quad a_2=1\\
43 \frac{37}{2}&=&18\quad reste\,1\quad a_3=1\\
44 \frac{18}{2}&=&9\quad reste\,0\quad a_4=0\\
45 \frac{9}{2}&=&4\quad reste\,1\quad a_5=1\\
46 \frac{4}{2}&=&2\quad reste\,0\quad a_6=0\\
47 \frac{2}{2}&=&1\quad reste\,0\quad a_7=0\\
48 \frac{1}{2}&=&0\quad reste\,1\quad a_8=1\\
49 \\soit \quad(300)_{10}&=&(100101100)_2
50 \\verification \quad(100101100)_2&=&1*2^8+1*2^5+1*2^3+1*2^2=256+32+8+4\\&=&300
51 \end{eqnarray*}
52
53
54 \subsection{Fraction décimale}
55 Une fraction décimale $f$ est un nombre réel compris entre 0 et 1. On a
56 \begin{eqnarray*}
57 (f)_{10}&=&(0,d_1d_2d_3..........)_2\\
58 ou\quad f&=&d_1*2^{-1}+d_2*2^{-2}+d_3*2^{-3}+......
59 \end{eqnarray*}
60 De cette écriture on remarque que
61 \begin{eqnarray*}
62 2f&=&d_1+f_1\quad \quad f_1\quad nouvelle\quad fraction \quad decimale \\
63 2f_1=2(2f-d_1)&=&d_2+f_2 \quad \quad f_2\quad nouvelle\quad fraction \quad decimale \\
64 2f_2=2(2f1-d_2)&=&d_3+f_3 \quad \quad f_3\quad nouvelle\quad fraction \quad decimale \\
65 \end{eqnarray*}
66 Exemple 1 :
67 \begin{eqnarray*}
68 f&=&0.0625\\
69 2f&=&0.1250=0+0.1250 \quad d_1=0\\
70 2(2f-d_1)&=&0.250=0+0.250 \quad d_2=0\\
71 2(2(2f-d_1)-d_2)&=&0.5=0+0.50 \quad d_3=0\\
72 2(2(2(2f-d_1)-d_2)-d_3)&=&1.=1+0. \quad d_4=1\\
73 \\Soit\quad(0.0625)_{10}=(0,0001)_2
74 \end{eqnarray*}
75 Exemple 2 :
76 \begin{eqnarray*}
77 f&=&\frac{1}{3}\\
78 2f&=&\frac{2}{3}=0+\frac{2}{3} \quad d_1=0\\
79 2(2f-d_1)&=&\frac{4}{3}=1+\frac{1}{3} \quad d_2=1\\
80 2(2(2f-d_1)-d_2)&=&\frac{2}{3}=0+\frac{2}{3} \quad d_3=0\\
81 2(2(2(2f-d_1)-d_2)-d_3)&=&\frac{4}{3}=1+\frac{1}{3} \quad d_4=1\\
82 \\Soit\quad(\frac{1}{3})_{10}=(0,0101...)_2
83 \end{eqnarray*}
84 Exemple 3 :
85 \begin{eqnarray*}
86 f&=&0.0626\\
87 2f&=&0.1252=0+0.1252 \quad d_1=0\\
88 2(2f-d_1)&=&0.2504=0+0.2504 \quad d_2=0\\
89 2(2(2f-d_1)-d_2)&=&0.5008=0+0.5008 \quad d_3=0\\
90 2(2(2(2f-d_1)-d_2)-d_3)&=&1.0016=1+0.0016 \quad d_4=1\\
91 2(2(2(2(2f-d_1)-d_2)-d_3)-d_4)&=&0.0032=0+0.0032 \quad d_5=0\\
92 2(2(2(2(2(2f-d_1)-d_2)-d_3)-d_4)-d_5)&=&0.0064=0+0.0064 \quad d_6=0\\
93 ...&=&0.0128=0+0.0128 \quad d_7=0\\
94 ...&=&0.0256=0+0.0256 \quad d_8=0\\
95 ...&=&0.0512=0+0.0512 \quad d_9=0\\
96 ...&=&0.1024=0+0.1024 \quad d_{10}=0\\
97 ...&=&0.2048=0+0.2048 \quad d_{11}=0\\
98 ...&=&0.4096=0+0.4096 \quad d_{12}=0\\
99 ...&=&0.8192=0+0.8192 \quad d_{13}=0\\
100 ...&=&1.6384=1+0.6384 \quad d_{14}=1\\
101 ...&=&1.2768=1+0.2768 \quad d_{15}=1\\
102 ...&=&0.5536=0+0.5536 \quad d_{16}=0\\
103 ...&=&1.1072=1.+0.1072 \quad d_{17}=1\\
104 \\Soit\quad(0.0626)_{10}=(0,00010000000001101...)_2
105 \end{eqnarray*}
106 Le premier exemple montre le cas d'une fraction avec un nombre fini de décimales en base 10 qui donne une représentation avec un nombre fini de bits en base 2.\\
107 Le deuxième exemple montre le cas d'une fraction avec un nombre infini de décimales en base 10 qui donne une représentation avec un nombre infini de bits en base 2.\\
108 Le troisième exemple montre le cas d'une fraction avec un nombre fini de décimales en base 10 qui donne une représentation avec un nombre infini de bits en base 2.\\
109
110 \emph{Pour sauvegarder une fraction décimale, l'ordinateur effectue une troncature pour toutes les fractions décimales dont le nombre de bits est infini en base 2. Il n'y a pas de correspondance entre le nombre de chiffres après la virgule en base 10 et en base 2.
111 }
112
113 \subsection{Entiers signés}
114 Pour représenter un nombre entier signé, on utilise la représentation des entiers positifs et on ajoute une représentation
115 \begin{itemize}
116 \item par complément à 2
117 \item par excés
118 \end{itemize}
119 \subsubsection{Représentation par complément à 2}
120 \begin{eqnarray*}
121 N=-a_{n-1}*2^{n-1}+a_{n-2}*2^{n-2}+a_{n-3}*2^{n-3}+...+a_2*2^2+a_1*2^1+a_0*2^0
122 \end{eqnarray*}
123 Si $N$ est positif $a_{n-1}=0$\\
124 Si $N$ est négatif $a_{n-1}=1$\\
125 exemple avec une représentation sur $n=4$ bits.
126 \begin{eqnarray*}
127 (0101)_2&=&-0*2^3+1*2^2+0*2^1+1*2^0=4+1=(5)_{10}\\
128 (1101)_2&=&-1*2^3+1*2^2+0*2^1+1*2^0=-8+4+1=(-3)_{10}\\
129 (-6)_{10}&=&-2^{n-1}+2=-2^3+2^1=(1010)_2
130 \end{eqnarray*}
131 \subsubsection{Représentation par excés}
132 Sur n bits on peut représenter $2^n$ entiers. On ajoute au nombre une valeur $d$. $-d$ représente le plus petit nombre entier représentable.
133 En général $d=2^n$ ou $d=2^{n-1}$ .\\
134 Exemple avec 4 bits et $d=2^3=8$
135 \begin{eqnarray*}
136 (0000)_2&=&0-d=(-8)_{10}\\
137 (0001)_2&=&1-d=(-7)_{10}\\
138 (0010)_2&=&2-d=(-6)_{10}\\
139 (0011)_2&=&3-d=(-5)_{10}\\
140 (0100)_2&=&4-d=(-4)_{10}\\
141 (0101)_2&=&5-d=(-3)_{10}\\
142 (0110)_2&=&6-d=(-2)_{10}\\
143 (0111)_2&=&7-d=(-1)_{10}\\
144 (1000)_2&=&8-d=(0)_{10}\\
145 (1001)_2&=&9-d=(1)_{10}\\
146 (1010)_2&=&10-d=(2)_{10}\\
147 (1011)_2&=&11-d=(3)_{10}\\
148 (1100)_2&=&12-d=(4)_{10}\\
149 (1101)_2&=&13-d=(5)_{10}\\
150 (1110)_2&=&14-d=(6)_{10}\\
151 (1111)_2&=&15-d=(7)_{10}\\
152 \end{eqnarray*}
153 Exemple avec 8 bits et $d=2^7-1=127$
154 \begin{eqnarray*}
155 (-100)_{10}&=&27-127=27-d\\
156 \end{eqnarray*}
157 27 est le nombre à mettre en base 2.\\
158 \begin{eqnarray*}
159 \frac{27}{2}&=&13 \quad reste \quad 1\\
160 \frac{13}{2}&=&6 \quad reste \quad 1\\
161 \frac{6}{2}&=&3 \quad reste \quad 0\\
162 \frac{3}{2}&=&1 \quad reste \quad 1\\
163 \frac{1}{2}&=&0 \quad reste \quad 1\\
164 Soit\quad(-100)_{10}&=&(11011)_2
165 \end{eqnarray*}
166 Vérification : \\
167 \begin{eqnarray*}
168 (11011)_2&=&2^4+2^3+2^1+2^0=16+8+2+1=27\\
169 (11011)_2&=&(27-d)_{10}=(27-127)_{10}=(-100)_{10}
170 \end{eqnarray*}
171
172 \subsection{Nombres réels}
173
174 Un nombre réel $x$ s'écrit en notation flottante $x=\pm m*b^l$\\
175 $m$ est la mantisse.\\
176 $l$ est l'exposant.\\
177 \begin{eqnarray*}
178 m&=&0,d_1d_2d_3...d_n...\\
179 m&=&d_1*b^{-1}+d_2*b^{-2}+d_3*b^{-3}+...+d_n*b^{-n}+...
180 \end{eqnarray*}
181 Le nombre de bits de la mantisse est limité donc on applique une troncature ou un arrondi :
182 \begin{itemize}
183 \item troncature : on limite le nombre de bits et on supprime le reste : $m=d_1*b^{-1}+d_2*b^{-2}+d_3*b^{-3}+...+d_n*b^{-n}$
184 \item arrondi : on ajoute $\frac{b}{2}$ au $(n+1)^{eme}$ bit et on fait une troncature à $n$ bits.
185 \end{itemize}
186 A l'aide de cette notation il y a une infinité de solution pour représenter un nombre réel. Une norme a été établie pour les ordinateurs : la norme IEEE-754. Pour les ordinateurs à 32 bits où 64 bits, il existe deux types de nombres reéls :
187 \begin{itemize}
188 \item les simples précisions (single ou float selon les langages) codés sur 32 bits.
189 \item les doubles précisions (double dans les langages) codés sur 64 bits.
190 \end{itemize}
191 Un nombre simple précision s'écrit $(d_1d_2...d_{31}d_{32})_2$. On a alors
192 \begin{itemize}
193 \item $d_1$ est le bit de signe.
194 \item $d_2...d_9$ sont les 8 bits de l'exposant avec un excès de $d=d^8-1=127$
195 \item $d_{10}...d_{32}$ sont les 23 bits de la mantisse normalisée. Le premier bit est à 1 et est non sauvegardé.
196 \item $(d_1d_2...d_{31}d_{32})_2=(-1)^{d_1}2^{d_2...d_9}2^{-127}(1,d_{10}...d_{32})_2$
197 \end{itemize}
198 Un nombre double précision s'écrit $(d_1d_2...d_{63}d_{64})_2$. On a alors
199 \begin{itemize}
200 \item $d_1$ est le bit de signe.
201 \item $d_2...d_{12}$ sont les 11 bits de l'exposant avec un excès de $d=d^{11}-1=1023$
202 \item $d_{13}...d_{64}$ sont les 52 bits de la mantisse normalisée. Le premier bit est à 1 et est non sauvegardé.
203 \item $(d_1d_2...d_{63}d_{64})_2=(-1)^{d_1}2^{d_2...d_{12}}2^{-1023}(1,d_{13}...d_{64})_2$
204 \end{itemize}
205 La norme impose l'arrondi comme méthode de coupure.\\
206 Exemple :
207 \begin{eqnarray*}
208 (11000001111001000000000000000000)_2&=&(-1)^12^{(10000011)_2}2^{-127}(1,11001)_2\\
209 &=&(-1)^12^{(128+2+1)}2^{-127}(1+1*2^{-1}+1*2^{-2}+1*2^{-5})\\
210 &=&(-1)2^4(1+0.5+0.25+0.03125)\\
211 &=&-28.5
212 \end{eqnarray*}
213 Validation :
214 \begin{eqnarray*}
215 -28.5&=&-28-0.5\\
216 (28)_{10}&=&(11100)_2\\
217 (0.5)_{10}&=&(0,1)_2\\
218 (-28.5)_{10}&=&(-1)^1(11100,1)_2\\
219 &=&(-1)^1(1.11001)_22^4\\
220 &=&(-1)^1(1.11001)_22^{131}2^{-127}\\
221 (131)_{10}&=&(10000011)_2\\
222 (-28.5)_{10}&=&(-1)^12^{(10000011)_2}2^{-127}(1.11001)\\
223 &=&(11000001111001000000000000000000)_2
224 \end{eqnarray*}
225
226 Il existe quelques nombres flottants particuliers :
227 \begin{itemize}
228 \item $+0$ : tous les bits valent 0.
229 \item $-0$ : Le bit de signe vaut 1 et tous les autres bits valent 0.
230 \item $+\infty$ : Le bit de signe vaut 0, les bits de l'exposant valent 1 et tous les autres bits valent 0.
231 \item $-\infty$ : Le bit de signe vaut 1, les bits de l'exposant valent 1 et tous les autres bits valent 0.
232 \item $+NaN$ : Not a Number. Le bit de signe vaut 0, les bits de l'exposant valent 1 et un autre bit vaut 1.
233 \item $-NaN$ : Not a Number. Le bit de signe vaut 1, les bits de l'exposant valent 1 et un autre bit vaut 1.
234 \end{itemize}
235
236 \subsection{Effet sur les calculs}
237
238 En prenant l'exemple suivant :
239 \begin{eqnarray*}
240 \sum_{i=1}^{10000}1.0&=&10000.00000\\
241 \sum_{i=1}^{100000}0.1&=&9998.556640\quad en\quad simple\quad precision\\
242 \sum_{i=1}^{100000}0.1&=&10000.00000001885\quad en\quad double\quad precision\\
243 \end{eqnarray*}
244 nous pouvons constater qu'il existe une influence de la représentation des nombres sur le résultat des calculs. Dans certains cas des simples calculs peuvent être erronés. Dans ce cas l'erreur provient du fait que $0.1$ est représenté par un nombre infini de bits en base $2$. Il y a donc $100000$ arrondis à faire avant de de faire la somme.
245
246 \section[Ordinateur et représentation des nombres]{Prise en compte de la représentation des nombres dans l'utilisation d'un ordinateur}
247
248 Les problèmes d'ingénierie nécessitent souvent l'utilisation d'un ordinateur pour se solutionner. Mais l'ordinateur fait nécessairement des erreurs de calculs.
249 L'ingénieur doit dont utiliser un ordinateur en sachant et en assimilant le fait que l'ordinateur fait des erreurs de calculs. Il fait face à deux cas :
250 \begin{itemize}
251 \item il utilise le plus souvent des logiciels commerciaux. Dans ce cas une évaluation préalable du logiciel est nécessaire pour prendre en compte le traitement des erreurs.
252 \item il doit construire un logiciel qui résout une problématique particulière à l'aide d'un logiciel de programmation. Dans ce cas la gestion des erreurs doit être réalisée en même temps que le calcul de la solution du problème.
253 \end{itemize}
254
255 Les erreurs commises à un moment du calcul se propagent dans le reste du calcul. Il faut savoir évaluer cette évolution de l'erreur au travers de tout le calcul.
256 \\
257 Soit $x$ un nombre qui a été arrondi. Il y a une erreur sur sa représentation $x^*$ de $2\Delta x$. On a alors $x=x^*\pm\Delta x$. $x$ est utilisé dans un calcul quelconque $f(x)$. Nous voulons connaître l'erreur sur le résultat $\Delta f(x)$ du calcul en fonction de l'erreur sur $x$.
258 On a donc :
259 \begin{eqnarray*}
260 \Delta f(x)&=&\mid f(x^*)-f(x)\mid\\
261 f(x)&=&f(x^*\pm \Delta x)=f(x^*)\pm f'(x^*)\Delta x+O((\Delta x)^2)\\
262 f(x)-f(x^*)&\simeq&\mid f'(x)\mid \Delta x\\
263 \Delta f(x)&=&\mid f'(x) \mid \Delta x\\
264 \end{eqnarray*}
265 En réalisant le même calcul, on peut généraliser la propagation d'erreur si plusieurs valeurs sont concernées par le calcul :
266 \begin{eqnarray*}
267 \Delta f(x_1,x_2,...,x_n)=\left | \frac{\delta f(x_1,x_2,...,x_n)}{\delta x_1} \right | \Delta x_1+\left | \frac{\delta f(x_1,x_2,...,x_n)}{\delta x_2} \right | \Delta x_2+...+\left | \frac{\delta f(x_1,x_2,...,x_n)}{\delta x_n} \right | \Delta x_n
268 \end{eqnarray*}
269
270
271 \section{Logiciel de programmation}
272
273 Le logiciel de programmation permet d'effectuer les calculs de solutions aux problèmes d'ingénierie en effectuant une gestion des erreurs adéquates.
274 Les notions importantes de programmation sont les variables, les types, les fonctions, les sous routines, les arguments et les moyens d'interaction avec l'utilisateur. Ce sont les types de variables qui permettent de choisir une manière de représenter les nombres. Ce choix comme nous venons de voir est crucial :
275 ainsi le nombre 1 s'écrit en notation flottante en simple précision :
276 \begin{eqnarray*}
277 (1)_{10}=(00111111100000000000000000000000)_2
278 \end{eqnarray*}
279 alors qu'en entier non signé il s'ecrit :
280 \begin{eqnarray*}
281 (1)_{10}=(00000000000000000000000000000001)_2
282 \end{eqnarray*}
283 Il faut être très rigoureux dans le choix des types et dans la comparaison des valeurs.
284 \\Il peut être intéressant de connaître rapidement la précision d'un nombre flottant sur une machine informatique sans connaître exactement son architecture. Cet algorithme permet d'obtenir la précision d'une représentation flottante:
285 \\
286
287 \begin{algorithm}[H]
288 \SetAlgoLined
289 \KwData{$\epsilon$}
290 \KwResult{Précision d'un type flottant }
291 $\epsilon=1$\\
292 \While{$\epsilon+1>1$}
293 {
294 $\epsilon '=\epsilon$\\
295 $\epsilon=\frac{\epsilon}{2}$\\
296 }
297 precision$=\epsilon '$\\
298 \caption{Calcul de la précision d'un flottant}
299 \end{algorithm}
300 \hspace{3cm}\\
301 \\
302 Les langages généralement utilisés pour mettre en oeuvre des méthodes numériques sont le C ou le fortran. Dans ce cours les langages utilisés sont le C ou le visual basic et les travaux sont réalisés selon le principe suivant :
303 \begin{itemize}
304 \item les datas sont enregistrées dans un fichier texte
305 \item un programme console (sans interface graphique) qui permet de résoudre le problème.
306 \item le résultat est écrit dans un fichier texte
307 \end{itemize}
308 \hspace{1cm}\\
309 Un exemple de programme est disponible dans le portail de cours : premierexemple.zip Il illustre le principe de programme console en effectuant simplement une table de multiplication.