-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimlin-N.f
59 lines (58 loc) · 1.48 KB
/
simlin-N.f
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
IMPLICIT REAL*8 (A-H, O-Z)
PARAMETER (L=50)
DIMENSION A(L,L), Y(L), X(L)
PRINT *, 'ENTER THE DIMENSION OF MATRIX A'
READ *, N
PRINT *,'ENTER THE VALUES IN MATRIX A'
READ *,((A(I,J),J=1,N),I=1,N)
PRINT *,'ENTER THE VALUES IN PRODUCT MATRIX Y'
READ *, (Y(I),I=1,N)
! TO FIND THE MATRIX AFTER GAUSSIAN ELIMINATION
DO 10 K=1,N-1
CALL INTERCHANGE(N,A,K,Y)
PIVOT = A(K,K)
DO 20 I=K+1,N
FACTOR = A(I,K)/PIVOT
DO 30 J=1,N+1
A(I,J) = A(I,J) - FACTOR*(A(K,J))
30 CONTINUE
Y(I) = Y(I) - FACTOR*(Y(K))
20 CONTINUE
10 CONTINUE
! TO FIND OUT X1, X2, X3 USING BACK SUBSTITUTION
X(N)=Y(N)/A(N,N)
DO I=N-1,1,-1
SUMM=0.0
DO J=I+1,N
SUMM = SUMM + A(I,J)*X(J)
ENDDO
X(I)=(Y(I)-SUMM)/A(I,I)
ENDDO
PRINT *,'MATRIX X IS:'
WRITE(*,*) (X(J),J=1,N)
STOP
END
! SUBROUTINE TO FIND OUT THE PIVOT AND INTERCHANGING THE ROWS
SUBROUTINE INTERCHANGE (N,A,K,Y)
IMPLICIT REAL*8 (A-H, O-Z)
PARAMETER (L=50)
DIMENSION A(L,L), Y(L)
N1 = K ! N1 = UPDATED ROW INDEX
BLARGE = A(K,K)
DO 5 I=K+1,N
IF ((A(I,K)) .GT. (A(K,K))) THEN
BLARGE = A(I,K)
N1 = I
END IF
5 CONTINUE
! INTERCHANGING THE ITH ROW WITH KTH ROW
DO J=1,N
TEMP = A(N1,J)
A(N1,J) = A(K,J)
A(K,J) = TEMP
END DO
TEMP = Y(K)
Y(K) = Y(N1)
Y(N1) = TEMP
RETURN
END