Copies des transparents de la séance N° 2

publicité
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
Téléchargement