Matlab applications en mécanique

Matlab: applications en mécanique

Tableaux

Dans cette section, on voit qu’on peut faire beaucoup de choses avec des tableaux, operations qui vont bien nous servir par la suite lorsqu’ils contiendront des donnees interessantes, pour l’analyse et les graphiques.

Construire des tableaux par concatenation

Le tableau le plus simple a une ligne et une colonne, c’est un scalaire
a=-3.7;
b=2;
J’ai maintenant deux variables, a et b qui ont la mˆeme taille et contiennent chacun un nombre réel. Je peut concat´ener ces deux tableaux pour faire un tableau plus grand c=[a,b];
les crochets [ ] sont les symboles de concat´enation. Cette op´eration met dans la variable c un tableau obtenu en mettant a et b ”cˆote `a cˆote”, ceci ´etant sp´ecifi´ par la virgule. Si je veux mettre a et b ”l’un en dessous de l’autre”, j’utilise les crochets avec un point-virgule d=[a;b];
Je peux construire directement un tableau en concat´enant des nombres v=[2, 3, 4; 3, -2, 6];
j’ai ainsi dans la variable v un tableau `a deux lignes et trois colonnes. Je peux faire beaucoup de manipulations de la mˆeme sorte, il suffit de penser `a des blocs que l’on mettrait les uns contre les autres. La seule contrainte est que le bloc r´esultant doit n´ecessairement ˆetre un rectangle.
t1=[v,v]
t2=[v;v]
t3=[d,v]
t4=[v; 2, 2, 2]
t5=[v,[1;1]]
J’ai fait successivement:
1. Mis dans t1 un tableau construit en mettant deux v ”cˆote `a cˆote”.
2. Mis dans t2 un tableau construit en mettant deux v ”l’un au dessus de l’autre”.
3. Mis cˆote `a cˆote d et v, c’est possible parce qu’ils ont le mˆeme nombre de lignes.
4. mis dans t4 v, avec ”en dessous” une troisi`eme ligne avec des 2 comme el´ements.
5. Mis dans t5, v, avec `a droite une cinqui`eme colonne avec des 1 comme el´ements.

Accéder aux sous-tableaux

Dans la section pr´ec´edente, nous avons vu comment cr´eer des tableaux en concat´enant des tableaux plus petits. Ici nous allons cr´eer des tableaux plus petits en s´electionnant des sous-tableaux, ou bien changer directement les valeurs dans les sous-tableaux.
Supposons que nous avons le tableau A=[1, 2, 3; 8, 9, 10; -2, -3, 0; 1, 1, 1];
C’est un tableau à 4 lignes et 3 colonnes. Le sous-tableau le plus simple, c’est un elément scalaire. On y accéde par son indice de ligne et de colonne, par exemple A(2,3) est un tableau `a une ligne et une colonne qui contient la valeur 10. Ici le premier indice est l’indice des lignes, et le second indice est l’indice des colonnes:
Je peux faire b=A(2,3)+A(1,1)
ici je met dans une nouvelle variable b la somme des el´ements (2,3) et (1,1) de A.
On peut de la mˆeme mani`ere acc´eder aux sous-tableaux de A, mais en mettant maintenant des vecteurs d’indice: c=A([1,2],[2,3])
maintenant, c est un tableau `a deux lignes et deux colonnes:
Je peux mettre les vecteurs d’indice dans des variables, plutˆot que de les ´ecrire explicitement si ¸ca m’arrange:
vl=[1,2];
vc=[2,3];
c=A(vl,vc);
est une s´equence ´equivalente `a la s´equence pr´ec´edente, ce sera parfois tr`es pratique, par exemple lorsqu’on veut extraire le mˆeme sous-tableau de plusieurs matrices.
Une chose tr`es int´eressante, c’est que l’on peut changer la valeurs des sous-tableaux. Tout d’abord on change un seul el´ement: A(2,3)=2;
Ici on ne change que l’´el´ement de la deuxi`eme ligne, troisi`eme colonne. On peut aussi changer directement une plus grande sous-matrice: A([1,2],[2,3])=[5, 5; 5, 5]
Ici, on remplace le bloc sp´ecifi´ par les vecteurs d’indice par un bloc de 5. Pour que ¸ca marche, il faut que le bloc qui re¸coit (`a gauche du =), ait la mˆeme taille que le bloc qu’on donne (`a droite du =):

Opérations avec des tableaux

