Beruflich Dokumente
Kultur Dokumente
function [lambda,u]=puissance(A,x0,eps)
x=x0 ;
lambda=0 ;lambda_anc=1 ;
while abs(lambda-lambda_anc)>eps
lambda_anc=lambda ;
u=x/abs(x) ;
x=A*u ;
lambda=u’*x ;
end
2) Méthode de puissance inverse: La plus petite valeur Le programme Matlab pour construire A et b est le
propre de A (en valeur absolue) est aussi la plus grande suivant :
de A1 (en valeur absolue) :
function [A,b]=edp(a,b,c,d,h)
1 nx=(b-a)/h ;
Au = λu ssi u = A−1 u (1) ny=(d-c)/h ;
λ
n=nx*ny ;
On peut donc appliquer la méthode de la puissance à A−1 % (remplissage des éléments de la matrice
mais la matrice A−1 doit être calculée. En général, on ne A)
calcule pas l’inverse de la matrice A, mais on réalise sa A=zeros(n) ;
décomposition LU. Donc si on suppose que P A = LU , le for i=1 :n-1
code Matlab sera : A(i,i)=-4 ;
A(i+1,i)=1 ;
A(i,i+1)=1 ;
function [lambda,u]=inverse(P,L,U,x0,eps) if (mod(i,(nx-1))==0)
x=x0 ; A(i+1,i)=0 ;
lambda=0 ;lambda_anc=1 ; A(i,i+1)=0 ;
while abs(lambda-lambda_anc)>eps end
lambda_anc=lambda ; end
u=x/abs(x) ; for i=1 :n-nx+1
c=P*u ; A(nx-1+i,i)=1 ;
x=triang(U,c) ;%utiliser la fonction triang A(i,nx-1+i)=1 ;
lambda=1/(x’*u) ; end
end A(n,n)=-4 ;
% (remplissage des éléments de la matrice
B)
C. Discrétisation de l’EDP
2 2
for i=1 :n
Soit δδxu2 + δδyu2 = 0 avec (x, y) ∈ [a, b] × [c, d]. La B(i)=0 ;
discrétisation de l’intervalle [a, b] est effectué en posant if (mod(i,nx-1)==0)
hx = h = b−a nx et on obtient x(i) = xi = a + ih et
B(i)=-100 ;
hy = h = d−c end
ny et on obtient y(j) = yj = c + jh pour
i = 0, 1, ..., nx et j = 0, 1, ..., ny . end
La méthode de différences finies consiste à approxi-
mer les dérivées partielles d’une équation au moyen des
développements de Taylor et ceci se déduit directement de III. Recherches Opérationnelles
la définition de la dérivée. Posons u(xi , yj ) = ui,j , on a : A. Méthode de simplexe
(
δ2 u ui+1,j −2ui,j +ui−1,j function[A, x, z] = simplex(c, A, b) ;
δx2
≈ h2x c = -c ;
δ2 u ui,j+1 −2ui,j +ui,j−1 [m, n] = size(A) ;
δy 2
≈ h2y
ui+1,j −4ui,j +ui−1,j +ui,j+1 +ui,j−1
A = [A eye(m)] ;
∆u = h2 b = b( :) ;
4
c = c( :)’ ; if aretes(new(1))==0 && aretes(new(2))==0
A = [A b] ; aretes(new(1))=g ;
d = [c zeros(1,m+1)] ; aretes(new(2))=g ;
A = [A ;d] ; elseif aretes(new(1))==0
mi=min(A(m+1,1 :m+n)) ; aretes(new(1))=aretes(new(2)) ;
col=find(A(m+1, :)==mi) ; elseif aretes(new(2))==0
subs = n+1 :m+n ; aretes(new(2))=aretes(new(1)) ;
while mi < 0 & abs(mi) > eps elseif aretes(new(1))==aretes(new(2))
t = A(1 :m,col) ; test=1 ;
if all(t <= 0)x = zeros(n,1) ; else
z = inf ; m=max(aretes(new(1)),aretes(new(2))) ;
return ; for i=1 :n
end if aretes(i)==m
t1=A(1 :m,m+n+1) aretes(i)=min(aretes(new(1)),aretes(new(2))) ;
t2=A(1 :m,col) ; end
l=find(t2 > 0) ; end
[mi, row] = min(t1(l)./t2(l)) ; end
row = l(row) ; if test == 1
if isempty(row) G(i, :) = [0 0 0] ;
A(row, :)= A(row, :)/A(row,col) ; end
subs(row) = col ; end
for i = 1 :m+1 w = sum(G( :,3)’) ; for i = 1 : ligne
if i = row if G(i,[1 2]) = [0 0]
A(i, :)= A(i, :)-A(i,col)*A(row, :) ; T(G(i,1),G(i,2)) = 1 ;
end T(G(i,2),G(i,1)) = 1 ;
end end
end end
mi=min(A(m+1,1 :m+n)) ; 2) Algorithme de Ford:
col=find(A(m+1, :)==mi) ; %poids :matrice des poids
end %source :sommet de départ
z = A(m+1,m+n+1) ; %dest :sommet d’arrivée
x = zeros(1,m+n) ; function [chemin,cost]=ford(poids, source,
x = x(1 :n)’ ; dest)
clc ;
B. Théorie des graphes n = size(poids, 1) ;
distance(1 :n) = inf ;
1) Algorithme de Kruskal:
somprec(1 :n) = inf ;% sommet précédent
%w :poids de l’arbre et T :matrice
distance(source) = 0 ;
d’adjacence de l’arbre function [w,T] =
for i = 1 :n-1
krus(G)
for j = 1 :n
ligne = size(G) ;
for k = 1 :n
% cration de la matrice d’adjacence
if ((distance(j) + poids(j,k) <
X = [] ;
distance(k)) && (poids(j,k) = 0))
for i = 1 : ligne
distance(k) = distance(j) + poids(j,k) ;
X(G(i,1),G(i,2)) = 1 ;
somprec(k) = j ;
X(G(i,2),G(i,1)) = 1 ;
end
end
end
n = size(X,1) ;
end
for i = 1 : ligne - 1
end
d = ligne + 1 - i ;
chemin = [dest] ;
for j = 1 : d - 1
traverse = dest ;
if G(j,3) > G(j + 1,3)
cost=0 ;
G([j j + 1], :) = G([j + 1 j], :) ;
while (somprec(traverse) = source)
end
chemin = [somprec(traverse) chemin] ;
end
traverse = somprec(traverse) ;
end
cost=cost+poids(chemin(1),chemin(2)) ;
aretes = zeros(1,n) ;
end
T = zeros(n) ;
chemin = [somprec(traverse) chemin] ;
% tester l’existence d’un cycle si on
cost=cost+poids(chemin(1),chemin(2)) ;
insert l’arete ’new’
for i = 1 : ligne
new = G(i,[1 2]) ;
g=max(aretes)+1 ;
test=0 ;
n=length(aretes) ;