2011-01-09 3 views
1

blas에 관한 문서를 찾고 있었는데 ctrl-f가 작동하지 않는 고밀도 소재의 315 페이지를 발견했습니다. 그것은 루틴이 어떤 입력 인수에 관한 모든 정보를 제공하지만 많은 입력 인수가 있으며 실제로 예제 코드를 사용할 수 있습니다. 찾을 수 없습니다. 나는이 라이브러리를 사용할 수있는 사람이 누구인지 또는 아무도 없어야한다는 것을 알고 있습니다!BLAS 예제 코드는 어디에서 찾을 수 있습니까?

특히 mac osx 10.5.8에서 macports를 통해 설치된 ATLAS를 사용하고 gcc 4.4 (또한 macports를 통해 설치됨)의 gfortran을 사용합니다. 필자는 Fortran 90에서 코딩하고 있습니다. Fortran에는 아직 익숙하지 않지만 mathematica, matlab, perl 및 쉘 스크립팅에 대한 상당한 경험이 있습니다.

조밀 한 대칭 (그러나 hermitian) 복잡한 행렬에 의해 조밀 한 복잡한 벡터를 초기화하고 곱할 수 있기를 바랍니다. 행렬의 요소는 인덱스의 수학 함수를 통해 정의되며이를 f (i, j)라고합니다.

누구나 일부 코드 또는 일부 코드에 대한 링크를 제공 할 수 있습니까?

답변

4

http://www.netlib.org/blas/을 시작으로, 당신은 다중 복합 ('Z') 매트릭스 ('m') 벡터 ('V')이다 --- 당신이 찾고있는 루틴이 여기 http://www.netlib.org/blas/zgemv.f zgemv 인 것을 알 수있다.

벡터가 정상 배열 인 경우, 즉 메모리에서 인접한 경우 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에게 감사한다.)

+0

대칭을 찾고 있다면 'ztymv'가 아니라'zsymv'를 원할지도 모른다. TR 접두어는 삼각형을 나타냅니다. – MRocklin

+0

@MRocklin은 스토리지에 따라 다릅니다. 대칭 행렬의 경우 상한 (또는 하한) 삼각형 행렬을 저장하는 것으로 충분합니다. 전체 행렬이 저장되어 있다면 (왜 그렇게 할까?), 나는 동의한다. 그것은 zsymv이다. –

+0

아니요, TR과 SY 모두 동일한 저장소를 사용합니다. SY 메서드는 행렬이 다른쪽에 반영되어 있다고 가정합니다. 나는 symv가 올바른 것을 제공하는 동안 trmv가이 상황에서 잘못된 결과를 준다는 것을 보여주기 위해 작은 포트란 프로그램을 작성했다. https://gist.github.com/3946486 – MRocklin

관련 문제