Toutes les manipulations arithm´etiques que nous avons l’habitude de pra-tiquer sur des scalaires peuvent facilement ˆetre ´etendues pour agir sur les tableaux, simplement en appliquant ces opérations el´ement par elément. Il faudra seulement faire attention avec les multiplications, puisqu’il existe une régle de manipulation tr`es utile, la multiplication de matrices qui n’est pas une opération elément par elément.
Supposons que nous avons deux tableaux
A=[1, 2; 4, -1];
B=[0, -5; 2, -2];
alors C=A+B
consiste `a mettre dans l’´el´ement C(i,j) la somme des el´ements A(i,j) et B(i,j). Par exemple, C(2,2) est égal `a -3.
Les deux instructions suivantes
D=2*A
E=2+A
consistent `a mettre dans D les el´ements de A multipli´es par deux, et de mettre dans E les eléments de A auxquels on ajoute 2.
La multiplication des tableau est aussi une multiplication el´ement par el´ement, et se note .* et non *. L’instruction C=A.*B
met dans A(i,j)*B(i,j) dans C(i,j). Elle est ´equivalente `a la suite d’instructions suivante:
C=[0, 0; 0, 0];
for i=[1,2]
for j=[1,2]
C(i,j)=A(i,j)*B(i,j)
end
end
A ne pas confondre avec la multiplication de matrices, not´ee *: C=A*B
qui consiste `a consid´erer A et B comme des matrices et non comme des tableaux. Cette instruction est ´equivalente `a:
C=[0, 0; 0, 0];
for i=1:2
for j=1:2
for k=1:2
C(i,j)=C(i,j)+A(i,k)*B(k,j);
end
end
end
On verra que matlab sera très utile pour toutes les opérations qui pren-nent en compte des matrices, avec l’aide des propri´et´es de l’alg`ebre lin´eaire, pour résoudre des systèmes d’équations, calculer des vecteurs propres et des valeurs propres… D’ailleurs, matlab signifie ”MATrix LABoratory”.
On peut aussi utiliser les fonctions math´ematiques sur les tableaux, en appliquant la fonction elément par el´ement, par exemple:
C=sin(A)
D=exp(B)
E=cos(A)+tanh(B)
Ceci fait gagner des lignes de codes (donc du temps et des soucis), puisqu’il suffit d’écrire une seule instruction pour appliquer la fonction à tous les eléments. Par exemple la troisième instruction ci-dessus est équivalente à
E=[0, 0; 0, 0];
for i=[1,2]
for j=[1,2]
E(i,j)=cos(A(i,j))+tanh(B(i,j))
end
end
Sans cette capacit´e de matlab de traiter les tableaux el´ement par el´ement, on a vu dans les exemples pr´ec´edents, qu’il faut utiliser des boucles for imbriqu´ees qui parcourent tous les indices. On voit bien que ce type de codage alourdi consid´erablement le code.

Fonctions spéciales pour les tableaux

