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
| ! Corps du programme principal
!
PROGRAM Test
REAL A(100, 100), B(100), Xk(100)
INTEGER n
n=5
!Remplissage de la matrice
DO i=1,n,1
DO j=1,n,1
IF (i .EQ. j) THEN
A(i,j) = 2
ELSEIF ((i .EQ. j-1) .OR. (i .EQ. j+1)) THEN
A(i,j) = -1
ELSE
A(i,j) = 0
ENDIF
ENDDO
ENDDO
DO i=1,n,1
B(i)=1
ENDDO
CALL algoThomas(A,B,n,Xk)
PRINT *,'_________________________'
PRINT *,' Solution :'
PRINT *,'_________________________'
DO i=1,n,1
PRINT*, Xk(i)
ENDDO
END
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! Nom :
! algoThomas
!
! Fonctionallite :
! Resolution de A.X=B par l'algorithme de THOMAS
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE algoThomas(A,B,n,Xk)
REAL A(100,100), B(100), alpha(100), beta(100), Xk(100), Xkplus1
alpha(1) = A(1,1);
beta(1) = B(1)/A(1,1);
DO i=2,n,1
! j = beta(i-1)
beta(i) = A(i,i) - (A(i-1,i)*A(i,i-1))/ beta(i-1)
alpha(i) = (B(i) - A(i,i-1)*alpha(i-1))/beta(i)
ENDDO
Xk(n) = alpha(n);
DO k=1,n-1,1
Xkplus1 = Xk(n-k+1)
Xk(n-k) = alpha(n-k) - (A(n-k,n-k+1)/beta(n-k))*Xkplus1
ENDDO
RETURN
END |
Partager