ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/document/GMC1035/introduction.tex
Revision: 948
Committed: Wed Aug 8 13:46:37 2018 UTC (6 years, 9 months ago) by francois
Content type: application/x-tex
File size: 16583 byte(s)
Log Message:
mise a jour note de cours GMC1035

File Contents

# User Rev Content
1 francois 948
2    
3    
4    
5    
6    
7     \begin{encadre}{Objectif de l'introduction}
8     L'ensemble des solutions du cours est résolu avec un ordinateur. L'objectif de ce chapitre est de comprendre la manière dont un ordinateur effectue les calculs de base : addition, soustraction, multiplication
9     \end{encadre}
10     \\[1cm]
11     \begin{encadre}{Connaissances antérieures nécessaires}
12     \begin{itemize}
13     \item les mathématiques : représentation de nombre dans différentes bases, Calcul différentiel.
14     \item programmation de base en Basic ou C : les types, les opérations élémentaires et la structuration de programme en mode console
15     \end{itemize}
16    
17     \end{encadre}
18    
19    
20 francois 939 \section{Mathématiques versus méthodes numériques}
21     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.
22     \\
23     Par exemple :
24     \begin{itemize}
25     \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.
26     \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.
27    
28     \end{itemize}
29     Le recours à l'ordinateur est obligatoire pour automatiser les tâches.
30     \\
31     \\
32     \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).}
33     \\
34     \\
35     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.
36     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$.
37     \\
38     \\
39     \emph{L'utilisation d'un ordinateur pour solutionner des problèmes numériques introduit \underline{\textbf{nécessairement}} une erreur de calcul.}
40    
41     \section[La représentation des nombres]{Représentation des nombres à l'aide d'un ordinateur}
42     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.
43     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).
44    
45    
46     \subsection{Entiers positifs}
47     L'entier positif $N$ en base 10 est représenté par $n$ bits en base 2:
48    
49     \begin{equation*}
50     (N)_{10}=(a_{n-1}a_{n-2}a_{n-3}...a_2a_1a_0)_2
51     \end{equation*}
52     Les $a_i$ sont les différents bits et valent 0 ou 1 et
53     \begin{equation*}
54     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
55     \end{equation*}
56    
57     Exemple : $(300)_{10}=(?)_2$
58     \begin{eqnarray*}
59     \frac{300}{2}&=&150\quad reste\,0\quad a_0=0\\
60     \frac{150}{2}&=&75\quad reste\,0\quad a_1=0\\
61     \frac{75}{2}&=&37\quad reste\,1\quad a_2=1\\
62     \frac{37}{2}&=&18\quad reste\,1\quad a_3=1\\
63     \frac{18}{2}&=&9\quad reste\,0\quad a_4=0\\
64     \frac{9}{2}&=&4\quad reste\,1\quad a_5=1\\
65     \frac{4}{2}&=&2\quad reste\,0\quad a_6=0\\
66     \frac{2}{2}&=&1\quad reste\,0\quad a_7=0\\
67     \frac{1}{2}&=&0\quad reste\,1\quad a_8=1\\
68     \\soit \quad(300)_{10}&=&(100101100)_2
69     \\verification \quad(100101100)_2&=&1*2^8+1*2^5+1*2^3+1*2^2=256+32+8+4\\&=&300
70     \end{eqnarray*}
71    
72    
73     \subsection{Fraction décimale}
74     Une fraction décimale $f$ est un nombre réel compris entre 0 et 1. On a
75     \begin{eqnarray*}
76     (f)_{10}&=&(0,d_1d_2d_3..........)_2\\
77     ou\quad f&=&d_1*2^{-1}+d_2*2^{-2}+d_3*2^{-3}+......
78     \end{eqnarray*}
79     De cette écriture on remarque que
80     \begin{eqnarray*}
81     2f&=&d_1+f_1\quad \quad f_1\quad nouvelle\quad fraction \quad decimale \\
82     2f_1=2(2f-d_1)&=&d_2+f_2 \quad \quad f_2\quad nouvelle\quad fraction \quad decimale \\
83     2f_2=2(2f1-d_2)&=&d_3+f_3 \quad \quad f_3\quad nouvelle\quad fraction \quad decimale \\
84     \end{eqnarray*}
85     Exemple 1 :
86     \begin{eqnarray*}
87     f&=&0.0625\\
88     2f&=&0.1250=0+0.1250 \quad d_1=0\\
89     2(2f-d_1)&=&0.250=0+0.250 \quad d_2=0\\
90     2(2(2f-d_1)-d_2)&=&0.5=0+0.50 \quad d_3=0\\
91     2(2(2(2f-d_1)-d_2)-d_3)&=&1.=1+0. \quad d_4=1\\
92     \\Soit\quad(0.0625)_{10}=(0,0001)_2
93     \end{eqnarray*}
94     Exemple 2 :
95     \begin{eqnarray*}
96     f&=&\frac{1}{3}\\
97     2f&=&\frac{2}{3}=0+\frac{2}{3} \quad d_1=0\\
98     2(2f-d_1)&=&\frac{4}{3}=1+\frac{1}{3} \quad d_2=1\\
99     2(2(2f-d_1)-d_2)&=&\frac{2}{3}=0+\frac{2}{3} \quad d_3=0\\
100     2(2(2(2f-d_1)-d_2)-d_3)&=&\frac{4}{3}=1+\frac{1}{3} \quad d_4=1\\
101     \\Soit\quad(\frac{1}{3})_{10}=(0,0101...)_2
102     \end{eqnarray*}
103     Exemple 3 :
104     \begin{eqnarray*}
105     f&=&0.0626\\
106     2f&=&0.1252=0+0.1252 \quad d_1=0\\
107     2(2f-d_1)&=&0.2504=0+0.2504 \quad d_2=0\\
108     2(2(2f-d_1)-d_2)&=&0.5008=0+0.5008 \quad d_3=0\\
109     2(2(2(2f-d_1)-d_2)-d_3)&=&1.0016=1+0.0016 \quad d_4=1\\
110     2(2(2(2(2f-d_1)-d_2)-d_3)-d_4)&=&0.0032=0+0.0032 \quad d_5=0\\
111     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\\
112     ...&=&0.0128=0+0.0128 \quad d_7=0\\
113     ...&=&0.0256=0+0.0256 \quad d_8=0\\
114     ...&=&0.0512=0+0.0512 \quad d_9=0\\
115     ...&=&0.1024=0+0.1024 \quad d_{10}=0\\
116     ...&=&0.2048=0+0.2048 \quad d_{11}=0\\
117     ...&=&0.4096=0+0.4096 \quad d_{12}=0\\
118     ...&=&0.8192=0+0.8192 \quad d_{13}=0\\
119     ...&=&1.6384=1+0.6384 \quad d_{14}=1\\
120     ...&=&1.2768=1+0.2768 \quad d_{15}=1\\
121     ...&=&0.5536=0+0.5536 \quad d_{16}=0\\
122     ...&=&1.1072=1.+0.1072 \quad d_{17}=1\\
123     \\Soit\quad(0.0626)_{10}=(0,00010000000001101...)_2
124     \end{eqnarray*}
125     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.\\
126     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.\\
127     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.\\
128    
129     \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.
130     }
131    
132     \subsection{Entiers signés}
133     Pour représenter un nombre entier signé, on utilise la représentation des entiers positifs et on ajoute une représentation
134     \begin{itemize}
135     \item par complément à 2
136 francois 948 \item par excès
137 francois 939 \end{itemize}
138     \subsubsection{Représentation par complément à 2}
139     \begin{eqnarray*}
140     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
141     \end{eqnarray*}
142     Si $N$ est positif $a_{n-1}=0$\\
143     Si $N$ est négatif $a_{n-1}=1$\\
144     exemple avec une représentation sur $n=4$ bits.
145     \begin{eqnarray*}
146     (0101)_2&=&-0*2^3+1*2^2+0*2^1+1*2^0=4+1=(5)_{10}\\
147     (1101)_2&=&-1*2^3+1*2^2+0*2^1+1*2^0=-8+4+1=(-3)_{10}\\
148     (-6)_{10}&=&-2^{n-1}+2=-2^3+2^1=(1010)_2
149     \end{eqnarray*}
150 francois 948 \subsubsection{Représentation par excès}
151 francois 939 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.
152     En général $d=2^n$ ou $d=2^{n-1}$ .\\
153     Exemple avec 4 bits et $d=2^3=8$
154     \begin{eqnarray*}
155     (0000)_2&=&0-d=(-8)_{10}\\
156     (0001)_2&=&1-d=(-7)_{10}\\
157     (0010)_2&=&2-d=(-6)_{10}\\
158     (0011)_2&=&3-d=(-5)_{10}\\
159     (0100)_2&=&4-d=(-4)_{10}\\
160     (0101)_2&=&5-d=(-3)_{10}\\
161     (0110)_2&=&6-d=(-2)_{10}\\
162     (0111)_2&=&7-d=(-1)_{10}\\
163     (1000)_2&=&8-d=(0)_{10}\\
164     (1001)_2&=&9-d=(1)_{10}\\
165     (1010)_2&=&10-d=(2)_{10}\\
166     (1011)_2&=&11-d=(3)_{10}\\
167     (1100)_2&=&12-d=(4)_{10}\\
168     (1101)_2&=&13-d=(5)_{10}\\
169     (1110)_2&=&14-d=(6)_{10}\\
170     (1111)_2&=&15-d=(7)_{10}\\
171     \end{eqnarray*}
172     Exemple avec 8 bits et $d=2^7-1=127$
173     \begin{eqnarray*}
174     (-100)_{10}&=&27-127=27-d\\
175     \end{eqnarray*}
176     27 est le nombre à mettre en base 2.\\
177     \begin{eqnarray*}
178     \frac{27}{2}&=&13 \quad reste \quad 1\\
179     \frac{13}{2}&=&6 \quad reste \quad 1\\
180     \frac{6}{2}&=&3 \quad reste \quad 0\\
181     \frac{3}{2}&=&1 \quad reste \quad 1\\
182     \frac{1}{2}&=&0 \quad reste \quad 1\\
183     Soit\quad(-100)_{10}&=&(11011)_2
184     \end{eqnarray*}
185     Vérification : \\
186     \begin{eqnarray*}
187     (11011)_2&=&2^4+2^3+2^1+2^0=16+8+2+1=27\\
188     (11011)_2&=&(27-d)_{10}=(27-127)_{10}=(-100)_{10}
189     \end{eqnarray*}
190    
191     \subsection{Nombres réels}
192    
193     Un nombre réel $x$ s'écrit en notation flottante $x=\pm m*b^l$\\
194     $m$ est la mantisse.\\
195     $l$ est l'exposant.\\
196     \begin{eqnarray*}
197     m&=&0,d_1d_2d_3...d_n...\\
198     m&=&d_1*b^{-1}+d_2*b^{-2}+d_3*b^{-3}+...+d_n*b^{-n}+...
199     \end{eqnarray*}
200     Le nombre de bits de la mantisse est limité donc on applique une troncature ou un arrondi :
201     \begin{itemize}
202     \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}$
203     \item arrondi : on ajoute $\frac{b}{2}$ au $(n+1)^{eme}$ bit et on fait une troncature à $n$ bits.
204     \end{itemize}
205 francois 948 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 réels :
206 francois 939 \begin{itemize}
207     \item les simples précisions (single ou float selon les langages) codés sur 32 bits.
208     \item les doubles précisions (double dans les langages) codés sur 64 bits.
209     \end{itemize}
210     Un nombre simple précision s'écrit $(d_1d_2...d_{31}d_{32})_2$. On a alors
211     \begin{itemize}
212     \item $d_1$ est le bit de signe.
213     \item $d_2...d_9$ sont les 8 bits de l'exposant avec un excès de $d=d^8-1=127$
214     \item $d_{10}...d_{32}$ sont les 23 bits de la mantisse normalisée. Le premier bit est à 1 et est non sauvegardé.
215     \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$
216     \end{itemize}
217     Un nombre double précision s'écrit $(d_1d_2...d_{63}d_{64})_2$. On a alors
218     \begin{itemize}
219     \item $d_1$ est le bit de signe.
220     \item $d_2...d_{12}$ sont les 11 bits de l'exposant avec un excès de $d=d^{11}-1=1023$
221     \item $d_{13}...d_{64}$ sont les 52 bits de la mantisse normalisée. Le premier bit est à 1 et est non sauvegardé.
222     \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$
223     \end{itemize}
224     La norme impose l'arrondi comme méthode de coupure.\\
225     Exemple :
226     \begin{eqnarray*}
227     (11000001111001000000000000000000)_2&=&(-1)^12^{(10000011)_2}2^{-127}(1,11001)_2\\
228     &=&(-1)^12^{(128+2+1)}2^{-127}(1+1*2^{-1}+1*2^{-2}+1*2^{-5})\\
229     &=&(-1)2^4(1+0.5+0.25+0.03125)\\
230     &=&-28.5
231     \end{eqnarray*}
232     Validation :
233     \begin{eqnarray*}
234     -28.5&=&-28-0.5\\
235     (28)_{10}&=&(11100)_2\\
236     (0.5)_{10}&=&(0,1)_2\\
237     (-28.5)_{10}&=&(-1)^1(11100,1)_2\\
238     &=&(-1)^1(1.11001)_22^4\\
239     &=&(-1)^1(1.11001)_22^{131}2^{-127}\\
240     (131)_{10}&=&(10000011)_2\\
241     (-28.5)_{10}&=&(-1)^12^{(10000011)_2}2^{-127}(1.11001)\\
242     &=&(11000001111001000000000000000000)_2
243     \end{eqnarray*}
244    
245     Il existe quelques nombres flottants particuliers :
246     \begin{itemize}
247     \item $+0$ : tous les bits valent 0.
248     \item $-0$ : Le bit de signe vaut 1 et tous les autres bits valent 0.
249     \item $+\infty$ : Le bit de signe vaut 0, les bits de l'exposant valent 1 et tous les autres bits valent 0.
250     \item $-\infty$ : Le bit de signe vaut 1, les bits de l'exposant valent 1 et tous les autres bits valent 0.
251     \item $+NaN$ : Not a Number. Le bit de signe vaut 0, les bits de l'exposant valent 1 et un autre bit vaut 1.
252     \item $-NaN$ : Not a Number. Le bit de signe vaut 1, les bits de l'exposant valent 1 et un autre bit vaut 1.
253     \end{itemize}
254    
255     \subsection{Effet sur les calculs}
256    
257     En prenant l'exemple suivant :
258     \begin{eqnarray*}
259     \sum_{i=1}^{10000}1.0&=&10000.00000\\
260     \sum_{i=1}^{100000}0.1&=&9998.556640\quad en\quad simple\quad precision\\
261     \sum_{i=1}^{100000}0.1&=&10000.00000001885\quad en\quad double\quad precision\\
262     \end{eqnarray*}
263     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.
264    
265     \section[Ordinateur et représentation des nombres]{Prise en compte de la représentation des nombres dans l'utilisation d'un ordinateur}
266    
267     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.
268     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 :
269     \begin{itemize}
270     \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.
271     \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.
272     \end{itemize}
273    
274     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.
275     \\
276     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$.
277     On a donc :
278     \begin{eqnarray*}
279     \Delta f(x)&=&\mid f(x^*)-f(x)\mid\\
280     f(x)&=&f(x^*\pm \Delta x)=f(x^*)\pm f'(x^*)\Delta x+O((\Delta x)^2)\\
281     f(x)-f(x^*)&\simeq&\mid f'(x)\mid \Delta x\\
282     \Delta f(x)&=&\mid f'(x) \mid \Delta x\\
283     \end{eqnarray*}
284     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 :
285     \begin{eqnarray*}
286     \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
287     \end{eqnarray*}
288    
289    
290     \section{Logiciel de programmation}
291    
292     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.
293     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 :
294     ainsi le nombre 1 s'écrit en notation flottante en simple précision :
295     \begin{eqnarray*}
296     (1)_{10}=(00111111100000000000000000000000)_2
297     \end{eqnarray*}
298 francois 948 alors qu'en entier non signé il s?écrit :
299 francois 939 \begin{eqnarray*}
300     (1)_{10}=(00000000000000000000000000000001)_2
301     \end{eqnarray*}
302     Il faut être très rigoureux dans le choix des types et dans la comparaison des valeurs.
303     \\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:
304     \\
305    
306     \begin{algorithm}[H]
307     \SetAlgoLined
308     \KwData{$\epsilon$}
309     \KwResult{Précision d'un type flottant }
310     $\epsilon=1$\\
311     \While{$\epsilon+1>1$}
312     {
313     $\epsilon '=\epsilon$\\
314     $\epsilon=\frac{\epsilon}{2}$\\
315     }
316 francois 948 précision$=\epsilon '$\\
317 francois 939 \caption{Calcul de la précision d'un flottant}
318     \end{algorithm}
319     \hspace{3cm}\\
320     \\
321 francois 948 Les langages généralement utilisés pour mettre en ?uvre 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 :
322 francois 939 \begin{itemize}
323     \item les datas sont enregistrées dans un fichier texte
324     \item un programme console (sans interface graphique) qui permet de résoudre le problème.
325     \item le résultat est écrit dans un fichier texte
326     \end{itemize}
327     \hspace{1cm}\\
328     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.
329 francois 948 \\[2cm]
330     \begin{encadre}{À retenir}
331     Les calculs effectués avec un ordinateur sont entachés d'erreur numérique. Cette numérique doit être prise en compte dans les futurs calculs ou analyses. La programmation d'une solution doit être rigoureuse pour minimiser cette erreur numérique.
332     \end{encadre}