I.N.S.S.E.T.

– Université de Picardie Licence Maths et SPI – 2ème année

Initiation à Matlab M. Marcoux

TP 10 Traitement de données

1. Introduction
Ce TP introduit la lecture et l’écriture de fichiers à partir de Matlab et la recherche de solutions linéaires approchées de résultats expérimentaux Les points suivants seront abordés : Ø Fichiers textes et entrées-sorties Ø Ajustement linéaire de données Ø Régression orthogonale

2. Les fichiers textes : entrées et sorties formatées
Comme nous l’avons vu dans les précédents TP, un programme exécute des ordres de calcul à partir de données et fournit des résultats. Cette partie permet de voir comment lire et écrire des données dans des fichiers externes.

Les données (resp. les résultats) proviennent généralement d’objets informatiques que l’on appelle fichiers d’entrée (resp. de sortie). Par défaut, ces fichiers sont : • • • L’entrée standard : en général le clavier La sortie standard : en général l’écran L’erreur standard : en général l’écran

A part ces trois fichiers qui sont ouverts automatiquement et jamais fermés (sauf par erreur …), il est souvent nécessaire de rechercher ou stocker des informations sur le disque. Pour cela il faut lire des fichiers existant ou en écrire de nouveaux. 10 - 1

dont on connaît le format. suivant les fichiers : • Les fichiers ayant l’extension ‘.’r’). C’est le format le plus universel. c’est à dire la façon dont sont codés les nombres. sont lus comme en C par la fonction fread.Matlab possède son propre format de fichiers permettant de sauver et de récupérer des variables numériques telles que les filtres ou des signaux générés dans l’environnement de travail.txt’ ou autre) car les données sont écrites sous forme de caractères. …. vidéos au format AVI. La liste des fonctions d’importation /exportation disponibles pour la version est donnée par : >>help iofun (input/ouput functions) De manière générale l’importation/exportation se fait soit par les commandes load et save. correspondant au format Matlab.options).2 . fichiers textes. Différentes variables se sauvent dans un fichier Matlab par la commande : >> save nomfichier var1 var2 var3 • Les fichiers de type ASCII qui peuvent prendre n’importe quelle extension (‘. >>fclose(fid). feuilles de calcul Excel.mat’. 10 . Elle s’utilise de la manière suivante : >>fid=fopen(‘nomfichier’. se chargent par la commande: >>load nomfichier Il se peut qu’un fichier Matlab contienne de nombreuses variables. Une option de la commande load permet de lire ce type de fichiers : >> load nomfichier –ASCII • Les autres fichiers. Matlab propose aussi de nombreuses fonctions permettant de récupérer mais aussi d’écrire des fichiers de tous types : sons au format WAV ou AU. soit par les commandes fread et fwrite du langage C. On vérifiera après chargement quelles ont été les variables importées dans l’espace de travail et leur taille par la commande whos. >>data=fread(fid.

l’angle.m" permettant de lire le fichier contenant le tableau.0001e+00 1.0000e+00 exp(-x) 9. affichant celui-ci à l’écran.9005e-01 9. Pour effectuer ces taches.9900e-01 9. pour 10 valeurs d’un angle θ variant de 0 à 180°. et traçant la courbe correspondante. Exercice 1 : Ø Réalisez un script "ecris.m" stockant dans un fichier "angles. calculant le produit sinus*cosinus. sous la forme d’un tableau à 3 colonnes Ø Ecrivez un script "produit.0000e-5 exp(x) 1. son sinus et son cosinus.9990e-01 9. Matlab a choisis d’emprunter (en les vectorisant) les routines standard de lecture et d’écriture formatée du langage C : fprintf et fscanf Voici un exemple de tableau formaté : x 1. 10 . dans un fichier spécifié par l’utilisateur.txt".0000e-3 1.0000e-2 1. une chaîne de caractères entrée au clavier Ø Vérifiez le contenu du fichier crée à l’aide d’un éditeur quelconque Ø Ecrivez un second script "lis.0000e-1 1. les données seront alors rangées sous forme de tableau.0010e+00 1. Il est alors commode d’utiliser l’option –TABS (à partir de la version 6) de la fonction save pour séparer chaque nombre par une tabulation.0100e+00 1.0484e-01 9.Remarque : L’échange de données entre Matlab et Excel se fait simplement par le biais de fichiers au format ASCII. Il restera alors à remplacer le point séparateur par une virgule à l'aide de l’éditeur.m" stockant à l’aide de la commande fwrite.3 . c'est-à-dire la manière de les écrire dans un fichier texte.0000e-4 1.1051e+00 1.9999e-01 Exercice 2 : Ø Ecrivez un script "angles.m" lisant un fichier donné aide de la commande fread et affichant son contenu à l’écran. Les fonctions fwrite et fread sont très pratiques mais permettent difficilement le formatage des données.

.3.. n) sous la forme : y = f ((a j ).... xin ) . à la fois parce qu’il mène à des équations simples et qu’il se justifie en théorie des probabilités. Nous allons nous intéresser ici au cas où la fonction f est linéaire. s’écrit : S ((a j ) ) = ∑ f ((a j ). a) Méthode de base Comme il n’existe pas de solution exacte à un tel problème dès que le nombre d’équations m dépasse le nombre p d’inconnues. ( xik ) ) − y i N i =1 [ ] 2 On cherche donc à minimiser une somme de carrés. y m ) . Le problème est de calculer les coefficients inconnus a j qui définissent le modèle.. La théorie nous propose un modèle liant y aux x k . c’est pourquoi cette méthode est connue sous le nom de "méthode des moindres carrés".... c'est-à-dire : f ((a j ). ( x k ) ) = ∑ a j x j p j =1 en remplaçant la donnée des ( x k ) par celle des g j (( x k )) .4 . ( x k ) ) où les (a j ) j ≤ p sont des coefficients inconnus. il s’agit de minimiser un critère qui atteindrait un minimum de 0 en cas d’existence de solution exacte... 10 . ( x k ) ) = ∑ a j g j (( x k ) ) p j =1 Les ( x k ) et les g j étant connus on peut toujours se ramener au cas équivalent : f ((a j ). Le critère généralement utilisé. Moindres carrés linéaires Supposons que nous ayons réalisé m expériences ( y1 . chacune d’elles fournissant n mesures ( xi1 .. (k = 1.

