]> AND Private Git Repository - cours-mesi.git/blobdiff - pbnum.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
j
[cours-mesi.git] / pbnum.tex
index 58b3a0a92ff38b1b9b5f9e74c328cec1de5073e0..613c6a6238f2363442cd094473b653236ae77c33 100644 (file)
--- a/pbnum.tex
+++ b/pbnum.tex
@@ -1,8 +1,7 @@
 Ce chapitre s'inspire de~\cite{jedrzejewski2005introduction} et 
 de~\cite{bastien2003introduction}. 
 On y pointe quelques erreurs classiques en calcul numérique.
 Ce chapitre s'inspire de~\cite{jedrzejewski2005introduction} et 
 de~\cite{bastien2003introduction}. 
 On y pointe quelques erreurs classiques en calcul numérique.
-
-On peut classer les erreurs en plusieurs groupes:
+On peut classer ces erreurs en plusieurs groupes:
 \begin{itemize}
 \item les erreurs de calcul en machine: elles sont dues aux arrondis de 
   calcul pour les nombres flottants, par exemple.
 \begin{itemize}
 \item les erreurs de calcul en machine: elles sont dues aux arrondis de 
   calcul pour les nombres flottants, par exemple.
@@ -39,7 +38,7 @@ permettant d'évaluer la fonction factorielle.
 \lstset{language=Java}
 \begin{figure}
 \begin{scriptsize}
 \lstset{language=Java}
 \begin{figure}
 \begin{scriptsize}
