program main
use imsl
implicit none
integer:: n
integer i
real,allocatable:: b(:,:)   !定义二维矩阵b
real,allocatable:: eigenvalue(:)  !定义矩阵特征值
real,allocatable::eigenvector(:,:)  !定义特征向量
read(*,*) n   !获取n
allocate(eigenvalue(n))            !以下为矩阵分配空间
allocate(eigenvector(n,n))
allocate(b(n,n))
call abc(n,b)                !调用子程序
write(*,*) b                 !将b写出来
eigenvalue=eig(b,v=eigenvector)    !以下将每个特征值和对应的特征向量写出来
 do i=1,n
   write(*,"('eigenvalue=',f5.2)")eigenvalue(i)
   write(*,"('eigenvector=['8(f5.2'')']')")eigenvector(:,i)
 end do
end

subroutine abc(n,c)
  implicit none
  integer n
  real:: c(n,n)   !定义虚矩阵
  real:: a(2,2) 
  integer:: i, j
  c(n,n)=0.0      !矩阵元素全部为零
  a=reshape((/1,2,3,4/),(/2,2/)) 
  do i=1,n-1,2                  !矩阵c对角上为a矩阵
       c(i:i+1,i:i+1)=a
  end do
  return
end subroutine
我运行的时候,给出了矩阵特征值和特征向量,但是我看了下b矩阵在对角上是a矩阵元素,但是在非对角上不是0,是不是从子程序传回主程序的时候出错了啊?还是定义的有问题呢?如果在子程序里把c写出来也是一样的结果。