Vous êtes sur la page 1sur 14

Dépt.Génie Civil -LMD1 TP –Matlab Fev.

2021

Notions pratique - Matlab pour les TPs de Programmation


MATLAB est un logiciel de calcul numérique à syntaxe simple optimisé pour le calcul des matrices.
Avec ses fonctions spécialisées. MATLAB peut être aussi considéré comme un langage de
programmation adapté pour les problèmes elasto-mécaniques (RDM ; MEF…..) et fournit à
l'utilisateur un environnement lui permettant de réaliser un grand nombre de calcul, en particulier
ceux où les matrices interviennent.

 Il vous permet de résoudre de nombreux problèmes techniques de calcul numérique


bien plus rapidement que si vous deviez écrire un programme dans un langage tel que
C ou Fortran .

Une courte révision des commandes de bases de Matlab nécessaires pour l’essentiel de la
programmation dans les TPs MEF est présentée dans cette partie.
MATLAB est un interpréteur: les instructions sont interprétées et exécutées ligne par ligne.
Il existe deux modes de fonctionnement:
1. Mode Interactif: MATLAB exécute les instructions au fur et à mesure qu'elles sont
données par l'usager.
2. Mode Exécutif: MATLAB exécute ligne par ligne un "fichier M" (programme en langage
MATLAB).
Espace de Travail (Workspace)
MATLAB s'opère depuis une session de commandes en ligne (voir ci-dessus) pour Introduire des
SCALAIRES et des OPERATIONS simples à la suite du MATLAB Prompt >> (double flèche).
» 3*4+5
ans =
17
» cos (30*pi/180)
ans =
0.8660
» x=4
x =
4
» 2/sqrt(3+x)
ans =
0.7559

Les variables sont définies au fur et à mesure que l'on donne leurs noms et leurs valeurs numérique
sous leurs expressions mathématiques.

Les variables ainsi définies sont stockées dans l'espace de travail et peuvent être utilisées dans
les calculs subséquents.
! Si le nom de la variable et le signe = sont omis une variable de nom « ans » est automatiquement
créée.
On peut faire s’afficher la valeur d’une variable sans affichage de son nom ni de ans :
>> disp(x)

Chargé du Cours et TP: B.Lamri & A. KADA 1


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

Commandes et Variables
Les commandes MATLAB sont de la forme
variable = expression
ou simplement
expression

Les expressions sont composées d'opérateurs et autres caractères spéciaux de fonctions et de noms
de variables. L'évaluation de l'expression produit une matrice, qui est alors écrite sur l'écran et
stockée pour une utilisation future.
Ainsi les instructions suivantes, déclarent les variables lors de leurs affectation :
Pour supprimer le résultat utiliser le point-virgule ‘ ; ’ à la fin de la ligne commande, exemples :
>> y=32;
>> z=5;
>> x=2*y-z;
>> w=3*y+4*z
w =
116

Matlab est sensible à l’écriture de variables symboliques Majuscules et minuscule.


>> a=-1
?
>> B=LOG(a)
?
>> B=log(a)
?
>> C=exp(B)
?
Maintenant vous devez avoir remarqué que MATLAB est sensible aux Majuscules et minuscules.
! Les fonctions prédéfinies (comme log ou exp ) doivent être écrites en minuscules.

Une aide interactive est disponible pour tout es les commandes MATLAB.
Exécuter la commande help. Pour obtenir l'aide relative à une commande, exécuter :
>> help ‘Nom de commande’
Exemples :
>> help abs % fournit la description de la fonction ABS (valeur absolue)
>> help \ % fournit l'utilisation du caractère '\'
>> helpwin % ouvre une fenêtre d'aide générale
Le symbole ‘%’ dans une ligne a pour effet que le reste de la ligne ne sera pas exécuté (ceci permet
d'insérer des commentaires dans un fichier d'exécution).

Les commandes effectuées jusqu'à maintenant ont créé des variables qui sont stockées dans
l'espace de travail de MATLAB.

Chargé du Cours et TP: B.Lamri & A. KADA 2


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

La commande
>> who
donne la liste des variables contenues dans cet espace de travail. Pour en savoir plus, il faut exécuter
la commande :
>> whos
Si l'on souhaite en savoir plus sur une variable A contenue dans l'espace de travail, la commande
>>size (A)
fournit les dimensions (nombre de lignes nombre de colonnes) de cette variable.
La commande
>>clear
détruit toutes les variables de l'espace de travail.

