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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| c **********************************************************
c Résolution d'un système matriciel par la méthode de Gauss-Seidel
c **********************************************************
PROGRAM Gauss seidel
IMPLICIT NONE
INTEGER :: i, j, k ,n, m
REAL,DIMENSION (n,m) :: A
REAL,DIMENSION (n) :: b
REAL,DIMENSION (m) :: T
REAL,DIMENSION (m) :: TE
REAL::Somav, Somap, eps
common i/j/k/n/m/A/T/TE/bSomav/Somap/eps
DATA k/0/n/9/m/9/
c
Subroutine EntrerA
DO 100 i=1,n
Write(*,*)"Faites entrer",i,"ligne"
Do 50 j=1,m
Read(5,*) a(i,j)
50 Continue
100 Continue
Return
End
Subroutine EntrerB
Write(*,*)"Faites entrer les valeur de b"
DO 100 i=1,n
Read(5,*) b(i)
100 Continue
Return
End
Subroutine EntrerTemp
Write(*,*)"Entrer les valeur initiales de T°"
do 100 j=1,m
read(*,*) T(j)
TE(j)=0.00
100 continue
write(*,*)"entrer la valeur de epsilon"
Read(5.*) eps
Return
End
c Type function test-arrêt:logical
Real::Somme
Test_arrêt=false
Somme=0.0
DO 100 i=1,n
Somme=Somme+abs(TE(i)-T(i))
100 continue
if(Somme<eps)then
Test_arrêt=True
Endif
Return
End
C Debut Programme Principal
C ************************
Call EntrerA
Call EntrerB
Call EntrerTemp
5 if not(Test_arrêt) go to 40
k=k+1
Do 30 i=1,n
Do 10 j=1,m
Somav=Somav+a(i,j)*TE(j)
10 Continue
Do 20 j=i+1,n
Somap=Somap+a(i,j)*T(j)
20 Continue
Te(i)=[b(i)-Somav-Somap]/a(i,i)
30 Continue
40 Continue
Write(6,*)"Aprés la",k,"ième itération, voici les résultats"
Do 60 i=1,n
Write(6,50) TE(i)
50 Format (F9,2)
60 Continue
End |
Partager