Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
*-*-*-*-*-*-*
ECOLE POLYTECHNIQUE D’ABOMEY-CALAVI
*-*-*-*-*-*-*
ECOLE DOCTORALE DES SCIENCES DE L’INGENIEUR
*-*-*-*-*
Devoir de maison
24
Le problème revient à minimiser la fonction 𝑓(𝑥) = + 𝑥 2 étant donné le point de départ
𝑥
0 1,6 17,56
1 1,65 17,25
2 1,75 16,78
3 1,95 16,11
4 2,35 15,74
5 3,15 17.54
Le point minimum est donc délimité par 1,6 ≤ 𝑥 ∗ ≤ 3,15 plus précisément 2,35
Exercice 2
1) Fonction objectif en fonction de F1 et F2
F1 : débit d’écoulement de la pompe 1
F2 : débit d’écoulement de la pompe 2
P1 : pression de la pompe 1
P2 : pression de la pompe 2
PT : pression totale développée par les deux pompes
η : rendement de chacune des pompes
On a les équations suivantes
𝜂 × 𝑃𝑇 = 𝐹1 × ∆𝑝1 + 𝐹2 × ∆𝑝2
𝜂 × 𝑃𝑇 = 𝐹1 × 2,1 × 1010 𝐹12 + 𝐹2 × 3,6 × 1010 𝐹22
Alors on a la fonction objectif :
𝑦 = 2,1 × 1010 𝐹13 + 3,6 × 1010 𝐹23
Avec :
𝐹1 + 𝐹2 = 0.01
𝐹1 ≥ 0 𝑒𝑡 𝐹2 ≥ 0
Le problème revient à minimiser la fonction objectif sous contrainte égalité
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° 𝑎1 c R
𝑒1 3 4 5 1 0 0 0 40 40
= 13,33
3
𝑎1 1 1 1 0 0 1 0 9 9
=9
1
𝑎1 7 4 4 0 1 0 1 42 42
=6
7
∆ 3+8P 2+5P 4+5P 0 -P 0 0 -51P
Tableau 1
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° ° c R
𝑒1 0 16 23 1 3 0 22 40
= 13,33
7 7 7 3
𝑎1 0 3 3 0 1 1 3 9
=9
7 7 7 1
𝑥1 1 4 4 0 1 0 42 42
=6 =6
7 7 7 7 7
∆ 0 (2+5P)/7 (16+5P)/7 0 -P 0 -18P/3P
Tableau 2
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° ° c R
𝑒1 0 0 1 1 −1 6 6
=1
3 1
𝑥2 0 1 1 0 1 7 7
=7
3 1
𝑥1 1 0 0 0 −1 2 2
=∞
3 0
∆ 0 0 2 0 1 -20
3
Tableau 3
° ° ° 𝑒1 𝑒2 c R
𝑥3 0 0 1 1 −1 6 -18
3
𝑥2 0 1 0 -1 2 1 3
3 2
𝑥1 1 0 0 0 −1 2 -6
3
∆ 0 0 0 -2 1 -32
Tableau 1’
𝑥1 𝑥2 𝑥3 ° 𝑒2 ° c R
𝑒1 0 16 23 1 3 0 22 40
7 7 7 16/7
= 13,33
𝑎1 0 3 3 0 1 1 3 3
=7
7 7 7 3/7
𝑥1 1 4 4 0 1 0 42 21
− =6
7 7 7 7 2
∆ 0 (2+5P)/7 (16+5P)/7 0 (3+P)/3 0 -18P/3P
Tableau 2’
° 𝑥2 ° ° ° R
𝑥3 0 1 1 1 0 0 13
2 2 2
𝑥2 0 3 0 −3 1 1 3
2 2 2
𝑥1 1 1 0 −1 0 0 5
2 2 2
∆ 0 −3 0 −1 0 0
2 2
Et y*=33,5
Code MATLAB
Script
A=[3,4,5,1,0; 1,1,1,0,0; 7,4,4,0,-1];
b=[40,9,42];
c=-[3,2,4,0,0];
nma_simplex(A,b,c,true);
validate_input(A,b,c);
[A,b] = make_phase_one(A,b,debug);
tab = simplex(A,b,c,debug,'phase 2');
end
%==========================
function [A,b] = make_phase_one(A,b,debug)
[m,n] = size(A);
tab = zeros(m+1,n+m+1);
tab(1:m,1:n) = A;
tab(end,n+1:end-1) = 1;
tab(1:m,end) = b(:);
tab(1:m,n+1:n+m) = eye(m);
if debug
fprintf('>>>>Tableau de Simplexe [phase 1]\n');
disp(tab);
end
tab = simplex(tab(1:m,1:n+m),tab(1:m,end),tab(end,1:n+m),...
debug,'phase 1');
A = tab(1:m,1:n);
b = tab(1:m,end);
end
%=================================
function tab = simplex(A,b,c,debug,phase_name)
[m,n] = size(A);
tab = zeros(m+1,n+1);
tab(1:m,1:n) = A;
tab(m+1,1:n) = c(:);
tab(1:m,end) = b(:);
keep_running = true;
while keep_running
if debug
fprintf('*****************************************************************\n')
;
fprintf('Tableau de Simplexe [%s] \n',phase_name);
disp(tab);
end
else
pivot_row = 0;
min_found = inf;
for i = 1:m
if tab(i,J)>0
tmp = tab(i,end)/tab(i,J);
if tmp < min_found
min_found = tmp;
pivot_row = i;
end
end
end
if debug
fprintf('la ligne du pivaut est %d\n',pivot_row);
end
%normaliser
tab(pivot_row,:) = tab(pivot_row,:)/tab(pivot_row,J);
%mettre tous les entrées de la colonne J à 0 .
for i=1:m+1
if i ~= pivot_row
tab(i,:)=tab(i,:)-sign(tab(i,J))*...
abs(tab(i,J))*tab(pivot_row,:);
end
end
end
else
keep_running=false;
end
end
% fonction interne qui trouve les vecteurs de base actuel
function current_x = get_current_x()
current_x = zeros(n,1);
for j=1:n
if length(find(tab(:,j)==0))==m
idx= tab(:,j)==1;
current_x(j)=tab(idx,end);
end
end
end
end
%==========================
function validate_input(A,b,c)
if ~ismatrix(A)
error('A doit être une matrice');
end
if ~isvector(b)
error('b doit être un vecteur');
end
if ~isvector(c)
error('c doit être un vecteur');
end
[m,n]=size(A);
if rank(A) <m
error('le rang de A doit être égale au nombre de ligne de A');
end
if length(b) ~= m
error('b doit avoir la même taille que le nombre de ligne de A');
end
if length(c) ~= n
error('c oit avoir la même taille que le nombre de colonne de A');
end
end
Résultat obtenu
>> AgorithmSsimplexe
3 4 5 1 0 1 0 0 40
1 1 1 0 0 0 1 0 9
7 4 4 0 -1 0 0 1 42
0 0 0 0 0 1 1 1 0
*****************************************************************
3 4 5 1 0 1 0 0 40
1 1 1 0 0 0 1 0 9
7 4 4 0 -1 0 0 1 42
-11 -9 -10 -1 1 0 0 0 0
*****************************************************************
*****************************************************************
*****************************************************************
*****************************************************************
*****************************************************************
*****************************************************************
*****************************************************************