Plusieurs commandes peuvent être écrites sur une ligne. Elles seront alors séparées par ';'ou par ','
>> who, whos, e = sqrt(-1), f=4*atan(1)
?

Combien d’octets occupe un nombre « réel », un nombre complexe ?

Exécuter les commandes


>> clear, who, whos
?

Introduction de matrices
MATLAB ne travaille qu'avec une seule sorte d'objet : une matrice numérique rectangulaire dont les
éléments peuvent être complexes. Dans certains cas, une signification particulière peut être attribuée
à des matrices 1 x 1, qui sont des scalaires et à des matrices ne comportant qu'une seule ligne ou une
seule colonne, qui sont des vecteurs.
Les matrices peuvent être introduites dans MATLAB des quatre façons suivantes :
-liste explicite des éléments
- utilisation des commandes du programme
- lecture d'un fichier extérieur
- lecture d'un fichier de données (commandes SAVE, LOAD)
Le langage MATLAB ne contient aucune commande de dimension ou de déclaration.
Le stockage est alloué automatiquement tant qu'il reste de la mémoire disponible.
La liste explicite est la façon la plus simple d'introduire de s matrices de petite taille. Cette liste est
précédée du symbole '[' et suivie du symbole ']'. Elle est constituée ligne par ligne, la fin d'une ligne
étant indiquée par le symbole ';'. Les éléments d'une ligne doivent être séparés par un espace ou une
virgule.

Ainsi, l'entrée de la ligne


>> A = [ 1 2 3; 4 5 6; 7 8 9 ]

Chargé du Cours et TP: B.Lamri & A. KADA 3


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

donnera comme résultat à l'écran


A =
123
456
789

La matrice A est alors stockée pour une utilisation future. Les éléments des matrices peuvent être
toute expression reconnue par MATLAB, par exemple :
>>B = [ -2.5; log(1); 4*atan(1) ]
B =
-2.5000
0
3.1416
>> C = [ sqrt(2) 10/2*5 (1+2+3)/2 exp(1) ]
C =
1.4142 25.0000 3.0000 2.7183

Les matrices peuvent également être définies sur plusieurs lignes d'entrée, le <Entrer>
remplaçant le symbole ';'. Ainsi A aurait pu également être introduite par :

>> A = [ 1 2 3 <Entrer>
4 5 6 < Entrer >
7 8 9 ] < Entrer >
A =
123
456
789

Les Matrices Fonctions


Certaines commandes de MATLAB permettent la création de matrices spéciales. Ainsi par exemple :
>> E3 = eye(3) % commande crée une matrice unité d'ordre 3 et la stocke sous le nom E3.
>> ONEA = ones(3,3) % commande crée une matrice d'éléments tous égaux à 1
% et de dimensions 3 X 3 et la stocke sous le nom ONEA.
Autres matrices-fonctions utiles :
zeros ( ) Matrice- zéros
diag( ) Créer ou Extraire des Diagonales
rand ( ) Matrice Aléatoire

Quelques exemples de ces commandes sous forme de matrices construites par bloques :
>> [eye(3),diag(eye(3)),rand(3)]
ans =
1.0000 0 0 1.0000 0.9293 0.2511 0.3517
0 1.0000 0 1.0000 0.3500 0.6160 0.8308
0 0 1.0000 1.0000 0.1966 0.4733 0.5853

Chargé du Cours et TP: B.Lamri & A. KADA 4


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

>> E=rand(3)
E =
0.5497 0.7572 0.5678
0.9172 0.7537 0.0759
0.2858 0.3804 0.0540
>> F = [E, zeros(3,2); zeros(2,3), ones(2)]
F =
0.5497 0.7572 0.5678 0 0
0.9172 0.7537 0.0759 0 0
0.2858 0.3804 0.0540 0 0
0 0 0 1.0000 1.0000
0 0 0 1.0000 1.0000

Éléments de matrices
Un élément individuel d’une matrice est déterminé par ses indices entre parenthèses. Ainsi la
Commande :

>> A(2,3)
fournit
ans =
6
Mais l'on peut également obtenir un bloc d'éléments d'une matrice. Par exemple,
>> A(1, :) % fournit la 1ere ligne de A
>> A(:, 2) %f ournit la 2eme colonne de A
>> A([1 2], :) ou A(1:2, :) fournit la matrice composée des 2 premières lignes de A
>> A(:, [2 3]) ou A(:, 2:3) fournit la matrice composée des colonnes 2 et 3 de A
>> A(:) spécial ! Fournit quoi ?

