Valeurs et vecteurs propres
La commande suivante permet de calculer les valeurs et vecteurs propres de la matrice carrée A : [X,D]=eig(A) Ces valeurs et vecteurs peuvent être complexes (cf section 1.7). Il existe un grand nombre d’outils dédiés à l’analyse spectrale de matrices; nous renvoyons à la bibliographie.
Les complexes
Matlab accepte les nombres complexes sous la forme a+ib ou rho∗exp( i theta) On peut aussi noter j à la place de i. Toutes les opérations algébriques sur les complexes sont reconnues (*, +, /). On dispose aussi des fonctions real, imag, abs, angle, conj. On peut élever un complexe à une puissance réelle grâce à la fonction : ˆ. On dispose aussi de sqrt, log, exp. Toutes les opérations définies pour les matrices à coefficients réels demeurent valables pour les matrices à coefficients complexes. Attention, ne pas utiliser un compteur noté i ou j dans un programme où l’on utilise des complexes.
CONNAISSANCES DE BASE DE MATLAB
Les polynômes Le polynôme
P(X)=anXn + an−1Xn−1 + … + a1X + a0, est représenté en Matlab par le vecteur ligne [an an−1…a1 a0] (de longueur n +1). Outre les opérations sur les matrices qui s’appliquent donc aux polynômes, il existe un certain nombre de fonctions spécifiques aux polynômes.
• conv(A,B) multiplie les deux polynômes A et B.
• [Q,R]=deconv(A,B)renvoielesdeuxpolynômesQetRtelsque A = BQ+R avec degré de Rstrictement inférieur à celui de B.
• roots(P) renvoie les racines du polynôme P (dans C). Réciproquement, poly calcule le polynôme à partir de ces racines.
• polyval(f,X) renvoie les valeurs de la fonction f sur la matrice X.
• polyder(f) dérive le polynôme f.
• [q,d]=polyder(a,b) calcule la dérivée de a/b (où a et b sont deux polynômes) sous la forme q/d.
• si A est une matrice et f un polynôme, polyval(f,A) renvoie un tableau constitué de l’image de chacun des élément de A. Traiter l’exemple suivant : P=[1 −6 11−6]; S=roots(P) poly(S) poly(S’)
1.9. Les graphiques 1.9.1. Les graphiques bi-dimensionnels Rappelons que (et de façon non exhaustive!) :
• plot(x) représente les points de coordonnées (j,xj), pour1 ≤j ≤ p, oùp est la longueur du vecteur x.
• plot(x,y) représente les points de coordonnées (xj,yj), pour1 ≤j ≤ p.
• plot(Z) représente les points de coordonnées (re(Z),im(Z)), si Z est un vecteur complexe.
• plot(x1,y1,str1,x2,y2,str2,…,xn,yn,strn) permet de tracer n courbes (xi,yi) avec les paramètres optionnels str1, … , strn. fplot(’fct’,lim,str) est très pratique : elle permet de tracer le graphe de la fonction fct (M-file ou fonction interne)danslafenêtredéfinieparlim=[xmin,xmax] oulim=[xmin,xmax,ymin,ymax];strunparamètreoptionnel. On pourra aussi utiliser ezplot. 1.9.2. Les graphiques tri-dimensionnels On étudiera par exemple les fonctions plot3, mesh ou surf. 1.9.3. D’immenses possibilités Les possibilités de matlab sont immenses et méritent d’être approfondies.
L’utilisation du debugger
Avec Matlab, il est possible de debugger agréablement ses sources, en suivant l’évolution de l’exécution d’une fonction ou d’un script, pas à pas, ou en s’arrêtant à des endroits précis, tout en contrôlant ou modifiant les différentes variables mises en jeu.
Pour cela, une fois que l’on a édité (avec la fonction edit) les déférentes fonctions et sources, il faut placer, en déplaçant le curseur, des “points d’arrêt” là où l’on désire voir le programme s’arrêter provisoirement. On lance ensuite le programme à contrôler depuis la fenêtre de command matlab; il apparaît une invite “K”. On contrôle ensuite l’exécution du programme dans la fenêtre d’édition de plusieurs façons, en appuyant sur les touches F5, F10 ou F11 (voir dans le menu debugg leur signification). Dans tous les cas, apparaît une petite flèche dans l’éditeur qui indique à quel endroit du programme on se trouve. Parallèlement, dans la fenêtre matlab, on peut contrôler les variables et même les modifier. Quand le programme a tourné ou est en train de tourner avec le debugger, on peut accéder aux valeurs des variables en déplaçant la souris sur chacune des variables dans l’éditeur matlab : sa valeur apparaît alors.
Matlab symbolique
Nous parlons aussi de matlab formel. Nous ne donnons ici que quelques exemples très simples. Il convient de consulter l’aide ou les démos pour avoir un regard beaucoup plus complet sur la partie symbolique de matlab, très riche. On pourra par exemple consulter l’aide pour étudier les fonctions int, diff et limit. Traiter les exemples suivants : syms x a b; y=x^2+ax+b; disp(y); diff(y,x) diff(y,a) ou syms x h; limit((sin(x+h)−sin(x))/h,h,0) ou int(sin(x)/x,0,inf) On pourra aussi étudier les fonctions sym, syms, solve, expand, simplify, simple, subs, subexp, et pretty. Traiterencoreles deux exemples suivants qui déterminentde façonsymbolique les maximumsdes fonctions x→ (a−x)(x−b) et x → (h−x)x(x+h) définies respectivement sur [a,b] et [−h,h], avec tracé des fonctions. Voir les deux scripts demo exemple formel1 et demo exemple formel2): % exemple de calcul formel avec trace .
syms a b x; f=(a−x)∗(x−b); fp=diff(f,x); d=solve(fp ); pretty(simplify(subs(f,x,d)));
disp( ’pour␣voir␣le␣graphe ,␣appuyez␣sur␣une␣touche ’ ); pause; X=−1:2/500:1; Y=subs(subs(f ,{a,b},{−1,1}),x,X);
10 1. CONNAISSANCES DE BASE DE MATLAB
plot(X,Y);
% exemple de calcul formel avec trace .
syms h x; f=(h−x)∗x∗(x+h); fp=diff(f,x); d=solve(expand(fp )); q=simplify(subs(f,’x’,d)); r=eval(vpa(q)); pretty(eval(vpa(q)));
disp( ’pour␣voir␣le␣graphe ,␣appuyez␣sur␣une␣touche ’ ); pause; X=−1:2/500:1; Y=subs(subs(f ,h,1) ,x,X); plot(X,Y);
Quelques exemples en Matlab
Dans cette section, nous donnons quelques exemples en Matlab : les lignes présentées dans ce TP pourront être tapées et exécutées les unes à la suite des autres, ou mieux, entrées dans script, qui est exécuté ensuite.
1.12.2. Intégrales Grâce au calcul symbolique, on peut calculer des intégrales simples comme : I = π/2 0 cos2(x)dx, J = 1 0 ax +1 x +3 dx, (a appartient à R∗ +) en tapant syms x a; I=int ((cos(x)^2),0,pi/2); disp(I); J=int (sqrt((a∗x+1)/(x+3)),x,0 ,1); disp(J); Pour mieux visualiser la valeur de J, on peut aussi remplacer la dernière ligne par pretty(J); On peut aussi calculer des intégrales impropres comme K = ∞ 0 e−x2dx, en tapant syms x K=int ( exp(−x^2),0,inf);
Comme les mathématiciens, matlab ne sera pas toujours déterminer les primitives des fonctions, comme le montrent syms x disp(int(exp(−x^2),1,inf)); disp(int(exp(−x^3.5),1,2));
Remarque 1.2. On notera la différence des résultats produits par les deux lignes précédentes; la première d’entre elles renvoit un résultat exprimé à partir de la fonction matlab erf. Cette fonction est une fonction qui est connue par les mathématiciens, qu’on peut utiliser sous matlab, en symbolique et en numérique, mais dont on ne dispose pas d’expression explicite exprimées avec des fonctions usuelles2. Si on tape dans la fenêtre de commande matlab : help erf on apprend la définition de cette fonction : ∀x ∈ R, erf(x)= 2 √π x 0 e−t2dt. La seconde ligne de l’exemple donné ci-dessus indique en revanche que l’intégrale demandée 2 1 e−x3,5dx, n’est pas connue, même à l’aide de fonctions auxiliaire comme erf.