-\begin{minipage}{0.68\textwidth}
+\begin{minipage}{0.65\textwidth}
 \begin{lstlisting}
  class TestFactorielle{    
    public static int  factorielle(int n){
 \begin{lstlisting}
  class TestFactorielle{    
    public static int  factorielle(int n){
@@ -67,7 +66,8 @@ def factorielle(n):
     return r
 
 for j in range(36):
     return r
 
 for j in range(36):
-    print j, factorielle(j)
+    print(str(j) + " " 
+          + str(factorielle(j)))
 \end{lstlisting}
 \end{minipage}
 \end{scriptsize}
 \end{lstlisting}
 \end{minipage}
 \end{scriptsize}
@@ -75,7 +75,8 @@ for j in range(36):
 \end{figure}
 
 En Java, on a:
 \end{figure}
 
 En Java, on a:
-\begin{eqnarray*}
+$$
+\begin{array}{rcr}
 5!&=& 120\\
 & \vdots&\\
 12! &= & 479001600 \\
 5!&=& 120\\
 & \vdots&\\
 12! &= & 479001600 \\
@@ -87,8 +88,8 @@ En Java, on a:
  &\vdots&\\
 34! & = & 0 \\
 35! & = & 0 
  &\vdots&\\
 34! & = & 0 \\
 35! & = & 0 
-\end{eqnarray*}
-
+\end{array}
+$$
 On remarque que 
 \begin{itemize}
 \item le résultat donné pour 13! est différent de 13 fois le résultat de 12!
 On remarque que 
 \begin{itemize}
 \item le résultat donné pour 13! est différent de 13 fois le résultat de 12!
@@ -98,7 +99,8 @@ On remarque que
 \end{itemize}
 
 Par contre en Python 2.7 on a des résultats cohérents:
 \end{itemize}
 
 Par contre en Python 2.7 on a des résultats cohérents:
-\begin{eqnarray*}
+$$
+\begin{array}{rcr}
 12! &= &479001600\\
 13! & =& 6227020800\\
 & \vdots & \\
 12! &= &479001600\\
 13! & =& 6227020800\\
 & \vdots & \\
@@ -106,7 +108,8 @@ Par contre en Python 2.7 on a des résultats cohérents:
  & \vdots & \\
 34!&=& 295232799039604140847618609643520000000 \\
 35! & =&10333147966386144929666651337523200000000
  & \vdots & \\
 34!&=& 295232799039604140847618609643520000000 \\
 35! & =&10333147966386144929666651337523200000000
-\end{eqnarray*}
+\end{array}
+$$
 
 Les deux langages travaillent pourtant avec des entiers et ne sont donc pas 
 exposés aux erreurs d'arrondis.
 
 Les deux langages travaillent pourtant avec des entiers et ne sont donc pas 
 exposés aux erreurs d'arrondis.
@@ -115,8 +118,8 @@ Expliquons l'erreur d'interprétation du langage java.
 Celui-ci code chaque entier avec 32 bits. 
 Le bit le plus à gauche est celui de signe. Il reste donc 31 bits.
 Cela permet de couvrir tous les entiers de l'intervalle
 Celui-ci code chaque entier avec 32 bits. 
 Le bit le plus à gauche est celui de signe. Il reste donc 31 bits.
 Cela permet de couvrir tous les entiers de l'intervalle
-$\llbracket -2147483648, 2147483647, \rrbracket$. Le tableau donné à la 
-figure~\ref{table:codage:entiers} donne la correspondance entre 
+$$\llbracket -2147483648, 2147483647 \rrbracket.$$ 
+Le tableau~\ref{table:codage:entiers} donne la correspondance entre 
 certains entiers et le version binaire. 
 
 
 certains entiers et le version binaire. 
 
 
@@ -139,7 +142,7 @@ $$
 \end{array}
 $$
 \end{scriptsize}}
 \end{array}
 $$
 \end{scriptsize}}
-\caption{Correspondance décimaux-binaires}\label{table:codage:entiers}
+\caption{Correspondance entiers-binaires}\label{table:codage:entiers}
 \end{table}
 
 
 \end{table}
 
 
@@ -211,9 +214,9 @@ numériquement de $b^2$.
 \item En pratique quelle va être sa valeur si l'interpréteur fait des 
   approximations. 
 \item Cette erreur d'arrondi est-elle effectuée dans le calcul de $x_1$?
 \item En pratique quelle va être sa valeur si l'interpréteur fait des 
   approximations. 
 \item Cette erreur d'arrondi est-elle effectuée dans le calcul de $x_1$?
-\item Montrer qu'on pourrait calculer la racine $x_2$ avec $x_2= \frac{c}{x_2}$.
-\item Cette nouvelle méthode permet-elle de trouver le signe de $x_2$, et 
-est-elle plus précise?
+\item Montrer qu'on pourrait calculer la racine $x_2$ avec $x_2= \frac{c}{x_1}$.
+\item Cette nouvelle méthode permet-elle de trouver le signe de $x_2$ 
+Est-elle plus précise?
 \end{enumerate}   
 \end{Exo}
 
 \end{enumerate}   
 \end{Exo}
 
@@ -227,9 +230,68 @@ aux questions précédentes en effectuant les calculs en java.
 \section{Erreurs sur les données}
 
 Les données provenant de mesures physiques sont souvent entachées d'erreurs.
 \section{Erreurs sur les données}
 
 Les données provenant de mesures physiques sont souvent entachées d'erreurs.
-Par exemple, un traceur GPS ne peut avoir une précision inférieure à 8m 
+Par exemple, un traceur GPS ne peut avoir une précision inférieure à 8m
+
+Ainsi, lorsqu'une méthode de calcul s'applique à des données physiques, 
+on doit étudier l'influence des erreurs sur le résultats numérique calculé.
+Si une petite erreur sur les données provoque un changement radical de 
+la solution calculée, le problème est dit \emph{mal conditionné}.
+
+
+On cherche par exemple à résoudre le problème à deux équations 
+et deux inconnues suivant:
+$$
+\left\{
+  \begin{array}{llllll}
+    1,2969 x & + & 0,8648 y & = & 0,8642 & L_1\\
+    0,2161 x & + & 0,1441 y & = & 0,1440 & L_2.
+  \end{array}
+\right.
+$$
+Ce système est équivalent à 
+$$
+\left\{
+  \begin{array}{llllll}
+    1,2969 x & + & 0,8648  y & = & 0,8642 & L_1\\
+             & + & 10^{-8} y & = & -2 \times 10^{-8} & 1,2969.L_2-0,2161.L1 
+  \end{array}
+\right.
+$$
+qui a pour unique solution $\left(\begin{array}{r} 2 \\ -2
+  \end{array}
+  \right)$.
+Si on considère maintenant le système légèrement modifié suivant:
+$$
+\left\{
+  \begin{array}{llllll}
+    1,2969 x & + & 0,8648 y & = & 0,8642 & L_1\\
+    0,2161 x & + & 0,144 y & = & 0,1440 & L_2
+  \end{array}
+\right.
+$$
+Une valeur approchée à $10^{-5}$ près de l'unique solution de ce système 
+serait $\left(\begin{array}{r} 0.66626 \\ 0.00015
+  \end{array}
+  \right)$. 
+
+On constate qu'une infime modification du système initial a eu de 
+grandes répercutions sur les solutions du système.
 
 
 
 
+  
+
+
+
+
+
+
+
+
+
+
+\begin{TP}
+
 \begin{Def}[conditionnement]
 Soit $A$ une matrice inversible. Le  \emph{conditionnement} de $A$, noté 
 $\textit{cond}(A)$ est défini par 
 \begin{Def}[conditionnement]
 Soit $A$ une matrice inversible. Le  \emph{conditionnement} de $A$, noté 
 $\textit{cond}(A)$ est défini par 
@@ -240,9 +302,6 @@ Une matrice $A$ est dite bien conditionnée si son conditionnement
 $\textit{cond}(A)$ est proche de 1.
 \end{Def}
 
 $\textit{cond}(A)$ est proche de 1.
 \end{Def}
 
-
-
-\begin{TP}
 On considère les matrices 
 $$ A = \left( 
 \begin{array}{llll}
 On considère les matrices 
 $$ A = \left( 
 \begin{array}{llll}
@@ -318,7 +377,7 @@ B' = \left(
 33,1 \\
 30,9 \\
 \end{array}
 33,1 \\
 30,9 \\
 \end{array}
-\right)  
+\right).  
 $$ 
 \item Que peut-on en conclure?
 \end{enumerate}
 $$ 
 \item Que peut-on en conclure?
 \end{enumerate}