Après avoir vu des fonctions qui s’appliquent elément par elément, et qui agissent donc sur des tableaux de la mˆeme manière que sur des scalaire, nous voyons des fonctions qui servent à créer et manipuler des tableaux.
pour cr´eer des tableaux
Pou cr´eer un tableau rempli de z´eros on utilise la fonction zeros A=zeros(4,5)
ici, A devient un tableau `a quatre lignes et cinq colonnes, remplis de zeros. On peut ais´ement deviner `a quoi sert la fonction ones qui fonctionne de la mˆeme mani`ere. Il y a la fonction eye
I=eye(6) qui construit une matrice unitaire, c’est `a dire remplie de zeros, `a part les el´ements diagonaux qui sont des 1. La matrice unitaire est souvent not´ee I. Le nom ”eye” provient de l’anglais: ”eye-dentity”.
Une fonction qui sera utile pour faire varier les param`etres, la fonction linspace, qui cr´ee des vecteurs-ligne (un tableau `a une ligne et n colonnes)
v=linspace(0,1,65)
ici v est un vecteur de 65 el´ements ´equidistants entre 0 et 65. Cette commande est équivalente à
v=0:1/64:1
qui est encore équivalent à la séquence explicite
v=zeros(1,65);
for i=1:65
v(i)=(i-1)/64
end
Pour extraire de l’information des tableaux
Pour un tableau A, la fonction max donne en sortie un tableau ligne qui contient l’´el´ement le plus grand de chaque colonne de A

> A=[2, 3, 4; 1, 4, 4]
>> v=max(A)
v= 2 4 4

pour avoir l’´el´ement le plus grand de A, sans le d´etail colonne par colonne, il suffit de faire
m=max(max(A))
on peut aussi obtenir l’indice auxquels l’élément le plus grand se trouve dans le tableau, pour cela, voir dans l’aide matlab: help max. La fonction min fonctionne de manière similaire. On retrouve souvent dans matlab cette propri´et´ de fonctions agissant colonne par colonne.
On peut calculer la somme ou le produit des eléments d’un tableau
v=sum(A)
r=prod(A)
ici aussi, la dimension de l’argument de sortie est ´egale `a la dimension de l’argument d’entrée (ici A) moins 1, la fonction agissant colonne par colonne; donc pour la somme de tous les eléments du tableau, faire sum(sum(A)).

Vectorisation

La vectorisation—en fait ici on devrait dire la tableau-isation—est une pra-tique de programmation qui consiste `a ´eviter les manipulations el´ement par el´ement. Dans cette section, on verra des exemples et quelques principes di-recteurs. Vous verrez que nous avons d´ej`a utilis´e beaucoup de formulations vectoris´ees, qui sont tr`es naturelles en matlab.
Ici une s´erie d’exemples. Cr´eation d’un vecteur de zeros. el´ement par el´ement:
x=[];
for i=1:20
x=[x, 0];
end
vectoris´e:
x=zeros(1,20);
en utilisant une fonction pr´ed´efinie zeros. Construction d’un vecteur d’´el´ements r´epartis lin´eairement entre 0 et 2π, el´ement par el´ement
for i=1:20
x(i)=2*pi*(i-1)*1/19;
end
(il faut bien faire attention `a ne pas se tromper…) vectoris´e:
x=linspace(0,2*pi,20);
en utilisant la fonction pr´ed´efinie linspace. Calcul du sinus de ces valeurs, el´ement par el´ement:
for i=1:20
f(i)=sin(x(i));
end
vectoris´e:
f=sin(x)
graph de ce vecteur du sinus de x, el´ement par el´ement:
for i=1:19
line([x(i),x(i+1)],[f(i),f(i+1)]);
hold on
end
hold off
ou nous avons trac´e un `a un tous les segments reliant les points (abscisse,ordonn´ee)
cons´ecutifs. Vectoris´e: plot(x,f)
en utilisant la fonction pr´ed´efinie plot. Calcul de la valeur maximale dans le vecteur f, en indiquant `a quel indice cette valeur ce trouve dans f; el´ement par el´ement:
maxval=-inf;
indloc=0;
for i=1:20
if f(i)>maxval;
maxval=f(i);
indloc=i;
end
end
Ici, inf c’est la valeur infinie qui est plus grande que toutes les autres.
Vectoris´e:
[maxval,indloc]=max(f);
On pourrait continuer cette liste pendant longtemps, par exemple, pensez comment coder el´ement par el´ement ce que fait la fonction sort.
Jusqu’ici, pour vectoriser il a fallu connaˆıtre beaucoup de fonctions de matlab. Matlab est un langage dit ”de haut niveau”, non pas parce qu’il faut ˆetre tr`es fort pour pouvoir l’utiliser, mais parce qu’il permet d’´eviter les manipulations el´ementaires, dites de ”bas-niveau”, ces manipulations el´ementaires ´etant d´ej`a cod´ees de mani`ere sophistiqu´ee et efficace dans une tr`es large librairie de fonctions. Maintenant quelques exemples plus subtils utilisant les manipulations de tableaux.
Compter le nombre d’´el´ements ´egaux `a π dans un vecteur v donn´e.
El´ement par el´ement:
n=0;
for i=1:length(v)
if v(i)==pi;
n=n+1;
end
end
dans cet exemple, n est une variable que l’on utiliser pour compter. Vectoris´

1 Notes de cours 
1.1 Introduction
1.2 Matlab de base
1.2.1 Graphiques
1.2.2 Scripts
1.2.3 R´epertoire courant
1.2.4 Boucles et tests
1.2.5 Fonctions simples de matlab
1.2.6 Cr´eer des fonctions
1.2.7 L’aide matlab
1.2.8 Caract`eres sp´eciaux
1.3 Tableaux
1.3.1 Construire des tableaux par concat´enation
1.3.2 Acc´eder aux sous-tableaux
1.3.3 Op´erations avec des tableaux
1.3.4 Fonctions sp´eciales pour les tableaux
1.4 Vectorisation
1.5 Graphiques
1.5.1 Lignes
1.5.2 surfaces
1.5.3 Isovaleurs
1.5.4 Champs de vecteurs
1.6 Exemples
1.6.1 Calcul de la constante d’Euler
1.6.2 Mesurer une trajectoire sur une image
1.7 Votre compte-rendu
1.8 Remettre votre compte-rendu
1.9 Difficult´es habituelles
1.9.1 La fenˆetre de Matlab
1.9.2 Le graphique actif
1.9.3 Stopper un calcul
1.9.4 Sauver les figures

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *