主题:求矩阵特征值和矩阵出错
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写出来也是一样的结果。
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写出来也是一样的结果。