PROGRAM EJEMPLO_LAPACK

IMPLICIT NONE
INTEGER, PARAMETER :: SIZE=20
REAL           :: A(SIZE,SIZE), B(SIZE)
INTEGER        :: I , J , IP(SIZE), ERROR


!======================================================
! PROGRAMA PARA RESOLVER EL SISTEMA A.X=B USANDO
! LA FUNCION EXTERNA SGESV QUE VIENE EN LAS LIBRERIAS
! LAPACK
! A LA FUNCION SGESV HAY QUE SUMINISTRARLE:
! 1) EL TAMAÑO DE A (SIZE EN ESTE CASO)
! 2) EL NUMERO DE COLUMNAS DE B (QUE PUEDEN SER MAS DE 1)
! 3) LA MATRIZ A (QUE EN ESTE EJEMPLO TAMBIEN SE LLAMA A)
! 4) EL NUMERO DE COLUMNAS DE A (EN ESTE EJEMPLO A ES CUADRADA)
! 5) EL 5TO ARGUMENTO ES DEVUELTO POR LA SUBRUTINA Y TIENE QUE VER
! CON EL METODO DE RESOLUCION UTILIZADO
! 6) EL VECTOR B COMO INPUT, EN ESTA VARIABLE ADEMAS SE DEVOLVERA EL
! VECTOR X O LA SOLUCION.
! 7) LA MAXIMA DIMENSION DE B.
! 8) INFORMACION SOBRE SI LA RESOLUCION FUE EXITOSA O NO.
!=======================================================

!EN ESTE EJEMPLO DEFINIMOS UNA MATRIZ A DIAGONAL, PERO EL METODO
!SE APLICA A MATRICES DE TODO TIPO.

DO I=1,SIZE
   DO J=1,SIZE

     IF(J == I)THEN
     A(I,J)=0.5
     ELSE
     A(I,J)=0.
     ENDIF

 ENDDO
ENDDO

B=10.

WRITE(*,*)"A es "
WRITE(*,*)A

WRITE(*,*)"B ES "
WRITE(*,*)B

CALL SGESV( SIZE, 1, A, SIZE, IP, B, SIZE, ERROR )


WRITE(*,*)""
WRITE(*,*)"X es "
WRITE(*,*)B

END PROGRAM EJEMPLO_LAPACK
