Cours MatLab CC
Cours MatLab CC
Calcul Scientifique (MATLAB) Cours et Travaux
pratiques en Océanographie physique
ti O é hi h i
E-mail: [email protected]
Plan
Partie I: Cours théorique
• I : Présentation générale
• II : Opérations, fonctions, commandes
• III : Graphisme
• IV: Boucles de contrôle
• V Animation
V: A i ti
Partie
i II: Applications
li i de
d MatLab b à l’Océanographie
l hi
physique
Figure1: Courants de surface (d’après http://www.physicalgeography.net/). Les
courants chauds sont indiqués en rouge, et les courants froids en bleu.
I
Présentation de Matlab
Qu'est-ce que MatLab ?
• Opérations fondamentales
Opérations matricielles
Les opérations matricielles usuelles sont d´efinies par +, ‐, *, /, ^
Exemle:
C = A + B
C = A * B
C = A / B
C = A^3
A = [1 2 3; 4 5 6]; B = [7 8 9; 10 11 12]; C = [13 14; 15 16; 17 18];
Calcul A+B; A*C; A^6.
Opérations élément par élément
Les opérateurs élément par élément sont donc .* ./ .^
C = A .* B C = A .// B C = A.
A ^3
3
Extraction de sous-matrices
>> A(2,3) extraction de l’élément A23
>> A(:,5) extraction de la colonne [A13; . . . ;An3]
>> A(1:4,3) extraction de la sous-colonne [A13; . . . ;A43]
>> A(1,:) extraction de la ligne [A1j , . . . ,A1n]
>> diag(A) extraction de la diagonale [A11; . . . ;Ann]
• > supérieur à
• .* produit élément par élément de matrices
• < inférieur à
• .^ puissance élément par élément de matrices
• >= supérieur ou égal
p g
• ./ division élément par élément de matrices
• <<= inférieur ou égal
inférieur ou égal
• xor OU exclusif (XOR)
• Error affiche le message :
affiche le message : 'error'
error
• message spécifié, émet un 'bip' et interrompt
ll'exécution
exécution du programme
du programme
Construction de matrices particulières
Liste non exhaustive de fonctions :
-zeros (N) : crée une matrice N*N remplie de 0
-ones
ones (N) : crée une matrice N*N remplie de 1
- rand (N) : crée une matrice N*N dont tous les éléments
sont aléatoires
- diag (N) : crée une matrice N*N diagonale
- Les fonctions trigonométriques (et trigonométriques
inverses) usuelles cos(x), sin(x), etc
- abs(x) retourne la valeur absolue pour un réel, ou le
module
d l pour un complexe
l
- angle(x) retourne l'argument du complexe x
-y = max(x) retourne la valeur maximale du signal x. (y
est un scalaire)
-R = roots(a) retourne les racines du polynôme dont les
coefficients sont dans le vecteur a
- fft, ifft : transformation de Fourier (Fourier rapide
et son inverse)
- fzero : zéros de fonctions
-fmin, fmins : minimisation
-quad,d quad8, d8 trapz
t : calcul
l l d'intégrales
d'i té l
-ode23, ode23p, ode45 : équations différentielles
- diff,
diff gradient,
gradient del2 : équations aux dérivées partielle
- poly : construit un polynôme à partir de ses racines
>> C = A’ transposée de A, Cij = Aji
>> C = inv(A) inverse de A (matrice carr´ee), C = A−1
>> d = det(A)
d t(A) d´ét
d´éterminant
i t de d A ((matrice
t i carrée)é )
>> r = rank(A) rang de A
>> nrm = norm(A) norme 2 de A
>> v = eig(A) valeurs propres de A (matrice carr´ee)
>> A = eye(n) matrice identit
identit´ee n × n
>> A = diag(v) matrice diagonale avec v comme diagonale
>> A = zeros(n,m) matrice de z´eros avec n lignes et m
colonnes
>> A = ones(n,m) matrice de un avec n lignes et m colonnes
>> A = rand(n,m)
d( ) matrice
t i al´eatoire
l´ t i avec n lignes
li ett m
colonnes
>> x = [but:pas:fin] vecteur ligne de points ´equidistribu´es
equidistribu es
avec pas pas entre but et fin
Les fonctions.
• Fonctions elementaires
Sqrt,
q exp, p log,
g sin, cos, tan, asin, acos, atan, round,
floor, ceil, abs, angle, conj
•Fonctions vectorielles
max(x) maximum
min(x) minimum
sort(x) tri par ordre croissant
[y, I] = sort(x) retourne en plus les indices des elements de x
find(x) retourne les indices non nuls de x
[y, I] = find(x) retourne des lignes (dans le vecteur I) et des
colonnes
(dans le vecteur J) des elements non nuls du x
sum(x) somme des elements de x
cumsum(x) vecteur contenant la somme cumulee des elements de x
prod(x) produit des elements de x
cumprod(x) vecteur contenant le produit cumule des elements de x
ddiff(x)
( ) vecteu
vecteur des ddierences
e e ces eentre
t e deux
deu eelements
e e ts co
consecutifs
secut s de x
mean(x) moyenne des elements de x
median(x) mediane
std(x) ecart type
* Écriture de fonctions personnelles :
• Dans MATLAB, les programmes qui sont
sauvegardés comme des fichiers m sont
sauvegardés comme des fichiers_.m sont
équivalentes à des sous‐programmes et des
fonctions dans d’autres
fonctions dans d autres langages.
langages
• Fonction retournant une seule variable :
• Exemple :
• Supposons que le programme MATLAB
correspondant est sauvegardé sous le nom
d t t dé l
demof_.m. ce programme est le suivant :
• function y=demof_(x)
y=(2*x.^3+7*x.^2+3*x‐1)/(x.^2‐3*x+5*exp(‐x)) ;
• Pour déterminer f(x=3) par exemple, il suffit
d’exécuter la commande : "y=demof_(3),et la
réponse sera :
• >>y=
y
502.1384
* Fonction retournant plusieurs
variables :
• function
function [mean, stdv]=mean_st(x)
[mean stdv]=mean st(x)
n=length (x) ;
mean=sum(x)/n ;
mean=sum(x)/n ;
stdv=sqrt(sum(x.^2)/n‐mean.^2) ;
• Exemple :
• >>x=[1 5 3 4 6 5 8 9 2 4];
>>[m,s]=mean_st(x)
[ ] ( )
• La réponse est : m=4.7000 et s=2.3685
1. Opérations sur les polynômes dans
MATLAB
• Un polynôme de degré n
U po y ô e de deg é est est représenté par un
ep ése té pa u
vecteur de taille (n+1).
• Exemplep :
• Le polynôme : est représenté par :
f [
• >>f=[8 0 2 ‐3 4 ‐2]]
f =8 0 2 ‐3 4 ‐2
• D’autres fonctions dans MATLAB telles que :
‘conv’, ‘deconv’, ‘roots’, etc. peuvent être utilisées
en plus des opérations propres aux vecteurs
1.1. Multiplication des polynômes
• La
La fonction
fonction ‘conv’
conv donne le produit de
donne le produit de
convolution de deux polynômes. L’exemple
suivant montre l’utilisation
suivant montre l utilisation de cette fonction.
de cette fonction
• Exemple:
• Le produit de convolution
est donné par :
d é
• >>f=[3 2 ‐1 4];
• >>g=[2 0 ‐3 5 ‐1];
• >>h=conv(f,g)
>>h conv(f,g)
h =
6 4 ‐11
6 4 11 17 10
17 10 ‐19
19 21
21 ‐4
4
• Ainsi, le polynôme obtenu est :
Manipulation de fonctions
polynomiales dans MATLAB
l i l d MATLAB
• Soit le polynôme suivant :
Soit le polynôme suivant :
où n est degré du polynôme et sont les coefficients du polynôme.
E
Exemple
l :
Ce polynôme est équivalent à :
Un polynôme d’ordre n possède n racines qui peuvent être réelles ou complexes.
• Exemple : :
• Le polynôme :
qui est représenté dans MATLAB par :
>>P=[2 1 4 5];
>>P=[2 1 4 5];
a pour racines
. Pour trouver ces racines, on doit exécuter la fonction ‘roots’.
d é l f ‘ ’
D’où :
>>r=roots(P);
• >>r
r=
r =
0.2500 + 1.5612i
0.2500 ‐ 1.5612i
‐1.0000
• Quand les racines sont connues, les coefficients
peuvent être recalculés par la commande ‘poly’
peuvent être recalculés par la commande poly .
• Exemple :
• >>A
>>A=[3 [3 1;2 4];
1;2 4];
• >>p=poly(A)
p =
1 10
1 ‐7 10
• Ainsi, le polynôme caractéristique de la matrice A
est :
est :
Évaluation d’un
Évaluation d un polynôme
polynôme
• Pour évaluer le polynôme en un point
d
donné, on doit utiliser la fonction ‘polyval’. On
é d i ili l f i ‘ l l’ O
évalue ce polynôme pour x=1, par exemple :
>>polyval(P,1)
ans = • >>C=[3 ‐7 2 1 1];
[ ]
12
• >>x=2.5;
p :
Exemple
On veut évaluer en x=2.5
• >> y=polyval(C,x)
>> y=polyval(C x)
le polynôme suivant : y =
23 8125
23.8125
Intégration numériques des fonctions
Méthode des trapèzes
• functionI=trapez
functionI trapez_v(g,h)
v(g,h)
I=(sum(f)‐(f(1)+f(length(f)))/2)*h;
• quad('fonction
quad( fonction_ff',a,b)
,a,b)
• quad('fonction_f',a,b,tol)
• quad(
quad('fonction
fonction_ff',a,b,tol,trace)
a b tol trace)
• Liste du programme fct.m :
f ti f=fct(x);
function f f t( )
% fonction à intégrer
f ( 1) * ( *( 2))
f=(x‐1).*exp(‐x.*(x‐2));
Tracé de la fonction à intégrer
Tracé de la fonction à intégrer : :
>>x=0:0.01:5;
>>ft=fct(x);
>>plot(x,ft);
>>grid; title('fonction à intégrer');
>>xlabel('x');ylabel('f(x)');
l b l(' ') l b l('f( )')
%***************************************
% Calcul de l'intégrale de f(x) par la *
% la ffonction 'quad8'
q sur un K6-233 *
%***************************************
clear all; clc;
flops(0); % Mise à zéro du compteur d'opérations
tic; % Déclenchement du compteur temps de calcul
Iquad=quad8('fct',0,5)
Nbre_op1=flops, %Arrêt du compteur d’opérations
t
tps_q=toc,
t %Arrêt
%A êt du
d compteur
t de
d temps
t de
d calcul
l l
%***************************************
% Calcul de l'intégrale de f(x) par la *
% la fonction 'gamma'
gamma *
%***************************************
flops(0);
tic;;
Igamma=gamma(1)/2
Nbre_op2=flops
tps_g=toc
Exemple
Calcul de l’intégrale entre 0 et 1
S = quad('sin(x)./x',0,1)
Gestion des fichiers
• Exemple
• x=0 :25 ;y=x ;
p ( , , ),p ( ,y) ;y (y); (( , , ));
subplot(2,2,1),plot(x,y) ;ylabel(‘y’) ;title(‘(2,2,1)’) ;
subplot(2,2,2),plot(x,2*y) ;ylabel(‘y’)
;title(‘(2,2,2)’) ;
subplot(2 2 3) plot(x 3*y) ; ;xlabel(‘x’)
subplot(2,2,3),plot(x,3*y) ; ;xlabel( x ) ;ylabel(
;ylabel(‘y’)
y )
;title(‘(2,2,3)’) ;
subplot(2,2,4),plot(x,4*y) ; ;xlabel(‘x’) ;ylabel(‘y’)
;title(‘(2,2,4)’) ;
• x=‐1:0.1:1;
• y=x;
• [x,y]=meshgrid(x,y);
• f=x ^2+y
f=x. 2+y.^2‐x;
2‐x;
• g=x.^2‐y.^2‐y;
• figure(1);
• mesh(f);
• g
grid on;;
• hold on;
• mesh(g);
• title('Courbes f(x,y) et g(x,y)');
• xlabel('x'); ylabel('y');zlabel('f(x,y) et g(x,y)');
• hold off;
IV: Boucles de contrôle
Exemple
>> a = sin(2*pi);
>> b = cos(2*pi);
>> bool = (a>b)
bool =
0
Boucles if-elseif-else Boucles while
if CONDITION1 while
ACTION1; CONDITION
elseif CONDITION2
l if CONDITION2 ACTION1
ACTION1;
ACTION2; ACTION2;
else ...
ACTION3; ACTIONN;
end
Boucles for
% génération de la surface à dessiner
x = ‐pi/2:pi/100:pi/2; % fenêtre graphique courante en avant‐plan
y = x; fi
figure(gcf)
( f)
[X,Y] = meshgrid(x,y); % on enregistre l'animation
Z = sin(X.^2+Y.^2); for i = 1:n
% dessin en fils de fer
% dessin en fils de fer meshz(X,Y,sin(2*pi*i/5)*Z) % amortissement
meshz(X,Y,Z); de la surface
grid axis(lim) % pas de changement
xlabel('x'), ylabel('y'), zlabel('z') d'axes
title('Animation de surface amorti par un Anim(: i) = getframe;
Anim(:,i) = getframe; % capture d
% capture d'une
une
sinus') image
% pointeur sur les axes end
lim = axis;
axis; % exécution de l'animation
% réservation de l'espace mémoire boucles = 7; % nombre de boucles
n = 10; % nombre d'images ips = 5; % nombre d'images par seconde
Anim = moviein(n,gcf); movie(Anim, boucles, ips)
Exemple
% génération de la surface à dessiner % fenêtre graphique courante en avant‐plan
x = pi/2:pi/100:pi/2;
x = ‐pi/2:pi/100:pi/2; figure(gcf)
y = x; % on enregistre l'animation
[X,Y] = meshgrid(x,y); for i = 1:n
Z = X.^2+Y.^2; mesh(X,Y,sin(2*pi*i/80)*Z) %
% dessin en fils de fer amortissement de la surface
mesh(X,Y,Z); axis(lim) % pas de changement
grid d'axes
xlabel('x')
xlabel( x ), ylabel(
ylabel('y')
y ), zlabel(
zlabel('z')
z) Anim(: i) = getframe;
Anim(:,i) = getframe; % capture d
% capture d'une
une
title('Animation de Paraboloide amorti par image
sinus') end
% pointeur sur les axes % exécution de l'animation
li = axis;
lim i boucles = 10; % nombre de boucles
% réservation de l'espace mémoire ips = 15; % nombre d'images par seconde
n = 40; % nombre d'images movie(Anim, boucles, ips);
Anim = moviein(n,gcf);
( ,g );
Partie II
Applications de MatLab à l’Océanographie
physique
Résolution
les causes du refroidissement saisonnier dans
ll'Atlantique
Atlantique équatorial et particulièrement dans le GG.
équatorial et particulièrement dans le GG
Figure 2: Cartes moyennes (2004‐2008) de la distribution des températures (°C) pour le mois
de Janvier (gauche) et de Juillet (droite) dans l'océan Atlantique Source Reynolds et al (2007)
de Janvier (gauche) et de Juillet (droite) dans l'océan Atlantique. Source : Reynolds et al. (2007).
Dans le GG, les profondeurs de couche de mélange sont très faibles
compare aux profondeurs de couche de mélange de la partie Ouest du
bassin.
Figure 3: Cartes moyennes des profondeurs de couche de mélange (m) au mois de
Janvier (droite) et de Juillet (gauche) dans l'océan Atlantique. Source : Climatologie de
De Boyer Montegut et al. (2004)
Figure 4:Section meridienne de temperature le long de 10°O pendant les campagnes EGEE1
(gauche) et EGEE3 (droite) au mois de Juin 2005 et 2006 respectivement. Les traits continus
representent les profondeurs de la thermocline (determinee a partir l'isotherme 20°C) et les
tirets representent la profondeur de couche de melange (calculee a partir d'un critere en
temperature avec un seuil a 0.3°C), Marin et al. (2009)
Les ondulations du front de SST qui attestent de la présence d'ondes d'instabilités y
sont clairement visibles
sont clairement visibles.
Figure 5: Distribution de la SST dans l'Atlantique équatorial a la date
du 15 Juillet 2005 Source :Reynolds et al (2007)
du 15 Juillet 2005. Source :Reynolds et al. (2007).
Données: Observations et modèle
Données: Observations et modèle