Cours 1matlab
Cours 1matlab
Cours 1matlab
Pour contrôler le défilement des pages d'aide, il est souvent pratique d'utiliser la commande
more on/off.
Matlab fournit également la possibilité d'exécuter des commandes unix directement sous
l'interpréteur :
les commandes cd, ls, pwd et mkdir sont analogues à celles connues sous UNIX.
unix('unix_com') : exécute une commande UNIX et affiche une valeur de retour (0 si la
commande unix est licite).
!unix_com : exécute juste la commande UNIX unix_com.
Chapitre I: MATRICES
Toute donnée peut être représentée sous forme matricielle. En effet, une donnée constituée
d'une valeur numérique est une matrice uni ligne uni colonne. Un ensemble de quatre
coordonnées dans un repère 0xyz peut se représenter avec une matrice ayant quatre lignes et
trois colonnes etc.. Pour spécifier un élément dans une matrice, on utilise le numéro de la ligne
et celui de la colonne.
Par exemple, soit une matrice C donnée. C_43 = 2 signifie que le nombre situé à la quatrième
ligne et deuxième colonne de la matrice C est égal à 2.
On obtient la taille d'une matrice en faisant le produit du nombre de lignes par le nombre de
colonnes
1 2 3
4 5 6
7 8 9
a - Les transposées de A et B.
c - La taille de C
d - L'inverse de D
B = [1 0 2;-1 4 -2];
D = [2 1;4 3];
A'
B'
D'
C = A.*B
size(C)
inv(D)
A.^2
B.^2
C.^2
Transposée de A
ans =
2 0
5 3
1 -1
Transposée de B
ans =
1 -1
0 4
2 -2
Transposée de D
ans =
2 4
1 3
MANIPULATION DE MATRICES
Dans cette section, nous allons rencontrer un certain nombre de fonctions disponibles dans
MATLAB. Celles-ci nous permettront de voir plusieurs manipulations possibles avec les
matrices.
Rotation
Soit la matrice
En exécutant la commande:
B = rot90(A)
On obtient le résultat suivant:
B =
0 -1 6
1 5 4
2 -2 3
>>
La fonction rot90 permet d'effectuer une rotation de 90 degrés (la rotation se fait dans le sens
anti-horaire).
Flip
On utilise deux fonctions issues de flip pour intervertir une matrice. Considérons les
commandes MATLAB suivantes:
A = [1 2;4 8;-2 0]
B = fliplr(A)
C = flipud(B)
On obtient le résultat suivant:
A =
1 2
4 8
-2 0
B =
2 1
8 4
0 -2
C =
0 -2
8 4
2 1
>>
La commande flipr intervertit de la gauche vers la droite tandis que la commande flipud
intervertit de haut en bas.
Reshape
A = [2 5 6 -1;3 -2 10 0];
B = reshape(A,4,2)
C = reshape(A,8,1)
2 5 6 -1
3 -2 10 0
B =
2 6
3 10
5 -1
-2 0
C =
-2
10
-1
>
On utilise reshape avec trois arguments : le premier indique la matrice originale, les 2ième et
3ième arguments indiquent respectivement le nombre de lignes et le nombre de colonnes de la
nouvelle matrice. Les nombres sont choisis en colonne à partir de la vieille matrice pour former
la nouvelle matrice ordonnée en colonne
Trouver les racines d'un polynôme f(x) consiste à chercher les valeurs de x qui annulent ce
polynôme.
MATLAB représente un polynôme comme une matrice uniligne. Par exemple, en lieu et place
de:
on écrit p = [1 -12 0 25 116]. Pour obtenir les racines d'un tel polynôme, on utilise la
commande roots. Ainsi les instructions suivantes:
p = [1 -12 0 25 116]
r = roots(p)
>>p =
1 -12 0 25 116
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
On obtient quasi instantanément les racines d'un polynôme de degré 4. Dans MATLAB, un
polynôme et ses racines sont des vecteurs. Le polynôme étant un vecteur uni ligne et les racines
un vecteur uni colonne.
Exercice résolu
d- tracer la courbe:
Résolution
a = [1 2 3 4];
b = [1 4 9 16];
c = conv(a,b)
c =
1 6 20 50 75 84 64
b- Addition. Pour additionner deux polynômes,on écrit
a = [1 2 3 4];
b = [1 4 9 16];
d = a + b
2 6 12 20
a = [1 2 3 4];
b = [1 4 9 16];
c = [1 6 20 50 75 84 64];
[q,r] = deconv(c,b)
q =
1 2 3 4 :représente le quotient de la
division
r =
0 0 0 0 0 0 :représente le reste de la
division
d- Tracé; de la courbe
x = linspace(-1,3,100);
p = [1 4 -7 -10];
v = polyval(p,x);
polyval évalue le polynôme p(x) aux différentes valeurs de x et place le résultat dans v. Ce sont
ces valeurs de v en fonction de x qui constituent la courbe qui représente le polynôme p(x).
On obtient la courbe suivante. <P
>
CH III SYSTÈMES LINÉAIRES
Tout système linéaire peut être représenté sous forme matricielle. La résolution d'un tel système fait
appel à la notion d'inverse d'une matrice.
B = [10 ;5 ;-1];
X = inv(A)*B
On obtient comme résultat:
X =
-2.0000
5.0000
-6.0000
>>
X = A\B
À partir d'un exemple nous allons introduire les notions de base nécessaires pour tracer une
courbe en utilisant MATLAB. On se propose de tracer les fonctions sinus et cosinus. Il s'agit
d'écrire le programme suivant au niveau d'une fenêtre MATLAB.
x = linspace(0,2*pi,30);
y = sin(x);
z = cos(x);
plot(x,y,x,z,'+')
title('sinus et de cosinus')
xlabel('abscisse')
ylabel('ordonnée')
grid
x = -8: .5:8;
y = x';
X = ones(size(y))*x;
Y = y*ones(size(x));
Z = sin(R)./R;
mesh(Z)
DÉRIVÉES NUMÉRIQUES
Graphiquement, la dérivée d'une fonction peut être définie comme la pente de celle-ci à un
point donné.
On se propose de :
- Déterminer les valeurs de x pour lesquelles la fonction f(x) admet des maxima et des minima
locaux. En MATLAB, on écrit les instructions suivantes:
Partie 1
x = -4:0.1:5;
figure; plot(x,f,'+')
xlabel('abscisse')
ylabel('ordonnés')
grid
hold
Partie 2
df = diff(f)./diff(x);
xd = x(2:length(x));
figure;plot(xd,df)
xlabel('abscisse')
ylabel('ordonnés'
grid
Partie 3
produit = df(1:length(df)-1).*df(2:length(df));
local = xd(find(produit<0))
local =
Remarque: l'allure de la courbe représentant la dérivée montre que la fonction a des minima et
des maxima locaux. La dérivée s'annule autant de fois que la fonction admet des minima et/ou
des maxima
Exemple de représentation graphique en dimension deux
Les points peuvent être matérialisés par le symbole p prenant les valeurs suivants:
Les couleurs sont repérées par leur initiale en anglais: r(ed), b(lue), blac(k), w(hite), y(ellow),
m(agenta), g(reen)
On peut représenter plusieurs courbes sur la même figure de plusieurs manières: d'abord par un
seul appel à la fonction plot
Par défaut la fenêtre graphique est effacée avant chaque commande plot. Pour superposer des
courbes par des appels successifs à cette fonction, il faut auparavant avoir utilisé la commande
hold on. Par exemple le script suivant donnera le résultat représenté sur la figure 2
legend('lab1','lab2','lab3',...)
légende avec une chaîne de caractères pour chaque
courbe
text(x,y,'label') chaîne de caractères à la position x,y
plot3(x,y,z) tracé de la surface passant par les points (x,y,z)
Les modèles mathématiques des sciences et techniques se présentent très souvent sous la forme
de systèmes d'équations différentielles ordinaires, qui lient des fonctions (inconnues) du temps
à leurs dérivées temporelles. En ajoutant des conditions aux limites à ces équations, on peut
alors calculer ces fonctions inconnues. Par exemple, la loi de Newton permet de trouver les
équations qui régissent le mouvement en chute libre d'un corps représenté par une masse
ponctuelle, dans un champ de gravité constant. Si on connaît la position et la vitesse initiale du
corps, on peut alors résoudre les équations du mouvement et obtenir la position et la vitesse du
corps comme des fonctions du temps.
Dans de nombreux cas, ces équations sont trop complexes pour pouvoir être résolues de façon
analytique et l'unique possibilité est d'essayer d'approximer les fonctions inconnues au moyen
de méthodes numériques. L'idée de base consiste à ne chercher la valeur des fonctions qu'en un
certain nombre de points : le problème est discrétisé.
Un certain nombre de ces méthodes numériques ont été implémentées dans le logiciel Matlab et
permettent de résoudre relativement facilement un grand nombre de problèmes. Ce document
constitue une introduction à l'utilisation des méthodes implémentées dans Matlab. Une
utilisation efficace et avertie de ces méthodes suppose un minimum de connaissance des
concepts sur lesquelles elles se basent.
Pour résoudre numériquement une EDO avec Matlab (ou un système d'EDOs) il faut d'abord
faire un peu d'algèbre pour ramener l'équation ou le système d'équations différentiel sous la
forme:
où u(t) est le vecteur des fonctions inconnues. Sa dérivée temporelle est exprimée par la
fonction g, qui est une fonction du temps et de u(t).
On peut ensuite lancer ODE45 pour trouver la valeur de u(t). Il faut pour cela lui fournir 3
éléments:
Le pourquoi du comment
Cette partie décrit le fonctionnement interne de ODE45. Tout ceci se passe automatiquement à
l'intérieur de ODE45. Si ce fonctionnement ne vous intéresse pas, passez cette partie et allez
directement voir la partie "Mais encore" ci-dessous.
ODE45 va utiliser les éléments que vous lui fournissez pour reconstruire, pas à pas, la fonction
inconnue. ODE45 va commencer par découper en morceaux l'intervalle de temps sur lequel
vous lui avez demandé la valeur de la fonction u(t) (l'explication de ceci va apparaître par la
suite). Soit [T0 T1 ... TN] cet intervalle. Notez que vous ne pouvez contrôler la manière dont
ODE45 découpe l'intervalle. Vous ne pouvez que lui fournir les valeurs extrêmes: T0 et TN.
L'information qui sera ensuite utilisée par ODE45 est la condition initiale que vous lui avez
fournie, c'est-à-dire la valeur u(0) de la fonction inconnue au temps t=T0. Connaissant T0 et
u(t=T0), et connaissant la fonction g, ODE45 peut calculer la valeur de u'(t) au temps t=T0.
u'(t=T0)=g(T0,u(t=T0))
u'(t=T1)=g(T1,u(t=T1))
Ceci nous donne la direction de la fonction inconnue au point de passage connu (T1,u(T1)) et
permet de choisir T2 et ainsi de suite.
Mais encore
On peut se poser toute une série de questions à propos de ODE45. En voici 2 importantes:
Par exemple :
On désire résoudre numériquement l'équation différentielle décrivant le mouvement d'un
pendule amorti (voir cours de mécanique). L'équation différentielle qui donne la position x(t)
du pendule au cours du temps est:
où on a posé:
Il est à noter que dans ce cas, la condition initiale à fournir sera bien entendu un vecteur
puisque nous avons maintenant 2 fonctions inconnues à retrouver. Matlab ne peut savoir
qu'elles sont liées entre-elles par une relation de dérivée.
U est la valeur de la fonction inconnue et T est le vecteur contenant les instants Ti auxquels la
fonction a été évaluée. T est indispensable puisque les instants Ti ne sont pas équidistants. T est
un vecteur colonne.
Il est évident que U sera une matrice dans le cas où on résoud un système plutôt qu'une
équation seule. Dans ce cas, la matrice U contient autant de ligne que le vecteur T et chaque
colonne correspond aux valeurs d'une des fonctions inconnues.
Un exemple en détail
Reprenons l'exemple du pendule amorti. Le système d'équations à résoudre est décrit ci-dessus.
Avant d'exécuter ODE45, il faut écrire la fonction g qui lie u'(t), u(t) et t. C'est chose faite dans
ce fichier.
Comme conditions initiales, on va poser qu'en t=0s, le pendule est à sa position d'équilibre
(x(0)=0) mais possède une vitesse de 2 m/s. On a donc: u0 = [0 2].
Pour résoudre l'équation différentielle entre de t=0s jusque t=20s on va lancer par exemple:
>> plot(t,u(:,1));
>> hold on;
>> plot(t,u(:,2),'r-.');
>> xlabel('temps (s)');
>> title('Pendule amorti');
>> legend('Position (m)','Vitesse (m/s)');
Calculer l'intégrale d'une fonction, c'est déterminer l'aire sous la courbe qui représente cette
fonction. Cette surface est délimitée par deux droites parallèles à l'axe des ordonnées, passant
par les abscisses x0 et x1 (voir figure).
Pour déterminer cette aire, MATLAB utilise une méthode de segmentation numérique basée
sur plusieurs approches. Trois fonctions sont disponibles en MATLAB selon la méthode
utilisée: trapz, quad, et quad8.
trapz: utilise l'approche de la méthode des trapèzes qui consiste à découper l'aire totale à
calculer en de petites surfaces ayant la forme de trapèzes.
Exercice résolu
y = humps(x)
On se propose de calculer l'aire sous cette courbe en utilisant les trois fonctions de MATLAB
définies ci-haut.
Traçons d'abord le graphe de cette fonction. Pour cela, on écrit les instructions suivantes en
MATLAB:
x = -1:.01:2;
plot(x,humps(x))
xlabel('abscisse')
ylabel('ordonnée'
grid
x = -1:.01:2;
y = humps(x);
aire1 = trapz(x,y)
aire2 = quad('humps',-1,2)
aire3 = quad8('humps',-1,2)
aire1 =
26.3449
aire2 =
26.3450
aire3 =
26.3450
>>
Chapitre VII: ITÉRATIONS&PROGRAMMATIONS
if expression logique 1
instructions A
instructions B
instructions C
instructions D
end
instructions
end
instructions
end
Une expression logique est une relation mathématique qui peut être soit vraie soit fausse.
Les instructions sont répétées autant de fois qu'il y a de colonnes dans l'expression.
Exemples d'illustration
On considère une fibre optique reliant un serveur et plusieurs appareils. Si la distance entre le
serveur et un appareil est inférieure à 30 mètres, la vitesse est obtenue en utilisant l'expression:
else
end
Si on suppose qu'on a un vecteur contenant les différentes distances, on peut résoudre le même
problème en utilisant la boucle for comme suit:
for k = 1:length(d)
if d(k) <= 30
else
end
La fonction MATLAB length détermine le nombre de fois que la boucle sera exécutée.
Soit une matrice carrée n x n et un vecteur colonne ayant n lignes. étant un scalaire.
Considérons l'équation suivante:
(1)
Pour non nul, les valeurs de qui vérifient cette équation sont appelées valeurs propres de la
matrice . Les vecteurs correspondants sont appelés vecteurs propres.
Un système d'équations homogène de cette forme a une solution non triviale si et seulement si
le déterminant est nul, c'est-à-dire:
(2)
(2) est appelée équation caractéristique de la matrice . Les solutions de cette équation sont
aussi les valeurs propres de .
Exercice d'application
[vecteurs_propres,valeurs_propres]=eig(A)
0.7071 0.7071
-0.7071 0.7071
valeurs_propres =
0.2500 0
0 0.7500
Remarque: Soit
On a toujours QQ' = I. I étant la matrice identitée. eig produit des vecteurs unitaires.
Matlab est un logiciel extrêmement bien documenté, avec plusieurs fonctions d'aide très
performantes. Lorsqu'on est confronté à un problème technique dans l'utilisation de
Matlab, ces fonctions d'aide permettent souvent de le résoudre rapidement.
Fonction help
Lorsque vous recherchez de l'aide sur une fonction précise de Matlab, vous pouvez
simplement taper la commande:
Exemple
>> help det
DET Determinant.
DET(X) is the determinant of the square matrix X.
Use COND instead of DET to test for matrix singularity.
See also COND. Overloaded methods
help sym/det.m
Note
Dans l'aide de Matlab, même si les noms des fonctions sont indiqués en majuscule, il
convient d'écrire ces noms en minuscule lors de l'appel de ces fonctions. Par exemple, si
Fonction lookfor
Exemple
Fonction helpwin
La fonction helpwin fait apparaître une fenêtre qui vous permet de naviguer à travers
l'aide des fonctions de Matlab. On écrira dans Matlab:
>> helpwin
Fonction doc
Matlab dispose d'une documentation très fournie sous la forme de pages HTML. Pour
accéder à ces pages, tapez la commande: doc ou helpdesk . Si vous recherchez une
information sur une commande précise : doc nom_de_la_commande