1 CI – Recherche Opérationnelle
Ecole Nationale Supérieure d’Arts et Métiers
Travaux pratiques
AU 2017–2018
1 Introduction à Matlab
Matlab est un logiciel de calcul utilisant un langage de quatrième génération (i.e. interprété) qui permet la
résolution formelle ou numérique de problèmes de calcul scientifique.
Opérateurs élémentaires
Les opérateurs sous Matlab sont, en général, identiques à ceux des calculateurs et des langages de
programmation classiques. Matlab introduit en plus un opérateur de division inversée \ permettant de
faire la division a\b = ba . Ainsi on a :
= : l’affectation : a ← b s’écrit a = b
* : la multiplication : ab s’écrit a*b
∧ : la puissance : ab s’écrit a∧ b
/ : la division : ba s’écrit a/b
\ : la division inversée : ba s’écrit a\b
+ : l’addition
- : la soustraction
Exercice 1
y
Soit x = −5 + 9i et y = 6 + 2i. Calculer en utilisant Matlab x + y, xy, yx , et x .
Corrigé
>> x=-5 + 9*i; y = 6 + 2*i;
>> x+y
ans=
1.0000 + 11.0000i
>> x*y
ans=
-48.0000 + 44.0000i
>> x/y
ans=
-0.3000 + 1.6000i
>> x\y
ans=
-0.1132 - 0.6038i
La variable ans (pour answer) est une variable qui reçoit le résultat le plus récent. Les variables peuvent
êtres manipulées par les commandes suivantes :
1/4
clear : efface toutes les variables de la mémoire de la session Matlab en cours
clear var1 var2 : efface les variables var1 et var2 de la mémoire
who : liste les variables en mémoire
whos : liste plus d’informations sur toutes les données en mémoire
En cas de doute, la commande help peut servir à avoir des informations sur un sujet, une instruction ou
une fonction :
>> help exp
EXP Exponential.
EXP(X) is the exponential of the elements of X, e to the X.
For complex Z=X+i*Y, EXP(Z) = EXP(X)*(COS(Y)+i*SIN(Y)).
Matrices
Une matrice est déclarée par la donnée de ses éléments de la manière suivante :
>> A = [1 2 3; 4 5 6]
La matrice identité est déclarée par la commande eye(i) où i est sa dimension. Ainsi la matrice d’identité
d’ordre 3 se déclare :
>> I = eye(3)
Les éléments d’un vecteur ou d’une matrice A peuvent être adressés en utilisant les indices sous la forme
A(i, j). En l’occurrence :
>> A(1,2)
Les opérations matricielles restent intuitivement possibles. Ainsi :
B = A : affecte la matrice A à B
inv(A) : la matrice inverse de A
A’ : la transposée de la matrice A
A+B / A-B : la somme matricielle de A et B
A * B : le produit matriciel AB
A / B : le produit matriciel AB−1
A \ B : le produit matriciel A−1 B
A .* B : le produit élément par élément des matrices A et B
Exercice 2
On considère les deux matrices
1 2 3
1 2 3
A= 4 5 6 B=
4 5 6
7 8 9
2/4
2 Programmation linéaire avec Matlab
Matlab se dispose d’un toolbox d’optimisation contenant des programmes/fonctions pour la résolution
des différents types de problèmes d’optimisation. En l’occurrence, le programme linprog permet la
résolution de programmes linéaires de minimisation de type :
min c T x
x
sujet à
Ax ≤ a
Bx = b
xmin ≤ x ≤ xmax
>> [solopt,valopt,exitflag]=linprog(c,A,a,B,b,xmin,xmax,x0,options)
>> solopt=linprog(c,A,a,B,b,xmin,xmax,x0,options)
>> [solopt,valopt]=linprog(c,A,a,B,b,xmin,xmax,x0,options)
L’argument options est une structure contenant plusieurs paramètres personnalisables par le biais de la
fonction optimset. L’instruction :
>> optimset(’linprog’)
3/4
Ainsi la personnalisation se fait par l’instruction :
>> options=optimset(’Paramètre1’,valeur1,’Paramètre2’,valeur2,...)
par exemple :
>> options=optimset(’LargeScale’,’off’,’Simplex’,’on’,
’Display’,’off’,’Diagnostics’,’on’)
Exemple illustratif
On considère le problème suivant :
max 2x + 5y
x,y
sujet à
2x + 3y ≤ 30
x + 2y ≥ 10
− x + y ≤ −1
x≥0 , y≥0
Ainsi, on définit les paramètres du problème (fonction-objectif, contraintes, etc.) comme suit
>> c=[-2,-5]’;
>> A=[2,3;-1,-2;-1,1];
>> a=[30,-10,-1]’;
>> xmin=[0,0]’;
Les paramètres de linprog permettant d’utiliser l’algorithme du simplexe
>> options=optimset(’LargeScale’,’off’);
La solution optimale est calculée et affichée par l’instruction :
>> sol=linprog(c,A,a,[],[],xmin,[],[],options)
L’affichage de la solution optimale demeure possible tant que la variable sol n’a pas changé
>> sol
Pour voir le statut de convergence de l’algorithme, les trois premiers paramètres de retour sont necessaires :
>> [sol,val,exitflag]=linprog(c,A,a,[],[],[],[],[],options)
Exercice 3
On considère les deux problèmes suivant :
max 3x + 5y + 8z max 13x + 6y − 2z − 10t
x,y,z
x,y,z,t
sujet à sujet à
( P1) x + y + z ≤ 100 ( P2) − x + y + 5z − 2t ≥ 5
3x + 2y + 4z ≤ 200
x − 3z + t = 7
x + 2y ≤ 150 x + y + 4z − 3t = 4
x , y , z ≥ 0 x , y , z , t ≥ 0
4/4