X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/cours-mesi.git/blobdiff_plain/f4fb6abd4d0ca7a866d0cba93347244e9797040a..31570914e2cee6bc2cf78fa5c0fb45cd867242be:/pbnum.tex?ds=sidebyside diff --git a/pbnum.tex b/pbnum.tex index 58b3a0a..613c6a6 100644 --- 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. - -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. @@ -39,7 +38,7 @@ permettant d'évaluer la fonction factorielle. \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){ @@ -67,7 +66,8 @@ def factorielle(n): return r for j in range(36): - print j, factorielle(j) + print(str(j) + " " + + str(factorielle(j))) \end{lstlisting} \end{minipage} \end{scriptsize} @@ -75,7 +75,8 @@ for j in range(36): \end{figure} En Java, on a: -\begin{eqnarray*} +$$ +\begin{array}{rcr} 5!&=& 120\\ & \vdots&\\ 12! &= & 479001600 \\ @@ -87,8 +88,8 @@ En Java, on a: &\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! @@ -98,7 +99,8 @@ On remarque que \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 & \\ @@ -106,7 +108,8 @@ Par contre en Python 2.7 on a des résultats cohérents: & \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. @@ -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 -$\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. @@ -139,7 +142,7 @@ $$ \end{array} $$ \end{scriptsize}} -\caption{Correspondance décimaux-binaires}\label{table:codage:entiers} +\caption{Correspondance entiers-binaires}\label{table:codage:entiers} \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 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} @@ -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. -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 @@ -240,9 +302,6 @@ Une matrice $A$ est dite bien conditionnée si son conditionnement $\textit{cond}(A)$ est proche de 1. \end{Def} - - -\begin{TP} On considère les matrices $$ A = \left( \begin{array}{llll} @@ -318,7 +377,7 @@ B' = \left( 33,1 \\ 30,9 \\ \end{array} -\right) +\right). $$ \item Que peut-on en conclure? \end{enumerate}