主题:关于三个矩阵相乘(高人看到顶下)
程序相乘有关
求得一个矩阵c(n*n)的特征值和特征向量,另外还有一矩阵b=c+1,以及c的特征向量构成的矩阵的转置矩阵。
目的要实现以下过程:
让某个特征值对应的特征向量的转置矩阵跟b相乘,然后再乘以该特征向量本身。为了得到特征向量的转置,我先将特征向量构成的矩阵转置(d),然后再求该特征向量对应的行。比如,原来第二个特征值对应的特征向量在第二列,现在它的转置在第二行了,这样就得到了这个特征向量对应的转置了。然后让它跟b相乘,得到1行n列的矩阵,然后再让它跟第二个特征向量本身相乘,由于特征向量是n行1列的,所以就得到了一个具体的数。但是,我不知道该怎么用两个矩阵相乘得到的矩阵跟第三个矩阵相乘啊,试了几次都失败了。请看下面两个程序:
程序1.矩阵特征向量的转置与矩阵b相乘,这个已经得到结果了。正确
program ex1
use imsl
implicit none
integer i
real,dimension(:)::eigenvalue(3)
real,dimension(:,:):: eigenvector(3,3)
real,dimension(:)::d(3,3),b(3,3)
real:: c(3,3)=reshape((/1,2,3,4,5,6,7,8,9/),(/3,3/))
eigenvalue=eig(c,v=eigenvector)
b=c+1
open(1,file='liu.txt')
do i=1,3
write(1,*)'eigenvalue=',eigenvalue(i)
write(1,*)'eigenvector=' , eigenvector(:,i)
end do
close(1)
d=transpose(eigenvector)
write(*,*) matmul(d(1,:),b) !这里是特征向量的转置与b相乘,给出结果了
end
程序2。再跟特征向量本身相乘出错啦
program ex1
use imsl
implicit none
integer i
real,dimension(:)::eigenvalue(3)
real,dimension(:,:):: eigenvector(3,3)
real,dimension(:)::b(3,3),d(3,3)
real:: c(3,3)=reshape((/1,2,3,4,5,6,7,8,9/),(/3,3/))
b=c+1
eigenvalue=eig(c,v=eigenvector)
open(1,file='liu.txt')
do i=1,3
write(1,*)'eigenvalue=',eigenvalue(i)
write(1,*)'eigenvector=' , eigenvector(:,i)
end do
close(1)
d=transpose(eigenvector)
write(*,*) matmul(d(2,:),b)
write(*,*) matmul(matmul(d(2,:),b) ,eigenvector(:,2))!!这里出错啦
end
出错信息:Error: The shapes of the arguments are inconsistent or nonconformable. [MATMUL]
write(*,*) matmul(matmul(d(2,:),b) ,eigenvector(:,2))
求得一个矩阵c(n*n)的特征值和特征向量,另外还有一矩阵b=c+1,以及c的特征向量构成的矩阵的转置矩阵。
目的要实现以下过程:
让某个特征值对应的特征向量的转置矩阵跟b相乘,然后再乘以该特征向量本身。为了得到特征向量的转置,我先将特征向量构成的矩阵转置(d),然后再求该特征向量对应的行。比如,原来第二个特征值对应的特征向量在第二列,现在它的转置在第二行了,这样就得到了这个特征向量对应的转置了。然后让它跟b相乘,得到1行n列的矩阵,然后再让它跟第二个特征向量本身相乘,由于特征向量是n行1列的,所以就得到了一个具体的数。但是,我不知道该怎么用两个矩阵相乘得到的矩阵跟第三个矩阵相乘啊,试了几次都失败了。请看下面两个程序:
程序1.矩阵特征向量的转置与矩阵b相乘,这个已经得到结果了。正确
program ex1
use imsl
implicit none
integer i
real,dimension(:)::eigenvalue(3)
real,dimension(:,:):: eigenvector(3,3)
real,dimension(:)::d(3,3),b(3,3)
real:: c(3,3)=reshape((/1,2,3,4,5,6,7,8,9/),(/3,3/))
eigenvalue=eig(c,v=eigenvector)
b=c+1
open(1,file='liu.txt')
do i=1,3
write(1,*)'eigenvalue=',eigenvalue(i)
write(1,*)'eigenvector=' , eigenvector(:,i)
end do
close(1)
d=transpose(eigenvector)
write(*,*) matmul(d(1,:),b) !这里是特征向量的转置与b相乘,给出结果了
end
程序2。再跟特征向量本身相乘出错啦
program ex1
use imsl
implicit none
integer i
real,dimension(:)::eigenvalue(3)
real,dimension(:,:):: eigenvector(3,3)
real,dimension(:)::b(3,3),d(3,3)
real:: c(3,3)=reshape((/1,2,3,4,5,6,7,8,9/),(/3,3/))
b=c+1
eigenvalue=eig(c,v=eigenvector)
open(1,file='liu.txt')
do i=1,3
write(1,*)'eigenvalue=',eigenvalue(i)
write(1,*)'eigenvector=' , eigenvector(:,i)
end do
close(1)
d=transpose(eigenvector)
write(*,*) matmul(d(2,:),b)
write(*,*) matmul(matmul(d(2,:),b) ,eigenvector(:,2))!!这里出错啦
end
出错信息:Error: The shapes of the arguments are inconsistent or nonconformable. [MATMUL]
write(*,*) matmul(matmul(d(2,:),b) ,eigenvector(:,2))