Vector 在哪里可以找到BLAS示例代码(Fortran)?

Vector 在哪里可以找到BLAS示例代码(Fortran)?,vector,matrix,fortran,linear-algebra,blas,Vector,Matrix,Fortran,Linear Algebra,Blas,我一直在寻找有关blas的适当文档,我发现了315页的密集材料,而ctrl-f不适用于这些材料。它提供了关于例程采用什么输入参数的所有信息,但是有很多输入参数,我真的可以使用一些示例代码。我找不到任何人。我知道必须有一些人,否则没有人能够使用这些库 具体来说,我使用MacOSX 10.5.8上通过macports安装的ATLAS,使用gcc 4.4中的gfortran(也通过macports安装)。我正在用Fortran 90编写代码。我对Fortran还是相当陌生,但我对mathematica

我一直在寻找有关blas的适当文档,我发现了315页的密集材料,而ctrl-f不适用于这些材料。它提供了关于例程采用什么输入参数的所有信息,但是有很多输入参数,我真的可以使用一些示例代码。我找不到任何人。我知道必须有一些人,否则没有人能够使用这些库

具体来说,我使用MacOSX 10.5.8上通过macports安装的ATLAS,使用gcc 4.4中的gfortran(也通过macports安装)。我正在用Fortran 90编写代码。我对Fortran还是相当陌生,但我对mathematica、matlab、perl和shell脚本有相当多的经验

我希望能够初始化稠密复向量,并将其与稠密对称(但不是厄米)复矩阵相乘。矩阵的元素是通过指数的数学函数定义的——称之为f(i,j)

有人能提供一些代码或一些代码的链接吗?

首先,你可以看到你正在寻找的例程是zgemv,这里是一个复杂的('z')矩阵('m')向量('v')乘法

如果向量只是普通数组,即它们在内存中是连续的,那么INCX和INCY参数只是1。就LDA参数而言,只需保持它等于矩阵大小即可。其他参数很简单。例如:

  implicit none

  integer, parameter :: N=2

  complex*16, parameter :: imag1 = cmplx(0.d0, 1.d0)
  complex*16 :: a(N,N), x(N), y(N)

  complex*16 :: alpha, beta

  a(:,:)=imag1;
  x(:)=1.d0
  y(:)=0.d0

  alpha=1.d0; beta=0.d0

  call zgemv('N',N,N,alpha,a,N,x,1,beta,y,1)


  print*, y


  end      
通常,每次需要BLAS或LAPACK例程时,我都会在netlib上查找参数

编辑:上面的代码没有使用矩阵对称的事实。如果需要,请查找
zsymv
例程。(感谢@MRocklin。)

首先,您可以看到您正在寻找的例程是zgemv,这里是一个复数('z')矩阵('m')向量('v')乘法

如果向量只是普通数组,即它们在内存中是连续的,那么INCX和INCY参数只是1。就LDA参数而言,只需保持它等于矩阵大小即可。其他参数很简单。例如:

  implicit none

  integer, parameter :: N=2

  complex*16, parameter :: imag1 = cmplx(0.d0, 1.d0)
  complex*16 :: a(N,N), x(N), y(N)

  complex*16 :: alpha, beta

  a(:,:)=imag1;
  x(:)=1.d0
  y(:)=0.d0

  alpha=1.d0; beta=0.d0

  call zgemv('N',N,N,alpha,a,N,x,1,beta,y,1)


  print*, y


  end      
通常,每次需要BLAS或LAPACK例程时,我都会在netlib上查找参数


编辑:上面的代码没有使用矩阵对称的事实。如果需要,请查找
zsymv
例程。(感谢@MRocklin。)

如果您正在寻找对称,您可能想要
zsymv
,而不是
ztrmv
。TR前缀表示取决于存储的MRocklin。对于symmetrix矩阵,存储一个上(或下)三角形矩阵就足够了。如果存储了整个矩阵(为什么要这样做?),那么,我同意,它是
zsymv
。不,TR和SY使用相同的存储。SY方法只是假设矩阵在另一侧镜像。我已经编写了一个小的fortran程序来演示trmv在这种情况下给出的结果是错误的,而symv给出的结果是正确的。如果您正在寻找对称的,您可能想要
zsymv
,而不是
ztrmv
。TR前缀表示取决于存储的MRocklin。对于symmetrix矩阵,存储一个上(或下)三角形矩阵就足够了。如果存储了整个矩阵(为什么要这样做?),那么,我同意,它是
zsymv
。不,TR和SY使用相同的存储。SY方法只是假设矩阵在另一侧镜像。我已经编写了一个小的fortran程序来演示trmv在这种情况下给出的结果是错误的,而symv给出的结果是正确的。