1

私は blas に関するまともなドキュメントを探していましたが、ctrl-f が機能しない 315 ページの密度の高い資料を見つけました。ルーチンが取る入力引数に関するすべての情報を提供しますが、多くの入力引数があり、いくつかのサンプル コードを実際に使用できます。私は何も見つけることができません。これらのライブラリを使用できる人がいるか、誰もいない必要があることを私は知っています!

具体的には、mac osx 10.5.8 に macports 経由でインストールされた ATLAS を使用し、gcc 4.4 の gfortran を使用します (これも macports 経由でインストールされます)。私は Fortran 90 でコーディングしています。Fortran にはまだ慣れていませんが、mathematica、matlab、perl、およびシェル スクリプトについてはかなりの経験があります。

密な複素ベクトルを密な対称(エルミートではない)複素行列で初期化し、乗算できるようにしたいと考えています。行列の要素は、インデックスの数学関数によって定義されます。これを 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 に答える