1

我一直在寻找关于 blas 的体面文档,我发现了一些 315 页 ctrl-f 无法处理的密集材料。它提供了有关例程采用哪些输入参数的所有信息,但是有很多输入参数,我真的可以使用一些示例代码。我找不到任何东西。我知道必须有一些人或没有人可以使用这些库!

具体来说,我在 mac osx 10.5.8 上使用通过 macports 安装的 ATLAS,并使用 gcc 4.4 中的 gfortran(也通过 macports 安装)。我正在使用 Fortran 90 进行编码。我对 Fortran 还是很陌生,但我在数学、matlab、perl 和 shell 脚本方面有相当多的经验。

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

谁能提供一些代码或一些代码的链接?

4

1 回答 1

4

http://www.netlib.org/blas/开始,您会看到您正在寻找的例程是 zgemv,这里 http://www.netlib.org/blas/zgemv.f --- 这是一个复杂的('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。)

于 2011-01-09T16:37:26.683 回答