Cycle Ingénieur, 1ère année Initiation à Matlab PROGRAMMATION EN MATLAB: Structures de base Ouvrez Matlab dès maintenant ! Initiation à Matlab QCM… Comment écrit on des commentaires dans un script en Matlab ? Comment écrit on des commentaires dans un script en Matlab ? 1. /* mon commentaire */ 1. /* mon commentaire */ ✗ (commentaires en C) 2. // mon commentaire 2. // mon commentaire ✗ (commentaires en C) 3. % mon commentaire 3. % mon commentaire ✔ 4. # mon commentaire 4. # mon commentaire ✗ Initiation à Matlab On souhaite créer un vecteur ligne contenant les entiers entre 0 et 5. Choisissez la (les) syntaxe(s) correcte(s) : On souhaite créer un vecteur ligne contenant les entiers entre 0 et 5. Choisissez la (les) syntaxe(s) correcte(s) : 1. V = [0 ; 1 ; 2 ; 3 ; 4 ; 5] 1. V = [0 ; 1 ; 2 ; 3 ; 4 ; 5] ✗ (crée un vecteur colonne) 2. V = [0 1 2 3 4 5] 2. V = [0 1 2 3 4 5] ✔ 3. V = 0:5 3. V = 0:5 4. V = linspace(0,5,6) 4. V = linspace(0,5,6) 5. V = linspace(0,5,5) 5. V = linspace(0,5,5) QCM… 1. y = 1/(2 + 10*sin(x)^2 )✗(opérateurs / et ^ élément par élément incorrects) 2. y = 1./(2 + 10*sin(x)^2 ) ✗ 3. y = 1./(2 + 10*sin(x).^2 ) ✔ 4. y = 1./(2 + 10.*sin(x).^2 ) ✔ 5. y = 1./(2 .+ 10.*sin(x).^2 ) ✗ ( « .+ » n’existe pas) 6 QCM… QCM… On veut évaluer une fonction y = f(x) pour les différentes valeurs de x contenues dans le vecteur ligne défini par x = linspace(-10,10,1000); Choisissez la (les) syntaxe(s) correcte(s) : 1. y = 1/(2 + 10*sin(x)^2 ) 2. y = 1./(2 + 10*sin(x)^2 ) 3. y = 1./(2 + 10*sin(x).^2 ) ✔ 4. y = 1./(2 + 10.*sin(x).^2 ) ✔ 5. y = 1./(2 .+ 10.*sin(x).^2 ) ✗ (les éléments de V ne sont pas entiers) Initiation à Matlab 7 (commentaires en Python) Initiation à Matlab 5 QCM… On veut évaluer une fonction y = f(x) pour les différentes valeurs de x contenues dans le vecteur ligne défini par x = linspace(-10,10,1000); Choisissez la (les) syntaxe(s) correcte(s) : 3 QCM… 4 Initiation à Matlab Initiation à Matlab 2 Initiation à Matlab 8 9 QCM… QCM… On veut superposer deux courbes sur un même graphe, l’une sera en rouge pointillés avec des marqueurs circulaires, l’autre en trait continu vert. Quelle est la bonne syntaxe ? On veut superposer deux courbes sur un même graphe, l’une sera en rouge pointillés avec des marqueurs circulaires, l’autre en trait continu vert. Quelle est la bonne syntaxe ? 1. figure subplot(1,2,1) plot(x1,y1,’r-’) subplot(1,2,2) plot(x2,y2,’go’) ✗ 1. figure subplot(1,2,1) (on trace sur 2 panneaux différents… plot(x1,y1,’r-’) une courbe en trait rouge continu… subplot(1,2,2) plot(x2,y2,’go’) et une courbe avec des marqueurs circulaires verts non reliés) 2. figure plot(x1,y1,’b--’,x2,y2,’g--’) 2. figure 3. figure plot(x1,y1,’ro--’) hold on plot(x2,y2,’g-’) plot(x1,y1,’b--’,x2,y2,’g--’)✗(courbes pointillées bleue et verte superposées) 3. figure plot(x1,y1,’ro--’) hold on plot(x2,y2,’g-’) ✔ Initiation à Matlab Initiation à Matlab 10 L’organisation d’un projet en Matlab L’organisation d’un projet en Matlab Les commandes dans un Script (ou dans la Command Window) font appel à des fonctions qui exécutent une tache précise Les commandes dans un Script (ou dans la Command Window) font appel à des fonctions qui exécutent une tache précise C C Matlab main.c main.c Mon_script.m int main() { … Arg = Mafonction(arg1,arg2); … } int main() { … Arg = Mafonction(arg1,arg2); … } Initiation à Matlab 11 Les fonctions Dans le fichier Poynting.m function P = Poynting( E , B) % Poynting: calcule le vecteur de Poynting d'un champ électromagnétique % USAGE: P=Poynting(E,B) % E: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ électrique (Ex,Ey,Ez) en V/m. % B: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ magnétique (Bx,By,Bz) en tesla. % P: vecteur réel de 3 éléments, donnant les composantes (rPx,rPy,rPz) % de la partie réelle du vecteur de Poynting complexe en W/m². % Cf. [Jackson, Classical Electrodynamics, 3rd Ed, Wiley 1998] ... %Appel à Mafonction() Arg = Mafonction(arg1,arg2); ... source.c (+ source.h associé) source.c (+ source.h associé) int Mafonction(int arg1, int arg2) { … } int Mafonction(int arg1, int arg2) { … } 12 Mafonction.m mu0 = 4*pi*1E-7; %Perméabilité magnétique du vide (H/m) function Arg = Mafonction(arg1,arg2) ... P = real(cross(E,conj(B)))/(2*mu0); % ‘cross’ calcule le produit vectoriel (“cross product”) end Initiation à Matlab Initiation à Matlab 13 Les fonctions Les fonctions function P = Poynting( E , B) % Poynting: calcule le vecteur de Poynting d'un champ électromagnétique % USAGE: P=Poynting(E,B) % E: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ électrique (Ex,Ey,Ez) en V/m. % B: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ magnétique (Bx,By,Bz) en tesla. % P: vecteur réel de 3 éléments, donnant les composantes (rPx,rPy,rPz) % de la partie réelle du vecteur de Poynting complexe en W/m². % Cf. [Jackson, Classical Electrodynamics, 3rd Ed, Wiley 1998] Dans le fichier Poynting.m Nom de la fonction Variables représentant les arguments d’entrée function P = Poynting( E , B) % Poynting: calcule le vecteur de Poynting d'un champ électromagnétique % USAGE: P=Poynting(E,B) % E: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ électrique (Ex,Ey,Ez) en V/m. % B: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ magnétique (Bx,By,Bz) en tesla. % P: vecteur réel de 3 éléments, donnant les composantes (rPx,rPy,rPz) % de la partie réelle du vecteur de Poynting complexe en W/m². % Cf. [Jackson, Classical Electrodynamics, 3rd Ed, Wiley 1998] mu0 = 4*pi*1E-7; %Perméabilité magnétique du vide (H/m) mu0 = 4*pi*1E-7; %Perméabilité magnétique du vide (H/m) P = real(cross(E,conj(B)))/(2*mu0); % ‘cross’ calcule le produit vectoriel (“cross product”) P = real(cross(E,conj(B)))/(2*mu0); % ‘cross’ calcule le produit vectoriel (“cross product”) end end Nom de la fonction Variable représentant l’argument de sortie En-tête Variables représentant les arguments d’entrée Variable représentant l’argument de sortie En-tête Nom de la fonction En-tête étendu (commentaires) Variable représentant l’argument de sortie 15 Les fonctions Dans le fichier Poynting.m En-tête étendu (commentaires) Dans le fichier Poynting.m Initiation à Matlab 14 Variables représentant les arguments d’entrée function P = Poynting( E , B) % Poynting: calcule le vecteur de Poynting d'un champ électromagnétique % USAGE: P=Poynting(E,B) % E: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ électrique (Ex,Ey,Ez) en V/m. % B: vecteur complexe de 3 éléments, l'amplitude complexe du vecteur % champ magnétique (Bx,By,Bz) en tesla. % P: vecteur réel de 3 éléments, donnant les composantes (rPx,rPy,rPz) % de la partie réelle du vecteur de Poynting complexe en W/m². % Cf. [Jackson, Classical Electrodynamics, 3rd Ed, Wiley 1998] mu0 = 4*pi*1E-7; %Perméabilité magnétique du vide (H/m) Affectation du résultat à l’argument de sortie P P = real(cross(E,conj(B)))/(2*mu0); Variable % ‘cross’ calcule le produit vectoriel (“cross product”) locale Initiation à Matlab Nombre d’arguments de sortie 0 ou 1 (ans) 0 Mafonction() ou Mafonction 0 ou 1 (ans) 1 Mafonction(x) 1 0 y = Mafonction() ou y = Mafonction 1 1 ou plusieurs y = Mafonction(x1,x2,…) plusieurs 1 ou plusieurs [y1,y2,…,yN] = Mafonction(x1,x2,…) if condition if condition ... ... 2. Faire une fonction qui prend la longueur d’onde et l’ouverture numérique image en argument d’entrée et renvoie le diamètre de la tache d’Airy. Précisez l’unité choisie pour lambda dans l’en-tête étendu end else ... end A vous de jouer ! 3. Modifier Systeme_optique pour y ajouter les arguments d’entrée et de sortie suivants: Diamètre de la lentille Longueur d’onde [OAprime,Gy,ON,Phi] = Systeme_optique(OA,fp,D,lambda,Pixel) Syntaxe à plusieurs arguments de sortie en Matlab ≠ du C Diamètre de la tache d’Airy Taille d’un pixel La fonction renverra un Warning si la tache d’Airy est plus petite qu’un pixel 18 Structures conditionnelles 1. Complétez la fonction Systeme_optique à partir de son en-tête étendu Ouverture numérique image En C, plusieurs arguments de sortie ⇒ pointeurs en arguments d’entrée (passage d’arguments par adresse) Initiation à Matlab 17 Lancez la commande «CopieTravail Systeme_optique.m» puis ouvrez le fichier Systeme_optique.m du répertoire de travail. Syntaxe Nombre d’arguments d’entrée Initiation à Matlab 16 Appel à une fonction Mot clé facultatif end if condition1 ... elseif condition2 ... else ... end Qu’est ce qu’une condition ? Une affirmation qui peut être vraie ou fausse Opérateurs de comparaison <, <=, >, >=, ==, ~= Exemple: est x = 4 égal à y = 3 x>2 && y==1 Quelques fonctions de test Opérateurs logiques isnan(),isinf(),isempty(),isreal() &&, ||, ~ est différent de isinf(1/0) v = []; isemtpy(v) AND OR NOT Initiation à Matlab 19 Les boucles for et while k : variable de boucle for k = 1:N ... Vecteur ligne Si N<1, la boucle n’est pas exécutée end while condition ... end while condition ... if condition2 break end end stoppe la boucle while (ou la boucle for) la plus interne while condition ... if condition2 return end end stoppe la fonction A vous de jouer ! Faites les exercices de la feuille de TD