Pregunta

He estado buscando para la documentación decente en blas, y he encontrado algunas 315 páginas de material denso que ctrl-f no funciona en. Proporciona toda la información con respecto a qué argumentos de entrada toman las rutinas, pero hay una gran cantidad de argumentos de entrada y realmente podría utilizar un código de ejemplo. Soy incapaz de localizar cualquier. Sé que tiene que haber alguna ni nadie sería capaz de utilizar estas bibliotecas!

Específicamente, utilizo instalado ATLAS través macports en un Mac OS X 10.5.8 y lo uso gfortran de gcc 4.4 (también instalado a través de MacPorts). Estoy de codificación en Fortran 90. Estoy todavía bastante nuevo en Fortran, pero tengo una buena cantidad de experiencia con Mathematica, Matlab, Perl, y secuencias de comandos shell.

I gustaría ser capaz de inicializar y multiplicar un vector complejo densa por un simétrico densa (pero no hermitiana) matriz compleja. Los elementos de la matriz se definen a través de una función matemática de los índices -. Llamarlo f (i, j)

¿Alguien podría proporcionar algún código o un enlace a algún código?

¿Fue útil?

Solución

A partir de http://www.netlib.org/blas/ , se ve que la rutina que estás buscando es zgemv, aquí http://www.netlib.org/blas/zgemv .f --- es un ( 'z') matriz compleja ( 'm') vector ( 'v') se multiplican.

Si sus vectores son sólo matrices normales, es decir, que son contiguos en la memoria, entonces INCX y argumentos Incy son sólo 1. En lo que se refiere parámetro LDA, justo lo mantienen igual al tamaño de la matriz. Otros parámetros son sencillos. Por ejemplo:

  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 general, cada vez que necesitan una rutina o BLAS LAPACK, miro hacia arriba los parámetros de Netlib.

EDIT: el código anterior no utiliza el hecho de que su matriz es simétrica. Si quieres que, a continuación, busque la rutina zsymv. (Gracias a @MRocklin.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top