Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- REAL,PARAMETER :: P = 0.0001, A_PARAM = P + 31.0, B_PARAM = 3*P - 29.0
- REAL A(8,8), A_SOURCE(8,8), E(8,8), B(8), B_SOURCE(8), B_TEMP(8), WORK(8), COND, COND_CACHE, NORM_1, NORM_2
- INTEGER NDIM/8/,N/8/,IPVT(8)
- DATA A/A_PARAM, -7., -7., -4., -8., -4., -1., 0., &
- -7., 27., -4., -4., 0., -1, -4., -7., &
- -7., -4., 31., -8., -7., 0., -3., -2., &
- -4., -4., -8., 39., -4., -7., -7., -5., &
- -8., 0., -7., -4., 29., -7., -2., -1., &
- -4., -1., 0., -7., -7., 25., -1., -5., &
- -1., -4., -3., -7., -2., -1., 20., -2., &
- 0., -7., -2., -5., -1., -5., -2., 22./
- A_SOURCE = A;
- DATA B/B_PARAM, -2., -104., 198., 29., 59., -71., -54./
- B_SOURCE = B
- PRINT 101,((A(I,J),J=1,N),B(I),I=1,N)
- E = 0
- DO i=1, N
- E(i,i) = 1.0
- END DO
- CALL DECOMP(NDIM,N,A,COND,IPVT,WORK)
- PRINT 102,COND
- COND_CACHE = COND
- CONDP1=COND+1.0
- IF(CONDP1.EQ.COND) PRINT 103
- IF(CONDP1.EQ.COND) STOP
- CALL SOLVE(NDIM,N,A,B,IPVT)
- B_TEMP = B
- !PRINT 105,(B(I),I=1,N)
- A = A_SOURCE
- B = B_SOURCE
- CALL DECOMP(NDIM,N,A,COND,IPVT,WORK)
- DO i=1, N
- CALL SOLVE(NDIM,N,A,E(i,1:N),IPVT)
- END DO
- write (*,106 ) (E(i,1:N), i = 1, N)
- B_SOURCE = matmul(E,B)
- write (*,104) B_SOURCE !X1
- write (*,105) B_TEMP !X2
- !write (*,104) ABS(B_SOURCE-B_TEMP) !X1
- NORM_1 = MAXVAL(ABS(B_SOURCE - B_TEMP))
- NORM_2 = MAXVAL(ABS(B_SOURCE))
- DIFF = NORM_1 / NORM_2
- write(*,"(/5X,'DIFF = ', E12.5)") DIFF
- write(*,"(/5X,'COND = ', E12.5)") COND
- write(*,"(//5X,'RESULT = ', E12.5)") DIFF/COND
- STOP
- 101 FORMAT(13X,'A',92X,'B',/8(/5X,8F11.1, 5X, F11.1))
- 102 FORMAT(/5X,'COND=',E12.5)
- 103 FORMAT(5X,'MATRIX IS SINGULAR')
- 104 FORMAT(/13X,'X1',8(/5X,F15.7))
- 105 FORMAT(/13X,'X2',8(/5X,F15.7))
- 106 FORMAT(/13X,'A^(-1)',8(/5X,8F15.7))
- 107 FORMAT(/13X,'DIFF',8(/5X,8F15.7))
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement