2013-05-17 1 views
2

Я начинаю fortran и просто хочу попробовать, если я получу умножение матрицы на работу.Умножение матрицы LAPACK/BLAS в fortran возвращает нули

program testlapack 
    implicit none 

    COMPLEX, DIMENSION(2, 2) :: A, B, Output 

    A = reshape((/ 4, 0, 0, 2 /), shape(A)) 
    B = reshape((/ 6, 0, 0, 3 /), shape(B)) 
    Output = reshape((/ 1, 0, 0, 1 /), shape(Output)) 

    call DGEMM('n','n',2,2,2,1.0,A,2,B,2,0.0,Output,2) 

    Write(*,*) Output 

    end program testlapack 

Я ожидал простого умножения A * B, записанного в массив Output. Вместо этого lapack возвращает матрицу 2x2 с только нулями. Компиляция с ifort -llpack не дает ошибок.

Где моя проблема? Thanks

ответ

2

Я подозреваю, что передача сложных аргументов подпрограмме, ожидающей реальных аргументов, может быть причиной вашей проблемы. Возможно, вы хотели использовать zgemm, а не dgemm?

+0

Это было, конечно, хорошее предположение и спасибо. Но это была не единственная причина: результат не изменился :( – user2394066

0

Я сменил матрицы на REAL и использовал DGEMM. Он работал, когда я использовал двойную точность для каждого числа, входящего в DGEMM, включая 1.0, установленный как «ALPHA». Я не ожидал, что это будет обязательным.

+0

Это имеет смысл, учитывая, что D в 'DGEMM' означает« double », если вы хотите иметь одинаковую точность, вам нужна подпрограмма' SGEMM.' –