Le symbole ':' se révèle donc particulièrement intéressant. Il est aussi utilisé dans les expressions j:k
et j:i:k qui permettent de créer des vecteurs :
j:k est identique à [j, j+1, j+2, ..., k]; et est vide si j>k
j:i:k est identique à [j, j+i, j+2i, ..., k]; et est vide si i>0 et j>k ou si i<0 et j<k
Les valeurs de i,j,k ne doivent pas être nécessairement entières.

Le dimensionnement des matrices est réalisé automatiquement dans MATLAB. Ainsi, la


commande :
>> D = [ 1 2 3; 4 5 6 ];
suivie de la commande
>> D = [ 1 0; 0 1]
produit
D=
10
01

Chargé du Cours et TP: B.Lamri & A. KADA 5


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

En d'autres mots, le système en « sait assez » pour reconnaître que la matrice D a été changée d'une
matrice 2 x 3 à une matrice 2 x 2. Un autre aspect de ce dimensionnement automatique apparaît si
l'on exécute la commande :
>> D(2,4) = 5

qui produit
D=
1000
0105
Cette fois, MATLAB rend D suffisamment grande pour que la commande ait un sens. Les « trous »
sont remplis par des éléments nuls.

Des matrices peuvent aussi être formées à partir de plus petites matrices considérées comme
éléments. Ainsi la suite de commandes :
>> B = [10;11;12]; C = [13 14 15 16]; D = [ A B; C]

produit
D=
1 2 3 10
4 5 6 11
7 8 9 12
13 14 15 16

Il faut évidemment que les dimensions des blocs consécutifs soient compatibles ! Par exemple, la
commande :
>> d = [ A C; B]
! donne lieu à un message d'erreur :
??? Error using ==> horzcat
All matrices on a row in the bracketed expression must have the same
number of rows.

Remarque sur les VECTEURS


On déclare un vecteur ligne x en donnant la liste de ses éléments de la façon suivante:
>> x=[0.5 1.2 -3.75 5.82 -0.735]
x =
0.5000 1.2000 -3.7500 5.8200 -0.7350
ou en donnant la suite qui forme le vecteur :
>> x=2:0.6:5 (incrémentation de 2 à 5 avec pas de 0.6)
x =
2.0000 2.6000 3.2000 3.8000 4.4000 5.0000
ou en utilisant une fonction qui génère un vecteur:
>> x=linspace(1,10,6)
x =
1.0000 2.8000 4.6000 6.4000 8.2000 10.0000

Chargé du Cours et TP: B.Lamri & A. KADA 6


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

– linspace(a,b,n) crée une matrice ligne de n points régulièrement espacés sur l’intervalle [a, b]
(bornes comprises).

>> m = [-3:3]
>>x = [1:-0.25:-1]
Si l’on veut un vecteur colonne, on peut taper
>> m = m’
ou
>> x = x(:)
Opérations usuelles
Matlab permet d’effectuer les opérations usuelles en étendant leur définition aux matrices
L’addition et la soustraction ne méritent aucun commentaire particulier, sinon que les tailles des
matrices doivent être égales, exemple :
>> m + x
??? Error using ==> plus
Matrix dimensions must agree.
Matlab autorise que les dimensions ne soient pas égales lorsqu’une des variables est un scalaire,
exemple :
>> A + 1 %fournit la même valeur que A + ones(3).
>> A+1
ans =
2 3 4
5 6 7
8 9 10
Des expressions peuvent être construites en utilisant les opérateurs arithmétiques suivants :
+ addition / division à droite
- soustraction \ division à gauche
* multiplication ^ puissance
ainsi que les règles de priorité des opérations qui sont conformes à celles qui sont utilisées dans la
plupart des langages de programmation. Elles sont données par le tableau suivant :
Niveau de priorité Opération
( ) parenthèses
1 puissance
2 multiplication et division
3 addition et soustraction
A niveau de priorité égal, les opérations sont effectuées de la gauche vers la droite.
! Les parenthèses ( ) vous permettent d’organiser les priorités dans vos calculs. Leur utilisation est
recommandée pour éviter les ambiguïtés et risques d’erreurs.

