You are on page 1of 4

Université Hassan II, Casablanca

1 CI – Recherche Opérationnelle
Ecole Nationale Supérieure d’Arts et Métiers
Travaux pratiques
AU 2017–2018

Complément de cours – Handout 1

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)).

See also LOG, LOG10, EXPM, EXPINT.


Overloaded methods
help sym/exp.m

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

Calculer A−1 , A2 , BA, et At B


Corrigé
>> A = [1 2 3; 4 5 6; 7 8 9]; B= [1 2 3; 4 5 6];
>>inv(A)
>>A^2
>>B*A
>>A*B’

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

L’appel de linprog se fait par l’instruction :

>> [solopt,valopt,exitflag]=linprog(c,A,a,B,b,xmin,xmax,x0,options)

Les arguments d’entrée se présentent comme suit :


c : le (vecteur) coefficient de la fonction-objectif
A : la matrice des contraintes d’inégalité négative (≤), remplacée par [] si nulle
a : le terme de droite des contraintes d’inégalité, remplacé par [] si nul
B : la matrice des contraintes d’égalité (=), remplacée par [] si nulle
b : le terme de droite des contraintes d’égalité, remplacé par [] si nul
xmin : la borne inférieure de x s’il existe, remplacée par [] sinon
xmax : la borne supérieure de x s’il existe, remplacée par [] sinon
x0 : une solution initiale identifiée, remplacée par [] sinon
options : les paramètres de linprog
Les arguments de retour se présentent comme suit :
solopt : la solution optimale
valopt : la valeur optimale
exitflag : statut de convergence : un entier positif si l’algorithme a convergé vers une solution
optimale
Le nombre d’arguments de retour peut être personnalisé au besoin. Ainsi les deux instructions suivantes
sont possibles :

>> 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’)

permet d’afficher les paramètres pouvant être personnalisés entre autres :


’LargeScale’ : ’on’/’off’ permet d’activer/désactiver les méthodes avancées pour les
problèmes de grande dimension
’Simplex’ : ’on’/’off’ permet d’activer/désactiver l’utilisation de l’algorithme du
simplexe
’Display’ : ’iter’/’final’/’off’ permet d’activer/désactiver l’affichage par
itération
’Diagnostics’ : ’on’/’off’ permet d’activer/désactiver l’affichage des informations sur la
fonction-objectif

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

Le problème s’écrit sous la forme :


  
 x

 min −2 −5
y



 x,y
 sujetà


  
2 3   30

  −1 −2  x ≤  −10 
y


−1 1 −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
 

Résoudre les problèmes sous Matlab en utilisant l’algorithme du simplexe.

4/4

You might also like