主题: jstzhurj老师,在啊?选择特定特征向量
还有个问题,自己修改了下,麻烦给帮忙看下吧![em8][em8][em8][em9][em9][em9][em9][em10][em10][em10][em11][em11][em11][em12][em12][em12][em13][em13][em13]
我发现程序中有个地方不完善。由于矩阵h有很多特征向量,我选择能满足条件的特征向量,要求就是特征向量与它的转置的乘积为1。你看我这样修改好不好:
!求矩阵特征值和特征向量
eigenvalue=eig(c,w=eigenvector)
traneigv=transpose(eigenvector) !求特征向量的转置矩阵
eps=1.0e-8
do ii=1,4*m*n
tai=dot_product(traneigv(ii,:),eigenvector(:,ii))
if(tai<=1.0-eps) then
kk=1
else
kk=0
if(kk==1) then
exit
end if
end if
end do
!特征值特征向量同时排序
do i=1,4
do j=i+1,4
if(eigenvalue(i)>eigenvalue(j)) then
temp=eigenvalue(j)
eigenvalue(j)=eigenvalue(i)
eigenvalue(i)=temp
eigenvectortmp(:,j)=eigenvector(:,j)
eigenvector(:,j)=eigenvector(:,i)
eigenvector(:,i)=eigenvectortmp(:,j)
endif
end do
end do
先找满足条件的特征向量,找到之后再对 特征值和特征向量排序。
另外这种排序方式好像不行啊。比如,先判断eigenvalue(1)>eigenvalue(2)是否成立,如果成立,交换二者,结束;如果不成立,就不向下进行比较了,就退出了。是否让eigenvalue(1)跟后面的比较一遍,把最小的给它,然后i=2,再跟后面的比较,再把最小的给它吧?
我发现程序中有个地方不完善。由于矩阵h有很多特征向量,我选择能满足条件的特征向量,要求就是特征向量与它的转置的乘积为1。你看我这样修改好不好:
!求矩阵特征值和特征向量
eigenvalue=eig(c,w=eigenvector)
traneigv=transpose(eigenvector) !求特征向量的转置矩阵
eps=1.0e-8
do ii=1,4*m*n
tai=dot_product(traneigv(ii,:),eigenvector(:,ii))
if(tai<=1.0-eps) then
kk=1
else
kk=0
if(kk==1) then
exit
end if
end if
end do
!特征值特征向量同时排序
do i=1,4
do j=i+1,4
if(eigenvalue(i)>eigenvalue(j)) then
temp=eigenvalue(j)
eigenvalue(j)=eigenvalue(i)
eigenvalue(i)=temp
eigenvectortmp(:,j)=eigenvector(:,j)
eigenvector(:,j)=eigenvector(:,i)
eigenvector(:,i)=eigenvectortmp(:,j)
endif
end do
end do
先找满足条件的特征向量,找到之后再对 特征值和特征向量排序。
另外这种排序方式好像不行啊。比如,先判断eigenvalue(1)>eigenvalue(2)是否成立,如果成立,交换二者,结束;如果不成立,就不向下进行比较了,就退出了。是否让eigenvalue(1)跟后面的比较一遍,把最小的给它,然后i=2,再跟后面的比较,再把最小的给它吧?