主题:[讨论]调用子程序矩阵出错
我编个小程序,外部调用子程序,子程序里的矩阵是可变矩阵,其维数和大小由外部变量控制,将外部变量传给子程序 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)
另外请问:如果我算的矩阵很大,确实需要个子程序来调用这个矩阵,这样方式编程简洁不?主程序里的某些语句可以忽略或改写不?
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)
另外请问:如果我算的矩阵很大,确实需要个子程序来调用这个矩阵,这样方式编程简洁不?主程序里的某些语句可以忽略或改写不?