Digitaliser des images Sommaire easyfitGUI = Modéliser des courbes grabit = Digitaliser des images
Télécharger le programme « grabit » sur le web, le tester en utilisant un moteur de recherche, trouver le site de Mathworks producteur de Matlab à partir du menu de ce site, naviguer jusqu’à la « Communauté des utilisateurs », « Échange de fichiers » Chercher, télécharger et sauver dans votre répertoire de travail le logiciel « grabit » - Dans le fenêtre de commande. Lire l’aide après avoir taper : >> help grabit taper : >> grabit('-sample')
Expérimenter l’utilisation de grabit Calibrer les axes Saisir les points de la courbe verte En cliquant 2 fois lentement (pas de double-clic) sur le nom de la variable « Data001 » du workspace, changer le nom pour simplement : « data » Visualiser les valeurs contenues dans cette variable en double-cliquant sur son nom. Dans une nouvelle figure, représenter la en plaçant la première colonne en abscisse et la seconde en ordonnée Placer titre et labels à votre convenance
Digitaliser 2 droites - Télécharger l’image « iamc2.bmp » à partir du répertoire : http://www.u-picardie.fr/~dellis/tdsMASTER/master_files_TdS/ Digitaliser l’image pour saisir les 2 droites dans 4 variables différentes: x1 et y1 pour la droite du bas; x2 et y2 pour la droite du haut. Représenter y1 = f(x1) dans une figure Matlab.
Ecrire une fonction (I) La façon naturelle d’écrire une fonction est : y = f(x). Etudions un exemple simple. L’équation d’une droite est : y = a*x +b. Dans Matlab, en utilisant l’éditeur, on peut écrire cette équation dans un fichier qui sera sauvé par exemple sous le nom : « ma_droite.m » : function y = ma_droite(a, b, x) y = a* x + b; end Ecrire la fonction « ma_droite » et la sauver dans votre répertoire de travail. A ce moment, il faut la tester dans la fenêtre de commandes . Essayer successivement: >> y=ma_droite(2, 5, 1) 7 >> y=ma_droite(2, 5, [1, 10, 100]) 7, 25, 205 >> x=1:0.1:3; y= ma_droite(2, 5, x); plot(x, y, ‘o’) Le mot « function » est obligatoire. Il signale à Matlab que le fichier est celui d’une fonction et non celui d’un simple programme. Le mot « end » est obligatoire. Il signale à Matlab que la définition de la fonction est terminée. Les variables à gauche du signe = sont les variables de sortie (ici il n’y en a qu’une : y). Les noms sont donnés par l’utilisateur : y, u, t, x, mavariable, sortie, … Quand il existe plusieurs variables de sorties, il faut les placer entre crochet comme dans cet exemple : function [u, v] = exempleavecplusieurssorties(x) u = x + 1; v = x – 1; Le nom de la fonction placée à droite du signe =, ici « ma_droite », doit être le même que le nom du fichier qui sera sauvé. Les variables d’entrée sont placées entre parenthèses (ici 3 variables : a, b et x). x est le vecteur qui contient les abscisses pour lesquelles la fonction calcule les ordonnées y.
Ecrire une fonction (II) Pour utiliser une fonction avec easyfitGUI il faut écrire la fonction dans un format spécifique tel que la fonction n’ait que 2 arguments en entrée : p et x. Ecrire le fichier qu’on appellera « droite.m » en utilisant l’éditeur et le format suivant : function y = droite(p,x) y = p(1) * x + p(2); end - Dans cet exemple, p est un vecteur qui possède 2 éléments : p(1) jouera le rôle de a et p(2) celui de b de l’expression y = a*x + b. - x est le vecteur qui contient les abscisses pour lesquelles la fonction calcule les ordonnées y. Après sauvé le fichier, il faut tester la fonction : >> p=[2, 5]; y=droite(p, 1) 7 >> p=[2, 5]; y=droite(p, [1, 10, 100]) 7, 25, 205 >> p=[2, 5]; x=1:0.1:3; y= droite(p, x); plot(x, y, ‘o’)
Ajuster des paramètres pour approcher des données par un modèle Les variables crées dans l’exercice Digitaliser 2 droites doivent exister. Après avoir étudier les commandes ci-dessous écrites sur une ligne : >> p=[1,2]; y1new = droite(p,x1) ; plot(x1, y1, x1, y1new, ’or’) exécuter plusieurs fois cette ligne dans la fenêtre de commandes afin de chercher par tâtonnement un vecteur p qui s’approche de la droite digitalisée y1 = f(x1). Ces valeurs seront utilisées par la suite comme valeurs initiales à un algorithme utilisé par la fonction easyfitGUI.
Télécharger la fonction easyfitGUI, lire l’aide et l’utiliser pour une droite et pour un modèle en puissance Télécharger le programme « easyfitGUI » sur le site Mathworks ou à partir du répertoire : http://www.u-picardie.fr/~dellis/tdsMASTER/master_files_TdS/. Lancer le programme (la figure comportant y1 = f(x1) doit exister), utiliser l’aide disponible dans le menu de la figure pour trouver la pente et l’ordonnée à l’origine de la droite étudiée. (Voir la diapositive suivante) Télécharger le fichier de données « power1 » dans: http://www.u-picardie.fr/~dellis/tdsMASTER/master_files_TdS/. Après avoir écrit la fonction correspondant au modèle ci-dessous, ajuster les données y=f(x) par une loi de puissance de la forme: y=a*xn + b
>> plot(x,y,'*') >> easyfitGUI Etapes de l’ajustement de données expérimentales >> plot(x,y,'*') >> easyfitGUI Cliquer sur « Select Line » puis sur la courbe à « fitter » Cliquer sur « Input Function » et entrer le nom Cliquer sur « Input Pinit » et entrer autant de valeurs qu’il y a d ’ éléments dans le vecteur p de la fonction modèle. Il ne restera plus qu’à cliquer sur « Start Fit ».
Utiliser easyfitGUI pour un modèle de « pic » - Télécharger l’image de données « iamc1.bmp» depuis : http://www.u-picardie.fr/~dellis/tdsMASTER/master_files_TdS/. Créer la fonction « gauss », correspondant au modèle: 𝑓 𝑥 =𝐴.𝑒𝑥𝑝 − 𝑥− 𝑥 0 2 𝐵 Ajuster les données expérimentales extraite de l’image « iamc1 » et portant sur le premier « pic ».
Télécharger le fichier de données « cassure» dans: Utiliser easyfitGUI pour un modèle nécessitant une indexation « logique » Télécharger le fichier de données « cassure» dans: http://www.u-picardie.fr/~dellis/tdsMASTER/master_files_TdS/ Créer la fonction « droite2 » donnée ci-dessous, étudier les différentes commandes qui la constituent, identifier le rôle de chaque paramètre. Ajuster les données expérimentales du fichier « cassure ». function y=droite2(p,x) x=x(:); logic_inf=x<=p(5); x1=x(logic_inf); logic_sup=x>p(5); x2=x(logic_sup); y1=p(1)*x1+p(2); y2=p(3)*x2+p(4); y=[y1;y2]; end