回 帖 发 新 帖 刷新版面

主题:[讨论]调用子程序矩阵出错

我编个小程序,外部调用子程序,子程序里的矩阵是可变矩阵,其维数和大小由外部变量控制,将外部变量传给子程序 hmatr(a,n),然后return矩阵a,再求其特征值,在返回过程中有warning,请高手指点下。
program main
 use IMSL
 implicit real*8(a-h)
 allocatable::a(:,:)  !定义a为可变数组,大小由外部变量指定
 allocatable:: eigenvalue(:)  !特征值的矩阵
 allocatable:: eigenvector(:,:) !特征向量的矩阵
 integer :: i,n
 read*,n  !外部读取的量,来确定数组a的大小
 allocate(a(n,n))  !分配内存空间
 allocate(eigenvalue(n)) !分配内存空间
 allocate(eigenvector(n,n)) !分配内存空间

call hmatr(a,n)  !调用子程序,读入n,读取a
 eigenvalue=eig(a)  !求矩阵a的特征值,并将其输出
 do i=1,n
   write(*,"('eigenvalue=',f5.2)")eigenvalue(i)  
 end do 

 stop
 end 

 subroutine hmatr(a,n) 
 implicit none
 integer n,i,j
 real,dimension(n,n)::a
 do i=1,n
    do j=1,n
   a(i,j)=i+j*2
    end do
 end do
end subroutine


错误信息:
Warning: In the call to HMATR, actual argument #1 does not match the type and kind of the corresponding dummy argument.
出错位置:call hmatr(a,n)  
另外请问:如果我算的矩阵很大,确实需要个子程序来调用这个矩阵,这样方式编程简洁不?主程序里的某些语句可以忽略或改写不?

回复列表 (共3个回复)

沙发


同样问题,求解答

板凳

又是 implicit 惹的祸,变量先声明再使用就这么难吗?

3 楼


主程序里real*8,在子程序里real,子程序改成real*8就通过了

我来回复

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