[Fortran] 纯文本查看 复制代码
program main
USE LAPACK95
USE F95_PRECISION
REAL,ALLOCATABLE :: A1(:,:),B1(:,:)
INTEGER N,NRHS,LDA LDB
! INTERFACE
! SUBROUTINE sposv( uplo, n, nrhs, a, lda, b, ldb, info )
! REAL A(:,:)
! REAL B(:,:)
! CHARACTER(LEN=1), OPTIONAL :: UPLO
! INTEGER, OPTIONAL :: INFO
! INTEGER N,NRHS,LDA LDB
! END SUBROUTINE SPOSV
! END INTERFACE
ALLOCATE(A1(5,5),B1(5,3))
N=5
NRHS=3
LDA=5
LDB=5
OPEN(11,FILE='A.TXT')
OPEN(12,FILE='B.TXT')
DO I=1,5
READ(11,*)(A1(I,J),J=1,5)
END DO
DO I=1,5
READ(12,*)(B1(I,J),J=1,3)
END DO
CALL SPOSV(n, nrhs, A1, lda, B1, ldb)
DO I=1,5
WRITE(*,*)(B1(I,J),J=1,3)
END DO
DEALLOCATE(A1,B1)
end program main
[Fortran] 纯文本查看 复制代码
Program main
Use lapack95
Use f95_precision
Real, Allocatable :: a1(:, :), b1(:, :)
Integer :: n = 5 , nrhs = 3 , info = 999
Allocate( a1(N,N) , b1(N,NRHS) )
Open( 11 , File='A.TXT' )
Open( 12 , File='B.TXT' )
Do i = 1, N
Read (11, *) a1(i, :)
End Do
a1 = matmul(a1, transpose(a1)) !// A=A*AT 为了得到正定阵
Do i = 1, N
Read (12, *) b1(i, :)
End Do
!CALL SPOSV(n, nrhs, A1, lda, B1, ldb)
Call posv( a1 , b1 , 'U' , info )
Write (*, *) info !//输出0则表示成功
Do i = 1, N
Write (*, *) b1(i, :)
End Do
Deallocate(a1, b1)
Close( 11 )
Close( 11 )
End Program main