回 帖 发 新 帖 刷新版面

主题:自定义函数参数调用的问题

如下Fortran程序:
    program diagonalize
    implicit none

    byte i,j,m,n,D,k
    real A(2,2),B(2,2),AB(2,2)

    real,external :: multiply

    data A/1.d0,1.d0,1.d0,1.d0/
    data B/2.d0,2.d0,2.d0,2.d0/
            
    write(*,*) "main A="
    call outputmatrix(A)
    write(*,*) "main B="
    call outputmatrix(B)

    AB=multiply(A,B)

    end

***** matrix multiplication
    function multiply(A,B)
    implicit none
    byte i,j,k
    real A(2,2),B(2,2),AB(2,2)
    real multiply(2,2)

    write(*,*) "multiply A="
    call outputmatrix(A)
    write(*,*) "multiply B="
    call outputmatrix(B)

c    do i=1,D
c      do j=1,D
c      AB(i,j)=0
c        do k=1,D
c        AB(i,j)=A(i,k)*B(k,j)+AB(i,j)
c        end do
c      end do
c    end do

c    multiply=AB
    end

***** output matrix
    subroutine outputmatrix(B)
    implicit none
    byte i,j
    real B(2,2)

    do i=1,2
      write(*,*) B(i,1),B(i,2)
    end do

    end
    
子程序multiply中的A、B为什么和主程序中的不一样?

回复列表 (共11个回复)

11 楼

如果是矩阵相乘直接用fortran内部函数就可以了.

我很少试用common, 常见在f77的common, 在f90里面用common我不会用.
如果要写这个代码建议用显式接口就是把D也作为参数传递过去, 或者在子函数用假定性数组A(:,:).

我来回复

您尚未登录,请登录后再回复。点此登录或注册