740 likes | 850 Views
Calcul numérique (avec Maple). Maplesoft http://www.maplesoft.com/ Maple version 9.5. Chapitre 8 : Entrées-Sorties Analyse de Données Quelques mots sur le filtrage d’images. Entrées-Sorties. Entrées-sorties. Notion de « chemin » ( PATH ) dans un système de gestion de fichiers
E N D
Calcul numérique(avec Maple) Maplesoft http://www.maplesoft.com/ Maple version 9.5
Chapitre 8 : Entrées-SortiesAnalyse de DonnéesQuelques mots sur le filtrage d’images
Entrées-sorties • Notion de « chemin » (PATH) dans un système de gestion de fichiers FILENAME := "C:\\Documents and Settings\\chaumont\\Mes documents\\Enseignement\\Maple\\Cours\\07_ressources\\data1.txt":
Entrées-sorties • La notion d’ouverture de fichier
Entrées-sorties • La notion d’ouverture de fichier • fopen retourne un descripteur de fichier (un petit entier). > NBCOLONNE := 2: FILENAME := "data1.txt": fd := fopen(FILENAME, READ); fd := 1
Entrées-sorties • La lecture… • beaucoup de commandes, • choisir en fonction de ses besoins !
Entrées-sorties • Exemple de lecture; commande readdata :
Entrées-sorties • Exemple de lecture; commande readdata : > restart;NBCOLONNE := 2:FILENAME := "data1.txt":fd := fopen(FILENAME, READ):listePoints := readdata(fd, float, NBCOLONNE);fclose(fd):plot(listePoints, style=point);
Entrées-sorties • Exemple d’écriture; commande fprintf : > fd := fopen("testFile.txt",WRITE,TEXT); fd := 0 > fprintf(fd,"This is a test\n"); 15 > fclose(fd);
Entrées-sorties Exemple d’utilisation • Exemple d’utilisation… • Des étudiants de chimie ont effectué des relevés expérimentaux du volume de l’air en fonction de la température (ceci à pression constante). • Ces relevés ont été stockés dans un fichier texte. 1ère colonne : température en °C2ème colonne : volume en mL. Lien data1.txt
Exemple d’utilisation Protocole de mesure...
Entrées-sorties > restart;NBCOLONNE := 2:FILENAME := "C:\\data1.txt":fd := fopen(FILENAME, READ):listePoint := readdata(fd, float, NBCOLONNE);fclose(fd):plot(listePoint, labels=["Temperature (°C)", "Volume(mL)"], title = "Mesure expérimentale du volume d’un gaz à pression constante en fonction de la température", style=point); Lien Code Maple
Entrées-sorties Mesures obtenues par un groupe d’étudiants
Entrées-sorties Exemple d’utilisation Remarque : la loi des gaz parfaits indique que P.V = n.R.T P est la pression (en pascal) ; V est le volume occupé par le gaz (en mètre cube) ; n est la quantité de matière, en mole R est la constante des gaz parfaits (R = 8,314 472 J.K-1.mol-1) T est la température absolue (en kelvin).
Entrées-sorties Exemple d’utilisation Remarque : la loi des gaz parfaits indique que P.V = n.R.T donc V = (n.R/P) × T = cst × T Si T est exprimée en °C on a une expression linéaire V=a.T + bavec a et b deux constantes. D’où la « sensation » de linéarité en regardant le tracé. (Figure montrée 2 transparents avant celui-ci)
Entrées-sorties Exemple d’utilisation Si T est exprimée en °C on a une expression linéaire V=a.T + b avec a et b deux constantes. Question : Déterminer l’équation de la droite ?
Entrées-sorties Exemple d’utilisation Signal image : j i
H L Entrées-sorties Exemple d’utilisation • Représentation : Images et suite d’images ... image Image : tableau HxL de pixels Pixel : * niveau de gris ([0,255]) * couleur (RGB, YUV, …) * autres (multi-bande satellite, mouvement, …) pixel
Entrées-sorties Exemple d’utilisation Le format (image) pgm : P5 128 128 255 ¢¡¢Ÿœ››£¨¬¥”v``gjkmlmmjpvw{ Contenu du fichier :
Analyse de données ;la régression linéaire • En statistiques, il arrive que deux grandeurs X et Y apparaissent liées par relation affine : Y = a.X + b. • La régression linéaire consiste à déterminer une estimation des valeurs a et b et à quantifier la validité de cette relation grâce au coefficient de corrélation linéaire. La généralisation à p variables Y = a0 + a1·X1 + a2·X2 + … + ap·Xp s'appelle la régression linéaire multiple.
Régression linéaire • Soient Mi des points (xi,yi) avec i[1..n], on cherche la droite D dont l'équation est y = a x + b et qui passe au plus près des points Mi. D
xi yi Régression linéaire D yi y = a.xi + b xi
xi yi c’est-à-dire minimiser Régression linéaire On voudrait pour tous les points Mi que (yi - y)² soit le plus petit possible yi y = a.xi + b C’est-à-dire (yi - (a.xi+b))² soit le plus petit possible xi
Régression linéaire • Passer au plus près, selon la méthode des moindres carrés, c'est rendre minimale la somme : • où (yi - axi - b)² représente le carré de la distance verticale du point expérimental Mi à la droite considérée comme la meilleure.
Régression linéaire • Passer au plus près, selon la méthode des moindres carrés, c'est rendre minimale la somme : • Cela revient donc à déterminer les valeurs des paramètres a et b (respectivement le coefficient directeur de la droite et son ordonnée à l'origine) qui minimisent la somme ci-dessus.
Régression linéaire Quelques formules classiques :
Régression linéaire Ré-écriture de a et de b...
Least Square Maple permet d’obtenir immédiatement le calcul de a et b de l'équation y = a x + b : > abscisse := createList(listePoints, 1);ordonnees := createList(listePoints, 2); with(stats): fit[leastsquare[[x,y]]]([abscisse,ordonnees]); y = 71.24130548 + 0.2922096617 x
> f := x -> 71.24130548+.2922096617*x:plot([listePoints, f(x)], x=18.5..22.5, labels=["Temperature (°C)", "Volume(mL)"], title = "Mesure expérimental du volume d'un gaz à pression constante en fonction de la température", style=[point, line]);
Least Square > with(stats): this example uses the defaults to fit the data to the curve y=a*x+b > fit[leastsquare[[x,y]]]([[10,15,17,19],[3,4,5,6]]); This is the same as > fit[leastsquare[[x,y], y=a*x+b, {a,b}]]([[10,15,17,19],[3,4,5,6]]); One can also specify nonlinear curves -- as long as the unknown parameters appear linearly > fit[leastsquare[[x,y], y=a*x^2+b*x+c]]( [[10,15,17,19],[3,4,5,6]]);
Least Square with(stats): fit[leastsquare[[x,y],y=a*x^2+b*x+c]]([[10,15,17,19],[3,4,5,6]]); f := x -> 417/13358*x^2-7583/13358*x+37054/6679; lstPoints := [[10,3],[15,4],[17,5],[19,6]]; plot([f(x), lstPoints], x=-20..20, style=[line, point]);
Régression linéaire Qualité de l’estimation de la linéarité: • Le coefficient de corrélation linéaire est toujours compris entre -1 et 1. • En pratique sa valeur absolue est rarement égale à 1, mais on estime généralement que l'ajustement est valide dès que ce coefficient a une valeur absolue supérieure à
Régression linéaire Qualité de l’estimation de la linéarité:
coefficient de corrélation linéaire Avec la formule... covar := describe[covariance](abscisse, ordonnees): varX := describe[variance](abscisse): varY := describe[variance](ordonnees): covar /(sqrt(varX) * sqrt(varY)); 0.9888453724 Avec Maple... describe[linearcorrelation](abscisse, ordonnees); 0.9888453724
Traitement de données contenant des données aberrantes (outlier) AJOUT DU POINT ABERRANT (19 , 78) abscisseAberrant := [op(abscisse),19]: ordonneesAberrant := [op(ordonnees),78]: fit[leastsquare[[x,y]]]([abscisseAberrant,ordonneesAberrant]); y = 72.79926263 + 0.2192056011 x f_LS_2 := x -> 72.79926263+.2192056011*x: plot([listePoints, [[19.,78.]], f_LS_2(x)], x=18.5..22.5, labels=["Temperature (°C)", "Volume(mL)"], title = "Mesure expérimental du volume d'un gaz à pression constante en fonction de la température", style=[point, point, line], color=[black, black, blue], legend=["Données expérimentales", "Point aberrant", "Least Square"]);
Traitement de données contenant des données aberrantes (outlier) Sans « outlier » = 0.9888453724 Avec « outlier » = 0.7188879334
Traitement de données contenant des données aberrantes (outlier) • The function leastmediansquare of the subpackage stats[fit, ...] fits a curve to the given data using the method of least median of squares. • The equation to fit will be linear (affine) in the unknown parameters. The equation itself need not be linear. For example, specifying vars to be [x,y] implies fitting to the equation y=a*x^2+b*x+c.
Traitement de données contenant des données aberrantes (outlier) The well-known least square regression method suffer from leverage points. By adding a single point to the data, one can change the result to an arbitrary extent. The least median of squares method allows one to add up to half the number of points without changing the result. The price to pay for this robustness is a substantial increase in computation cost.
Traitement de données contenant des données aberrantes (outlier) with(stats): fit[leastsquare[[x,y]]]([abscisse,ordonnees]); y = 71.24130548 + 0.2922096617 x fit[leastmediansquare[[x,y]]]([abscisse,ordonnees]); y = 70.41666667 + 0.3333333333 x f_LS_1 := x -> 71.24130548+.2922096617*x: f_LMS_1 := x -> 70.41666667+.3333333333*x: plot([listePoints, f_LS_1(x), f_LMS_1(x)], x=18.5..22.5, labels=["Temperature (°C)", "Volume(mL)"], title = "Mesure expérimental du volume d'un gaz à pression constante en fonction de la température", style=[point, line, line], color=[black, blue, red], legend=["Données expérimentales", "Least Square", "Least Median Square"]);
Traitement de données contenant des données aberrantes (outlier)
Traitement de données contenant des données aberrantes (outlier) AJOUT DU POINT ABERRANT (19 , 78) abscisseAberrant := [op(abscisse),19]: ordonneesAberrant := [op(ordonnees),78]: fit[leastsquare[[x,y]]]([abscisseAberrant,ordonneesAberrant]); y = 72.79926263 + 0.2192056011 x fit[leastmediansquare[[x,y]]]([abscisseAberrant,ordonneesAberrant]); y = 70.41666667 + 0.3333333333 x f_LS_2 := x -> 72.79926263+.2192056011*x: f_LMS_2 := x -> 70.41666667+.3333333333*x: plot([listePoints, [[19.,78.]], f_LS_2(x), f_LMS_2(x)], x=18.5..22.5, labels=["Temperature (°C)", "Volume(mL)"], title = "Mesure expérimentale du volume d'un gaz à pression constante en fonction de la température", style=[point, point, line, line], color=[black, black, blue, red], legend=["Données expérimentales", "Point aberrant", "Least Square", "Least Median Square"]);
Sans « outlier » Avec « outlier »
Explications sur un exemple with(stats): data := [[1,3],[2,4],[3,5],[1,2]]: abscisse := createList(data, 1); ordonnees := createList(data, 2); fit[leastmediansquare[[x,y]]]([abscisse, ordonnees]); abscisse := [1, 2, 3, 1] ordonnees := [3, 4, 5, 2] y = 2+x f := x -> 2+x; plot([f(x), data], x=-20..20, style=[line, point])
Explications Least Median Squarre data := [[1,3],[2,4],[3,5],[1,2]]: abscisse := createList(data, 1); ordonnees := createList(data, 2); fit[leastmediansquare[[x,y]]]([abscisse, ordonnees]); This is calculated as follows. For example, pick two points, say [1,3] and [2,4]. Pass a straight line through them. In this case it is y=2+x. For each point compute the square of the distance of the line to the point This gives [0,0,0,1]. Find the median through these distances: this gives 0. Now minimize over all possible lines. This is the result. | yi - (a.xi+b) | avec a=1 et b=2
data := [[1,3],[2,4],[3,5],[1,2]]: This is calculated as follows. For example, pick two points, say [1,3] and [2,4]. Pass a straight line through them. In this case it is y=2+x. For each point compute the square of the distance of the line to the point This gives [0,0,0,1]. Find the median through these distances: this gives 0. Now minimize over all possible lines. This is the result. Cas où l’on a pris les points (1,3) et (2,4) ce qui donne la droite y = 1.x + 2 (y = a.x + b avec a = 1 et b = 2)