-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgaussT.m
57 lines (55 loc) · 1.04 KB
/
gaussT.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function [x]=gaussT(A,b)
[n,m]=size(A);
ordre=linspace(1,n,n); %vecteur qu'on va utiliser pour reordonner les composantes du vecteur resulta
%pivot
for k=1:n-1
mx=abs(A(k,k));
p=k;
q=k;
for i=k:n
for j=k:n
if (abs(A(i,j)>mx))
mx=A(i,j);
p=i;
q=j;
end
end
end
%on permute les lignes
for j=1:n
perm=A(k,j);
A(k,j)=A(p,j);
A(p,j)=perm;
end
%on permute les colonnes
for i=1:n
perm=A(i,k);
A(i,k)=A(i,q);
A(i,q)=perm;
end
%permutation de vecteur b
perm=b(k);
b(k)=b(p);
b(p)=perm;
%sauvegarde de l'odre
perm=ordre(k);
ordre(k)=ordre(q);
ordre(q)=perm;
%pivot
pivot=A(k,k);
for i=k+1:n
coef=A(i,k)/pivot;
for j=k:n
A(i,j)=A(i,j)-coef*A(k,j);
end
b(i)=b(i)-coef*b(k);
end
end
x(ordre(n))=b(n)/A(n,n);
for i=n-1:-1:1
somme=0;
for j=i+1:n
somme=somme+A(i,j)*x(ordre(j));
x(ordre(i))=(b(i)-somme)/A(i,i);
end
end