Question

Je cherchais la documentation décent sur blas, et je l'ai trouvé quelques 315 pages de matériel dense que ctrl-f ne fonctionne pas. Il fournit toutes les informations concernant les arguments d'entrée prennent les routines, mais il y a beaucoup d'arguments d'entrée et je ne pouvais vraiment utiliser quelques exemples de code. Je suis incapable de localiser tout. Je sais qu'il doit y avoir une ou personne ne serait en mesure d'utiliser ces bibliothèques!

Plus précisément, j'utilise ATLAS installé via macports sur un Mac OS X 10.5.8 et j'utilise gfortran de gcc 4.4 (également installé via macports). Je suis codage en Fortran 90. Je suis encore assez nouveau pour Fortran, mais j'ai un montant équitable d'expérience avec Mathematica, Matlab, perl, et les scripts shell.

je voudrais être capable d'initialiser et de multiplier un vecteur complexe dense par une dense symétrique (mais pas hermitienne) matrice complexe. Les éléments de la matrice sont définis par une fonction mathématique des indices -. Appeler f (i, j)

Quelqu'un pourrait-il fournir un code ou un lien vers un code?

Était-ce utile?

La solution

A partir de http://www.netlib.org/blas/ , vous voyez que le routine que vous cherchez est zgemv, ici http://www.netlib.org/blas/zgemv .f --- il est un complexe ( 'z') matrice ( 'm') vecteur ( 'v') se multiplient.

Si vos vecteurs ne sont que des réseaux normaux, à savoir qu'ils sont contigus en mémoire, puis des arguments INCX et INCY sont seulement 1. En ce qui concerne le paramètre LDA, juste garder égale à la taille de la matrice. D'autres paramètres sont simples. Par exemple:

  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      

En général, chaque fois que j'ai besoin d'une routine BLAS ou LAPACK, je regarde les paramètres sur netlib.

EDIT: le code ci-dessus utilise pas le fait que votre matrice est symétrique. Si vous voulez que, regardez alors la routine zsymv. (Merci à @MRocklin.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top