où A est le vecteur contenant les inconnues. On écrit la matrice X ayant en ième colonne les coefficients ( xik ) k et le vecteur colonne Y correspondant des y i .m" lisant le fichier "data. on sait théoriquement que dans ce cas la relation suivante est valide : y = ax+b Ø Complétez le script précédent pour calculer les valeurs y i et xi et représenter graphiquement la fonction y = f (x) 10 . Le système s’écrit alors théoriquement : Y = X .0 340 5 80. où Ti est la température absolue en Kelvin.0 1120 Ø Ecrivez ces valeurs expérimentales dans un fichier "data. on a mesuré les valeurs de la constante k d’une réaction chimique.La résolution sous Matlab se déroule de manière très simple. à savoir. et représentant graphiquement la fonction k = f (t ) Si on pose y i = ln(k i Ti ) et xi = 1 Ti . °C 105 k 1 0.8 4 60.59 2 25.00 3. par la division matricielle gauche : A=X\Y Exercice 3 : Suite à des manipulations expérimentales dans un laboratoire.0 30.4 3 39.txt". La résolution au sens des moindres carrés est alors effectuée de la même manière qu’un système linéaire d’équations.5 .txt" sous la forme de 2 colonnes Ø Réalisez un script "trace.9 91. Les relevés donnent le tableau de résultats suivant: Mesure t. à 5 températures différentes. A .

On peut en effet recherche une droite sous deux formes : y = a x + b ou x=cy+d.m" calculant les coefficients a et b au sens des moindres carrés d’une série de points quelconque Ø Ajoutez à ce script le tracé du graphique comportant les données sous forme de points et la courbe de l’approximation linéaire obtenue Ø Insérez dans le script le calcul du critère S définit au a) permettant de connaître l’adéquation du modèle aux données Ø Appliquez cette fonction aux points précédents b) Régression linéaire Dans le cas simple de l’exercice précédent consistant à déterminer une droite passant par des points expérimentaux ( xi .Ø Ecrivez un script "carres.6 . On pourra toujours choisir à priori l’un ou l’autre cas en considérant quelques couples de points pris au hasard. L’équation d’une droite s’écrit alors : − x sin θ + y cos θ + δ = 0 On cherche alors à minimiser : S = ∑ (− xi sin θ + y i cos θ + δ ) 2 i =1 n 10 . il reste que la symétrie entre les xi et les y i n’est pas respectée. On voit facilement que les deux paramétrisations ne sont pas équivalentes et que dans le premier (resp. le second) cas la solution sera très dégradée si la droite est proche de la verticale (resp. l’horizontale). d ) par un problème non linéaire en deux autres variables (θ . On peut aussi régler le dilemme précédent en remplaçant le problème linéaire en (a. y i ) . b) ou (c. il existe plusieurs choix classiques possibles du critère qui conduisent à des solutions différentes. δ ) où θ est l’angle que fait la droite avec l’axe des x et δ la distance signée de la droite à l’origine.

10 .7 . y ) = ( x − x )( y − y ) et var( x) = cov( x. x) Ces grandeurs sont prédéfinies sous Matlab . mêlés à trois points aberrants et le résultat donné par la méthode précédente. ou filtrer les données. y )  1 arctan   var( x) − var( y )  2   n où la barre désigne la moyenne : x = (∑ xi ) n .Géométriquement. ce qui n’est pas toujours le cas. sa limitation principale est qu’elle suppose en fait que la distribution des erreurs sur les données est gaussienne. par les commandes mean et cov Remarque : Quelle que soit la régression utilisée. plutôt que de considérer des distances en abscisses ou en ordonnées. i =1 et cov et var sont respectivement la variance et la covariance définies par : cov( x. Sur les figures qui suivent on voit un exemple de points expérimentaux visuellement alignés. cela revient à chercher à rendre minimale la somme des carrés des distances orthogonales des points à la droite. La résolution du système ∂S ∂S = 0 et = 0 revient alors à traiter : ∂θ ∂δ δ = x sin θ + y cos θ θ=  2 cov( x. Il faut dans ce cas utiliser la méthode des moindres carrés médians consistant à choisir la plus petite médiane à partir d’un tirage aléatoire de points.