Advertisement
jhongesell

F6-1.FOR

May 21st, 2019
1,150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. c-----CSL/F6-1.FOR ELMINACION DE GAUSS
  2.       DIMENSION A(10,11)
  3.       PRINT *
  4.       PRINT *, 'CSL/F6-1        ELMINACION DE GAUSS'
  5.       DATA N/3/                                 !-- N es el orden de la matriz
  6.       DATA (A(1,J),J=1,4)/ 0, -1, +2, 0/        !-- inicializa los elementos de matriz
  7.       DATA (A(2,J),J=1,4)/-2, +2, -1, 0/        !-- inicializa los elementos de la matriz
  8.       DATA (A(3,J),J=1,4)/-2, +4, +3, 1/        !-- inicializa los elementos de la matriz
  9.       PRINT *
  10.       PRINT *,'MATRIZ AUMENTADA'
  11.       PRINT *
  12.       DO I=1,N
  13.         PRINT 61, (A(I,J),J=1,4)
  14. 61      FORMAT(1X, 1P6E12.4)
  15.       END DO
  16.       PRINT *
  17.       CALL GAUSS(N,A)
  18. 65    PRINT *
  19. 68    PRINT *,'SOLUCION'
  20. 69    PRINT *,'---------------------------------------'
  21.       PRINT *,'          I        X(I)'
  22. 70    PRINT *,'---------------------------------------'
  23.     DO I=1,N
  24. 72        FORMAT(5X, I5, 1PE16.6)
  25.           PRINT 72,I,A(I,N+1)
  26.         END DO
  27. 75    PRINT *,'---------------------------------------'
  28. 80    PRINT *
  29.       STOP
  30.       END
  31. C***************************
  32.       SUBROUTINE GAUSS(N,A)                     ! Eliminación de Gauss
  33.       INTEGER PV
  34.       DIMENSION A(10,11)
  35.       EPS=1.0
  36. 10    IF (1.0+EPS.GT.1.0) THEN
  37.         EPS=EPS/2.0
  38.         GOTO 10
  39.       END IF
  40.       EPS=EPS*2.
  41.       PRINT *,'                 EPSILON DE LA MAQUINA=',EPS
  42.       EPS2=EPS*2                !
  43. 1005  DET = 1                   ! Inicialización del determinante
  44.       DO 1010 I=1,N-1
  45.         PV=I
  46.         DO J=I+1,N
  47.           IF (ABS(A(PV,I)) .LT. ABS(A(J,I))) PV = J
  48.         END DO
  49.         IF (PV.EQ.I) GOTO 1050
  50.         DO JC=1,N+1
  51.           TM=A(I,JC)
  52.           A(I,JC)=A(PV,JC)
  53.           A(PV,JC)=TM
  54.         END DO
  55. 1045    DET=-1*DET         ! Cada vez que se realice un pivoteo, cambia el signo DET
  56. 1050    IF (A(I,I).EQ.0) GOTO 1200 ! Una matriz singular si A(I,I) = 0
  57.         DO JR=I+1, N                 ! Eliminación por debajo de la diagonal
  58.           IF (A(JR,I).NE.0) THEN
  59.             R=A(JR,I)/A(I,I)
  60.             DO KC=I+1,N+1
  61.               TEMP=A(JR,KC)
  62.               A(JR,KC)=A(JR,KC)-R*A(I,KC)
  63.               IF (ABS(A(JR,KC)).LT.EPS2*TEMP) A(JR,KC)=0.0
  64. c               Si el resultado de la resta es menor que
  65. c               el doble del épsilon de la máquina por el valor        
  66. c               original, se cambia su valor a cero.
  67.             END DO
  68.           END IF
  69. 1060    END DO
  70. 1010  CONTINUE
  71.       DO I=1,N
  72.         DET=DET*A(I,I)          ! Se calcula el determinante
  73.       END DO
  74.       PRINT *
  75.       PRINT *,'DETERMINANTE = ', DET
  76.       PRINT *
  77.       IF (A(N,N).EQ.0) GOTO 1200
  78.       A(N,N+1)=A(N,N+1)/A(N,N)
  79.       DO NV=N-1,1,-1
  80.         VA=A(NV,N+1)
  81.         DO K=NV+1,N
  82.           VA=VA-A(NV,K)*A(K,N+1)
  83.         END DO
  84.         A(NV,N+1)=VA/A(NV,NV)
  85.       END DO
  86.       RETURN
  87. 1200  PRINT *,'LA MATRIZ ES SINGUNLAR'
  88.       STOP
  89.       END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement