Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Lapack命令时fortran出错;ZGETF“是的;_Fortran_Lapack - Fatal编程技术网

使用Lapack命令时fortran出错;ZGETF“是的;

使用Lapack命令时fortran出错;ZGETF“是的;,fortran,lapack,Fortran,Lapack,我是拉帕克的新手,我试图找到NxN矩阵的行列式。我使用了dualm.wordpress.com/2012/01/06/computing-determinate-in-fortran中的代码/ program lapackdet implicit none integer :: N complex, allocatable, dimension(:,:) :: mat complex :: det integer :: i, info integer, allocata

我是拉帕克的新手,我试图找到NxN矩阵的行列式。我使用了dualm.wordpress.com/2012/01/06/computing-determinate-in-fortran中的代码/

program lapackdet

  implicit none
  integer :: N
  complex, allocatable, dimension(:,:) :: mat
  complex :: det
  integer :: i, info
  integer, allocatable :: ipiv(:)
  real :: sgn

  N=2

  allocate(ipiv(N))
  allocate(mat(N,N))

  mat=2
  mat(1,2)=1
  mat(2,1)=1

  ipiv=0

  call zgetrf(N, N, mat, N, ipiv, info)

  do i=1, N
     det = det*mat(i,i)
  end do

  do i=1, N
     if(ipiv(i)/=i)then
        sgn=-sgn
     end if
  end do
  det=sgn*det

  write(*,*) det

end program lapackdet
使用此代码时,会出现以下错误: “zgetrf”,引用自: cc8VZrbU.o中的数据 ld:找不到符号 collect2:ld返回了1个退出状态

我不知道这意味着什么,也不知道如何修复它


感谢@M.S.B.发出的信号。正确编译代码的第一步是链接
lapack
。我使用了
gfortran main.f90-o main-llapack-lm
,它编译得很好

此外,要获得正确的行列式,
det
sgn
必须初始化为1,如@KileKanos所示。LAPACK库的例程需要
复数*16
:每个复数的实部和虚部都是双精度的

最后,这里是一个计算复杂矩阵行列式的工作代码。它是用
gfortran main.f90-o main-llapack-lm
编译的:

program lapackdet

  implicit none
  integer :: N
  COMPLEX*16, allocatable, dimension(:,:) :: mat
  COMPLEX*16 :: det
  integer :: i, info
  integer, allocatable :: ipiv(:)
  real :: sgn

  N=2

  allocate(ipiv(N))
  allocate(mat(N,N))

  mat(1,2)=1
  mat(2,1)=1
  mat(1,1)=0
  mat(2,2)=0

  ipiv=0

  call zgetrf(N, N, mat, N, ipiv, info)

  det=1
  do i=1, N
     det = det*mat(i,i)
  end do

  sgn=1
  do i=1, N
     if(ipiv(i)/=i)then
        sgn=-sgn
     end if
  end do
  det=sgn*det

  write(*,*) det

end program lapackdet

错误消息表示链接器没有找到从源代码调用的子例程
zgetrf
。是否在link命令中包含Lapack库?请注意,
det
未初始化为1。