Advertisement
Guest User

Matrix task

a guest
Nov 26th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. REAL,PARAMETER :: P = 0.0001, A_PARAM = P + 31.0, B_PARAM = 3*P - 29.0
  2.       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
  3.       INTEGER NDIM/8/,N/8/,IPVT(8)
  4.       DATA A/A_PARAM, -7., -7., -4., -8., -4., -1.,  0., &
  5.                  -7., 27., -4., -4.,  0.,  -1, -4., -7., &
  6.                  -7., -4., 31., -8., -7.,  0., -3., -2., &
  7.                  -4., -4., -8., 39., -4., -7., -7., -5., &
  8.                  -8.,  0., -7., -4., 29., -7., -2., -1., &
  9.                  -4., -1.,  0., -7., -7., 25., -1., -5., &
  10.                  -1., -4., -3., -7., -2., -1., 20., -2., &
  11.                  0., -7., -2., -5., -1., -5., -2., 22./
  12.       A_SOURCE = A;
  13.  
  14.       DATA B/B_PARAM, -2., -104., 198., 29., 59., -71., -54./
  15.       B_SOURCE = B
  16.       PRINT 101,((A(I,J),J=1,N),B(I),I=1,N)
  17.  
  18.  
  19.       E = 0
  20.       DO i=1, N
  21.         E(i,i) = 1.0
  22.       END DO
  23.  
  24.       CALL DECOMP(NDIM,N,A,COND,IPVT,WORK)
  25.       PRINT 102,COND
  26.       COND_CACHE = COND
  27.       CONDP1=COND+1.0
  28.       IF(CONDP1.EQ.COND) PRINT 103
  29.       IF(CONDP1.EQ.COND) STOP
  30.  
  31.       CALL SOLVE(NDIM,N,A,B,IPVT)
  32.       B_TEMP = B
  33.       !PRINT 105,(B(I),I=1,N)
  34.  
  35.  
  36.       A = A_SOURCE
  37.       B = B_SOURCE
  38.       CALL DECOMP(NDIM,N,A,COND,IPVT,WORK)
  39.       DO i=1, N
  40.         CALL SOLVE(NDIM,N,A,E(i,1:N),IPVT)
  41.       END DO
  42.  
  43.       write (*,106 ) (E(i,1:N), i = 1, N)
  44.       B_SOURCE = matmul(E,B)
  45.       write (*,104) B_SOURCE !X1
  46.       write (*,105) B_TEMP  !X2
  47.       !write (*,104) ABS(B_SOURCE-B_TEMP) !X1
  48.  
  49.       NORM_1 = MAXVAL(ABS(B_SOURCE - B_TEMP))
  50.       NORM_2 = MAXVAL(ABS(B_SOURCE))
  51.  
  52.       DIFF = NORM_1 / NORM_2
  53.       write(*,"(/5X,'DIFF = ', E12.5)") DIFF
  54.       write(*,"(/5X,'COND = ', E12.5)") COND
  55.       write(*,"(//5X,'RESULT = ', E12.5)") DIFF/COND
  56.  
  57.  
  58.  
  59.       STOP
  60.  
  61.   101 FORMAT(13X,'A',92X,'B',/8(/5X,8F11.1, 5X, F11.1))
  62.   102 FORMAT(/5X,'COND=',E12.5)
  63.   103 FORMAT(5X,'MATRIX IS SINGULAR')
  64.   104 FORMAT(/13X,'X1',8(/5X,F15.7))
  65.   105 FORMAT(/13X,'X2',8(/5X,F15.7))
  66.   106 FORMAT(/13X,'A^(-1)',8(/5X,8F15.7))
  67.   107 FORMAT(/13X,'DIFF',8(/5X,8F15.7))
  68.  
  69.       END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement