Travaux pratiques de programmation Matlab
Chapitre 2 TP1 : Programmation structurée, tracés de courbes (4 séances TP)
Objectif
Le but de ce TP est d’approfondir vos connaissances dans les domaines de la programmation structurée et du tracé de courbes dans Matlab. Une application illustrant graphiquement la notion de développement de Taylor d’une fonction est proposée. Vous aurez à définir des fichiers scripts également appelés M-Files et des fonctions. Vous écrirez des boucles, vous aborderez les notions d’argument, de variables locales, globales, muettes.
Avant toute chose vous lirez la documentation relative aux functions et fichiers scripts (help function, help script).
Méthodologie
– Créer le répertoire T P 1 qui contiendra tous les scripts et toutes les fonctions à programmer. Nommer main.m le script principal qui regroupe les lignes de commandes principales de la programmation du TP.
– Pour trouver de l’aide sur une fonction MATLAB ou rechercher le nom d’une fonction, lancer les commandes help et lookfor (help nom_de_la_commande dans la fenêtre de commande MATLAB. Exemple : help eig). Regarder à la fin de l’aide, le paragraphe See also pour connaître le nom des fonctions similaires.
– Ajouter commentaires et indentation pour améliorer la lisibilité du code pour un usage ultérieur.
– L’utilitaire d’édition imposé estt l’éditeur Emacs.
– Il est fortement conseillé de travailler par écrit sur une feuille (algorithme) avant de commencer l’écriture du programme avec le langage Matlab.
– Il est aussi fortement conseillé de tester les lignes de commandes au fur et à mesure de la construction de votre programme
– Pensez à écrire un programme principal condensé et à faire appel à des fonctions aussi souvent que possible.
– Un programme principal commence toujours par les instructions : clear all : efface toutes les variables en mémoire clf : efface toutes les figures
Premiers pas
On s’intéresse aux fonctions de tracés proposées par Matlab. Pour illustrer ces fonc-tionnalités, on considère une famille de fonctions définie par : fα(x) = 1 + α x cos(α x) (2.1)
Traçons cette fonction pour x ∈ [0, 3] et pour trois valeurs du paramètre α. Dans cette première partie « Premiers Pas », le travail proposé consiste à utiliser des boucles au sein d’un fichier script unique. Vous travaillerez donc en consignant les commandes Matlab dans un fichier script dénommé script0.m.
1. Construire un vecteur x composé de 50 points équirépartis entre 0 et 3.
2. A l’aide d’une boucle sur les éléments du vecteur x, construire un vecteur y image de x par la fonction fα pour α = 1 (help for).
3. Remplacer la boucle for utilisée précédemment par l’opérateur ’.*’. Expliquer la différence entre ’.*’ et ’*’.
4. Tracer la fonction fα sur l’intervalle [0, 3] pour des valeurs du paramètre égales à 1, 2 et 3 sur la même figure. Chacune des courbes devra être tracée avec une couleur différente (help hold on, help plot(x1,y1,x2,y2,x3,y3)).
5. Modifier le programme afin de réaliser une pause entre les tracés, suspendre l’exécu-tion du script jusqu’à ce que l’utilisateur presse la touche « Entrée ». Vous indiquerez un message expliquant à l’utilisateur comment reprendre l’exécution du programme (help display, pause).
Définition de fonctions
L’écriture répétitive de y = 1 + (α x cos(α x))2 est fastidieuse et source d’erreurs. Elle peut être évitée en écrivant un programme principal qui fait appel à un autre fichier contenant la définition de cette fonction. Une fonction est écrite dans un fichier différent de celui du « programme principal ». En langage Matlab le nom du fichier de la fonction doit être le même que celui de la fonction. Une fois créée, cette fonction peut être appelée à partir de n’importe quel autre programme principal ou fonction. La notion de fonction est donc associée à l’idée de bibiothèque de fonctions. Votre intérêt est de créer des fonctions les plus générales possibles et d’y associer un mode d’emploi en plaçant des commentaires sur la deuxième ligne du fichier fonction.
Exemple : la fonction toto(x,y) sera définie dans le fichier toto.m. Les premières lignes de ce fichier doivent être : function resultat = toto(x,y)
% fonction sommant ses arguments resultat = x+y;
Dans les autres programmes, cette fonction est appelée en précisant la valeur des argu-ments. Les arguments x et y sont des variables dites muettes : elles servent à réserver une zone mémoire qui reçoit les valeurs utilisées lors de l’appel de la fonction par le programme principal. L’exemple ci-dessous devrait vous permettre de mieux comprendre ce point.
% programme principal appelant la fonction toto
…
% avec des valeurs
Somme1 = toto(4,3)
…
% ou des noms de variables après affectation a = 1; b = 2;
Somme2 = toto(a,b)
…
Ici, x, premier argument de la fonction toto(x,y), reçoit la valeur de la variable a au moment où la fonction est appelée, soit 1.
1. Définir la fonction Matlab fa2arg.m qui prend comme arguments d’entrée x et α, et qui retourne la valeur de fα(x) (help function). Les premières lignes du fichier fa2arg.m devront être les suivantes :
function R = fa2arg(x,Alpha)
% fonction calculant 1+(Alpha*x*cos(Alpha*x))^2
% Appel
% y = fa2arg(x1,Alpha1)
…
Tester votre fonction.
Une autre possibilité est de créer une fonction avec un seul argument x et de définir le paramètre α comme variable globale. Une variable globale permet de communiquer une valeur entre le programme principal et les fonctions sans la passer comme argument de fonction.
La variable globale Alpha est visible depuis tout programme ou fonction qui contiendra l’instruction global Alpha (help global). Cette instruction doit être présente dans les deux programmes entre lesquels on souhaite échanger la valeur de la variable.
2. Écrire une fonction matlab fa1arg.m qui prend comme unique argument d’entrée x ; le paramètre (noté α) étant traité comme une variable globale.
function Res = fa1arg(x)
% fonction retournant 1+(Alpha*x*cos(Alpha*x))^2
% Le paramètre Alpha est une VARIABLE GLOBALE
% Appel
% y = fa1arg(x1)
global Alpha
…
3. Évaluer votre fonction avec un argument scalaire.
4. Les fonctions Matlab utilisent couramment des arguments non scalaires. Tester votre fonction en passant un argument x de type vecteur. Expliquer le message d’er-reur résultant. Procéder aux éventuelles corrections pour que cette évaluation soit possible.
Représentation de fonctions
Vous travaillerez pour cette partie en consignant les commandes dans le fichier script script1.m.
1. Représenter la fonction fa sur l’intervalle [1, 10] pour α = 1 (on pourra utiliser 50 points d’évaluation) (help plot).
2. Ajouter sur la même figure la représentation de la fonction pour α = 3 (sur l’intervalle [1, 10]) en utilisant une ligne de style et de couleur différents de celle du premier tracé (help hold on, doc linespec si vous utilisez la version complète de Matlab sinon les styles de lignes sont présentés dans l’aide de la fonction plot).
3. Effacer la fenêtre graphique (help clf). Représenter sur cette figure la fonction pour α = 2 et α = 3 sur l’intervalle [0, π]. Vous utiliserez une échelle logarithmique pour l’axe des ordonnées (help semilogy).
4. Ajouter une légende à la figure en vous assurant qu’elle ne masque pas les tra-cés (help legend). Ajouter un titre (help title) et préciser les quantités repré-sentées par chacun des axes. Le texte écrit devra avoir une taille de police de 16 (help FontSize).
title(’titre du trace’,’Fontsize’,16);
5. Fixer la taille de l’axe en x à l’intervalle d’étude [0, π]. Vous laisserez l’axe y inchangé (help axis).
6. Nous allons maintenant représenter la fonction pour quatre valeurs différentes du paramètre α (π/2, 2π, 3π, 6π) sur une nouvelle et unique fenêtre graphique. Pour cela, la figure sera subdivisée en quatre. Vous préciserez pour chaque tracé la va-leur du paramètre considéré (les symboles π et α devront apparaître dans le titre) (help figure, help subplot, help plot, help title, help texlabel).
Développement de Taylor d’une fonction de plusieurs variables
Vous travaillerez pour cette partie en consignant les commandes dans le fichier script Taylor.m. Commencer par écrire trois fichiers « fonction » que vous appelerez ensuite depuis ce programme principal.
Mettons en oeuvre le developpement de Taylor (ou Taylor-Young) d’une fonction pour construire le plan tangent à une surface. Considérons une fonction f définie de R2 dans R. Le graphe de cette fonction définit une surface S dont chaque point M a pour coordonnées M = (x, y, z) avec z = f(x, y)).
S = {(x, y, f(x, y)) | (x, y) ∈ R2
On recherche l’équation du plan tangeant à la surface S en un point M0 de S. Le dévelop-pement de Taylor de la fonction f au voisinage du point M0 de coordonnées (x0, y0, z0) = (H0, z0) avec z0 = f(x0, y0) et H0 = (x0, y0) est donné par
f(H0 + h) = f(x0, y0) + hT .rf(x0, y0) + o(|h|) (2.2)
où rf(x0, y0) est appelé vecteur gradient de f au point H0 = (x0, y0) et est donné par
rf(x0, y0) = ∂x (x0, y0), ∂y (x0, y0) T
(2.3)
∂f ∂f et h = (h1, h2)T est un vecteur accroissement. On rappelle que la notation o(|h|) = |h|ε(h) désigne un reste petit devant |h| et qui peut être négliger en première approximation.
Ainsi on a en développant la formule (2.2)
∂f ∂f f(x0 + h1, y0 + h2) = f(x0, y0) + h1. (x0, y0) + h2. (x0 , y0) + o(|h|) (2.4) ∂x ∂y
On en déduit que le plan tangeant à S en M0 a pour équation
z = f(x0, y0) + x ∂f (x0, y0) + y ∂f (x0, y0) ∂x ∂y
L’objectif de cette partie est de vérifier que le vecteur gradient de f évalué en (x0, y0) permet de construire une base du plan tangent à la surface au point (x0, y0). Cette base est donnée, par exemple, par les vecteurs ~u et ~v suivants
−−→ = 1, 0, ∂x (x0, y0) −−→ = 0, 1, ∂y (x0, y0) (2.5)
~u = ∂x et ~v = ∂y
∂OM ∂f ∂OM ∂f
On se propose d’étudier la fonction suivante
x3 y2
f(x, y) = + (2.6)
Construction des fichiers fonction f et rf
1. Écrire une fonction matlab f3d qui prend comme unique argument le vecteur H et qui retourne la valeur de la fonction f au point de coordonnées H = (x, y) function Res = f3d(H)
% fonction retournant la valeur z=f(x,y) Res=
2. Écrire une fonction matlab gradf qui prend comme argument le vecteur H et qui retourne le vecteur gradient de la fonction f au point de coordonnées H = (x, y) function Res = gradf(H)
% fonction retournant le vecteur [df/dx; df/dy] Res=
3. Écrire une fonction matlab plantangent qui prend comme arguments les deux vecteurs h et H et qui retourne l’approximation de f(H + h) calculée par la formule de Taylor (2.2).
function Res = plantangent(X,h)
% fonction retournant la valeur de f en X+h Res=
Tracé de la surface en 3D
Vous travaillerez ici dans le fichier script Taylor.m. Construire sur papier l’or-ganigramme de ce programme qui devra afficher sur un même graphique, la surface, un point de cette surface, les vecteurs tangents à la surface et le plan tangent en ce point. Vous ferez appel aux 3 fonctions déjà créées et vous vous aiderez des 4 premières questions qui suivent.
1. Construire deux vecteurs x et y de même taille pour x ∈ [−2, 2] et y ∈ [−3, 3]. A l’aide de la fonction f3d, construire la matrice Z(i, j) = f(x(i), y(j)). Tracez la surface z = f(x, y) (help surf(y,x,Z).
Note : attention à l’ordre des vecteurs, le premier vecteur correspond aux colonnes de Z
2. Placer sur ce graphique un point de cordonnées (x0, y0, f((x0, y0)) au choix (help plot3).
3. Tracer les deux vecteurs formant la base du plan tangent en ce point (help plot3, markerfacecolor, markersize).
4. Calculer les coordonnées des points appartenant au plan tangent en (x0, y0, f((x0, y0)) dans un voisinage de plus ou moins 0,5 dans les directions x et y. Tracer ce plan sur le même graphique que la surface précédente.
5. Tester votre programme pour différents points (x0, y0).
6. Améliorer la convivialité en demandant à l’utilisateur de saisir les coordonnées du point (x0, y0) (help input).
Annotation d’un tracé, fonctionnalités avancées
Nous allons utiliser les identifiants (handle pour Matlab) des objets graphiques afin de modifier leurs propriétés. Vous travaillerez dans un nouveau fichier script script3.m.
1. (*) Fermer toutes les fenêtres graphiques. Exécuter le fichier script1. Sélectionner la fenêtre 1 et modifier la propriété FontSize des axes de la figure afin d’obtenir des polices de taille 16 (help gca, set).
2. (*) Sélectionner la fenêtre 3. Créer une nouvelle légende identique à la précédente, mais en stoquant l’identifiant de cet objet graphique dans la variable Legend_Handle. Changer la taille des polices utilisées pour la légende (help set).
Remarque : La création d’une nouvelle légende détruit l’ancienne (l’objet légende est unique pour chaque figure). Il est possible de récupérer l’identifiant de la légende grâce à la commande >> findobj(gcf,’Tag’,’legend’)
3. Annoter une figure. Nous allons ajouter sur la figure un texte indiquant la valeur prise par la fonction en un point de l’intervalle.
(a) Exécuter les instructions Matlab suivantes :
figure; Z=’\alpha’; Y=’\approx’ ; X = ’\rightarrow’; Mon_Texte = sprintf(’%s’,’f_’,Z,Y,X); Text_Handle = text(0.5,0.5,Mon_Texte);
Que contiennent les variables Mon_Texte et Text_Handle ? (help sprintf, text).
(b) Quelle est la signification du résultat de l’instruction >>get(Text_Handle,’FontSize’) (help get).
(c) (*) Changer la taille du texte identifié par Text_Handle (help set).
(d) Effacer ce texte (lookfor delete).
(e) (*) Construire une chaîne de caractères de la forme « fZ (X) ≈ Y → » où X, Y , Z sont des chaînes de caractères définies dans des variables (Exemple : >> Z = ’2’; X=’\pi’).
Indications : sprintf, les symboles ≈ et → sont obtenus grâce à respectivement \approx et \rightarrow).
(f) (**) Procéder aux modifications nécessaires pour prendre en compte une variable Z et Y numériques (help num2str).
Expressions et fonctions MATLAB utilisées
clear all
clf
help
script, function
boucle for
hold on
display
pause, input
global
plot, plot3, surf
subplot, markerfacecolor, markersize
axis, legend, title, label
FontSize, semilogy
texlabel, figure
gca, set, get
sprintf, text
1 TP d’initiation (4 séances TP)
1.1 Acces à Matlab
1.2 Variables et Matrices
1.2.1 Matrices
1.2.2 Opérations usuelles
1.2.3 Opérations sur les tableaux
1.2.4 Manipulations sur les matrices
1.3 Boucles et tests
1.4 Fonctions de base
1.4.1 Fonctions scalaires
1.4.2 Fonctions vectorielles
1.4.3 Fonctions matricielles
1.5 Graphiques
1.5.1 Visualisation des courbes en 2D
1.5.2 Visualisation des courbes en 3D
1.5.3 Visualisation des surfaces
1.6 M-fichiers
1.6.1 Fichiers « scripts » ou fichiers d’instructions
1.6.2 Fichiers ”functions”
1.6.3 Fichiers de sauvegarde
1.7 Utiliser les aides en ligne
1.7.1 La recherche par mot clef
1.7.2 La documentation hypertexte
1.8 Expressions et fonctions MATLAB utilisées
2 TP1 : Programmation structurée, tracés de courbes (4 séances TP)
2.1 Méthodologie
2.2 Premiers pas
2.3 Définition de fonctions
2.4 Représentation de fonctions
2.5 Développement de Taylor d’une fonction de plusieurs variables
2.6 Annotation d’un tracé, fonctionnalités avancées
2.7 Expressions et fonctions MATLAB utilisées
3 TP2 : Intégration numérique – Sensibilité à la discrétisation (2 séances TP)
3.1 Méthodologie
3.2 Méthode du point milieu
3.2.1 Eléments théoriques
3.2.2 Algorithme et programmation
3.2.3 Implémentation
3.2.4 Application numérique
3.3 Méthode des trapèzes
3.3.1 Eléments théoriques
3.3.2 Algorithme
3.3.3 Implémentation
3.3.4 Application numérique
3.4 Expressions et fonctions Matlab utilisées
4 TP3 : Recherche des zéros d’une fonction réelle à variable réelle (2 séances TP)
4.1 Objectif
4.2 Méthodologie
4.3 Méthode de dichotomie (sans test de bornes)
4.3.1 Eléments théoriques
4.3.2 Illustration théorique
4.3.3 Algorithme
4.3.4 Implémentation
4.3.5 Application numérique
4.3.6 Contre-exemple
4.4 Méthode de dichotomie (avec test de bornes)
4.4.1 Eléments théoriques
4.4.2 Algorithme
4.4.3 Implémentation
4.4.4 Application numérique
4.5 Expressions et fonctions Matlab utilisées
4.6 Complément théorique sur la précision de calcul
5 TP4 : Diagonalisation de matrices (2 séances TP)
5.1 Méthodologie
5.2 Quelques rappels mathématiques (*)
5.3 Position du problème physique
5.4 Programmation
5.5 Expressions et fonctions MATLAB utilisées
6 TP5 : Application de l’analyse en composantes principales à des données de procédé de traitement biologique en lit bactérien (4 séances TP)
6.1 Méthodologie
6.2 Introduction au traitement biologique en lit bactérien
6.2.1 Lits bactériens
6.2.2 Systèmes de contrôle
6.2.3 Description de la campagne de mesures
6.2.4 Paramètres mesurés
6.3 Introduction à l’analyse en composantes principales (ACP)
6.3.1 Nécéssité d’un traitement statistique
6.3.2 Définition géométrique de l’ACP
6.3.3 Définition algébrique de l’ACP
6.4 Programmation
6.4.1 Réception et tracé des données de bases
6.4.2 Calcul des variables centrées réduites
6.4.3 Composantes principales et vecteurs principaux
6.5 Expressions et fonctions MATLAB utilisées
7 TP6 : Application des séries de Fourier à l’étude du violon (2 séances TD, 2 séances libres et 4 séances TP)
7.1 Etude du mouvement de la corde de violon
7.1.1 Résolution par onde progressive
7.1.2 Résolution par méthode de séparation des variables
7.2 Son produit par l’instrument
7.3 Expressions et fonctions Matlab utilisées
8 Annexe : lexique non exhaustif
9 Index des fonctions et expressions MATLAB utilisées
10 Eléments de programmation structurée
10.1 Une démarche structurée pas-à-pas
10.2 Quelques idées de base de la programmation structurée
10.3 Organigramme en programmation structurée
10.4 Programmation structurée avec Matlab
11 Bibliographie