- PROGRAM ASDASD
- IMPLICIT NONE
- REAL(8), ALLOCATABLE,DIMENSION(:,:)::Matriz
- INTEGER ORDEN
- ORDEN=3
- ALLOCATE(Matriz(ORDEN,ORDEN))
- Matriz(1,1)=2.0; Matriz(1,2)=0.0; Matriz(1,3)=0.0
- Matriz(2,1)=1.0; Matriz(2,2)=1.5; Matriz(2,3)=0.0
- Matriz(3,1)=0.0; Matriz(3,2)=-3.0; Matriz(3,3)=0.5
- CALL INVERSA(Matriz)
- CONTAINS
- SUBROUTINE ImprimirMat(M)
- REAL(8), DIMENSION(:,:), INTENT(IN)::M
- INTEGER columna,fila,i,j
- fila=SIZE(M,DIM=1)
- columna=SIZE(M,DIM=2)
- DO i=1, fila
- DO j=1, columna
- write(*,'(F16.5,X)',ADVANCE='NO')M(i,j)
- END DO
- write(*,*)
- END DO
- END SUBROUTINE
- SUBROUTINE CrearMA(M,Ind,Mamp)
- REAL(8), DIMENSION(:,:), INTENT(IN)::M,Ind
- Real(8), ALLOCATABLE, DIMENSION(:,:)::Mamp
- INTEGER orden1,orden2,columna,fila
- orden1=SIZE(M,DIM=1)
- orden2=SIZE(Ind,DIM=2)
- ALLOCATE(Mamp(orden1,orden1+orden2))
- DO fila=1, orden1
- DO columna=1, orden1
- Mamp(fila,columna)=M(fila,columna)
- END DO
- DO columna=1, orden2
- Mamp(fila,columna+orden1)=Ind(fila,columna)
- END DO
- END DO
- END SUBROUTINE
- SUBROUTINE GaussJordanINV(M,Ind)
- REAL(8), DIMENSION(:,:), INTENT(IN)::M,Ind
- Real(8), ALLOCATABLE, DIMENSION(:,:)::Mamp
- INTEGER orden,c,fila
- orden=SIZE(M,DIM=1)
- CALL CrearMA(M,Ind,Mamp)
- write(*,*) 'la matriz ampliada es'
- CALL ImprimirMat(Mamp)
- DO c=1, orden
- DO fila=1, c-1
- Mamp(fila,c+1:)=Mamp(fila,c+1:)-Mamp(c,c+1:)*Mamp(fila,c)/Mamp(c,c)
- Mamp(fila,c)=0.0
- END DO
- DO fila=c+1, orden
- Mamp(fila,c+1:)=Mamp(fila,c+1:)-Mamp(c,c+1:)*Mamp(fila,c)/Mamp(c,c)
- Mamp(fila,c)=0.0
- END DO
- END DO
- DO c=1, orden
- Mamp(c,1:)=Mamp(c,1:)/Mamp(c,c)
- END DO
- write(*,*) 'la matriz despues de GaussJordan es :'
- CALL ImprimirMat(Mamp)
- DEALLOCATE(Mamp)
- END SUBROUTINE
- SUBROUTINE CrearMatID(orden,M)
- REAL(8),ALLOCATABLE, DIMENSION(:,:)::M
- INTEGER orden,i
- ALLOCATE(M(orden,orden))
- M=0.0
- DO i=1,orden
- M(i,i)=1.0
- END DO
- END SUBROUTINE
- SUBROUTINE Inversa(M)
- REAL(8),DIMENSION(:,:), INTENT(IN)::M
- REAL(8),ALLOCATABLE, DIMENSION(:,:)::MID
- INTEGER orden
- orden=SIZE(M,DIM=1)
- CALL CrearMatID(orden,MID)
- CALL GaussJordanINV(M,MID)
- DEALLOCATE(MID)
- END SUBROUTINE
- END PROGRAM