Chargé du Cours et TP: B.Lamri & A. KADA 7


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

Opérations matricielles
Les opérations matricielles exécutées par MATLAB sont illustrées dans le tableau suivant:
B = A' La matrice B est égale à la matrice A transposée
E = inv(A) La matrice E est égale à la matrice A inversée
C=A+B Addition
D=A-B Soustraction
Z = X*Y Multiplication
X = A\B Équivalent à inv(A)*B
X = B/A Équivalent à B*inv(A)

Opérations sur les tableaux


Une matrice peut être vue comme un tableau de valeurs, indépendamment de l’algèbre linéaire.
Matlab permet de travailler avec les valeurs contenues dans un tableau. Pour l’addition et la
soustraction, il n’y a pas de différence entre matrice et tableau de valeurs.
Pour la multiplication, les divisions et l’élévation à une puissance, on fait précéder le symbole
d’opération d’un point ( .). Les tableaux doivent avoir la même taille :
Soit :
>> A = [3 2 -2;-1 0 1;1 1 0] ;
>> M = A\eye(3);
Faire :
>> A.^2
>> M.*A
>> b./c
>> C.*B
>> A.*B
>> A.^[2 1 2 ; 2 0 1 ; 1 1 1]
On remarquera que A.^2 élève à la puissance 2 chaque élément de A.
fichiers -M
Jusqu’à présent, nous avons travaillé en ligne sur la fenêtre Matlab. Cette façon de travailler n’est pas
optimale. Si on commet une erreur, on est obligé de retaper toute la ligne ! Pour pallier à cet
inconvénient, on peut utiliser un fichier d’instructions.
Matlab peut en effet exécuter une suite d’instructions stockées dans un fichier. On appellera ces
fichiers des fichiers-M, et leur nom doit être suivi du suffixe .m ;
Il est recommandé de travailler systématiquement avec les fichiers-M dans des programmes de
MEF.
On va distinguer deux types de fichiers -M: les fichiers "scripts" et les fichiers de fonctions.
- Fichiers "scripts" ou fichiers d’instructions
Un fichier script est un fichier contenant une suite d’instructions Matlab directement exécutables.
Ces instructions sont exécutées en utilisant les variables de l’espace de travail.
La liste de ces variables est fournie en réponse à la commande
>> whos
Pour créer un tel fichier, il faut ouvrir une fenêtre d’édition. Vous aurez aussi l’accès à l’éditeur en
tapant la commande :
Chargé du Cours et TP: B.Lamri & A. KADA 8
Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

>> edit
Une fois que vous aurez écrit les instructions que vous voulez voir exécutées, vous allez sauvegarder
le fichier sous un nom de votre choix, avec le suffixe .m

=================Exemple - caractéristique d'un ressort


On considère ici un ressort que l'on tend plus ou moins tout en mesurant la force qui lui est
appliquée à l'aide d'un dynamomètre dont la précision est d'environ 0.5 [N].
Les résultats que l'on a obtenus sont les suivants :
Longueur[cm] 4.2 5.0 6.0 7.0 8.0 9,0 10.0 11.0 12.0 13.0 14.0
Force [N] +1/-0.5[N] 0.0 1.1 2.0 3.2 3.9 4.6 5.8 7.0 8.3 9.0 9.5
1. Tracer le graphe de la force en fonction de la longueur avec les barres d'erreurs.
2. Mettre en valeur le graphe à l'aide d'un titre et d'informations portées sur l'abscisse et
l'ordonnée.
3. Rechercher une loi polynomiale représentant au mieux cette caractéristique ; (celle d'un
ressort est généralement linéaire, éventuellement cubique).
4. Mesurer la qualité des modèles proposés pour représenter le ressort.
5. Afficher les informations sur le graphe lui-même.
========================= Solution : SCRIPT

Chargé du Cours et TP: B.Lamri & A. KADA 9


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

========================= Résultat : GRAPHE

- Fichiers ”functions”
L’utilisation de fichier script peut s’avérer ne pas être satisfaisant et il est préférable dans certains cas
de disposer d’un moyen d’évaluer une matrice de rigidité en utilisant la même procédure pour
différents cas en variant seulement les paramètres (variables) d’entrée.
Les fonctions ‘’ functions’’ dèfinies par des fichiers m commencent par une ligne d’instruction :
function [variables(s)- d’attribution ] = nom-de-la-fonction(arguments)
function est necessaire pour identifier le fichier comme une fonction, variables(s)- d’attribution est
une variable muette représentant le(s) paramètre(s) de sortie , nom-de-la-fonction est le nom donnè
à cette fonction, et arguments paramètre(s) d’entrée, ce sont des valeurs à faire passer à la fonction
à partir de l’interface principale de Matlab (>>…..) ou à partir d’une autre fonction.
==========Exemple
function [x] = f1(r)
% Premier exemple de fonction :
% r et x sont des variables quelconques.
x = r.*sin(r);
Taper cette fonction, vous devez utiliser l’editeur de MatLab (Edit) dans la barre ou File>New>M file
dans le menu File)

Chargé du Cours et TP: B.Lamri & A. KADA 10


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

Prés avoir terminé l’èdition, utiliser l’option File>Save pour sauvegarder ce fichier- Par default, l’editeur va
essayer de le sauvegarder dans le repertoir de travail en utilisant le ‘’nom-de-fonction’’ comme le nom de
fichier
=======Exemple (suite)
Sauvegarder le fichier sous : f01.m
Et la commande : >>help f01.m
% va copier les lignes de commentaires immédiatement après la premiere ligne dans l’interface
MatLab soit :
>> help f01.m
Premier exemple de fonction :
r et x sont des variables quelconques.

=======Autre exemple :
function [s,p]=addmul(x,y)
% addmul calcul somme et produit de 2 matrices
s=x+y;
p=x*y;

>> clear
>> [a,b]=addmul(3,2)
>> addmul(3,2)
>> v=addmul(3,2)

Chargé du Cours et TP: B.Lamri & A. KADA 11


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

Les fonctions MATLAB à utiliser


----------------------------------------------------------------------------------------------------------------------
function y = keRessort(k)
%keRessort: Cette fonction produit la matrice de rigidité
% de l'élément pour un ressort de rigidité (raideur) k.
% la dimension de rigidité de l'élément
% est 2 x 2.
y=[ k, -k ; -k k];
----------------------------------------------------------------------------------------------------------------------
function y = AssembleRessorts(K,k,i,j)
%AssembleRessorts- Cette fonction assemble la matrice de rigidité
% elementaire k du ressort aux noeuds i et j dans
% la matrice de rigidité globale K.
% Cette fonction produit la matrice de rigidité globale K
% aprés avoir assembler la matrice de rigidité de l'èlèment.
K(i,i) = K(i,i) + k(1,1);
K(i,j) = K(i,j) + k(1,2);
K(j,i) = K(j,i) + k(2,1);
K(j,j) = K(j,j) + k(2,2);
y = K;
----------------------------------------------------------------------------------------------------------------------
function y = ForcesEltRessort(k,u)
%ForcesEltRessort: Cette fonction produit le vecteur force nodal
% elementaire étant donné la matrice de rigidité k
% et le vecteur de déplacement nodale elementaire
u.
y = k * u;
----------------------------------------------------------------------------------------------------------------------

>> k1= keRessort (100)


k1 =
100 -100
-100 100
>> k2= keRessort (200)
k2 =

Chargé du Cours et TP: B.Lamri & A. KADA 12


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

200 -200
-200 200

>> K=zeros(3,3)
K =
0 0 0
0 0 0
0 0 0
>> K= AssembleRessorts (K,k1,1,2)
K =
100 -100 0
-100 100 0
0 0 0
>> K= AssembleRessorts (K,k2,2,3)
K =
100 -100 0
-100 300 -200
0 -200 200
>> k=K(2:3,2:3)
k =
300 -200
-200 200
>> f=[0 ; 15]
f =
0
15
>> u=k\f
u =
0.1500
0.2250
Etape finale de Post-Traitement
Dans cette étape, on déduit la réaction au nœud 1 et la force dans chaque ressort en utilisant Matlab
comme suit :
On établit le vecteur de déplacement global U puis on détermine le vecteur force global aux nœuds F
>> U=[0 ; u]
U =

Chargé du Cours et TP: B.Lamri & A. KADA 13


Dépt.Génie Civil -LMD1 TP –Matlab Fev.2021

0
0.1500
0.2250
>> F=K*U
F =
-15.0000
-0.0000
15.0000
La réaction au nœud 1 est une force de 15 kN (à gauche )

Chargé du Cours et TP: B.Lamri & A. KADA 14

Vous aimerez peut-être aussi