回 帖 发 新 帖 刷新版面

主题: 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,再跟后面的比较,再把最小的给它吧?

回复列表 (共26个回复)

11 楼

[quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]

从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0

12 楼

应该用EVCHF求矩阵,因为我的矩阵是厄米矩阵,刚用matlab试了下,对厄米矩阵,给出的特征向量本身就 满足正交归一。研究下

13 楼

[quote][quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]

从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0[/quote]

那为啥还要2重循环?
do i=1,4*m*n
    tai=dot_product(traneigv(i,:),eigenvector(:,i))
!....
enddo
不就行了么?

14 楼



那为啥还要2重循环?
do i=1,4*m*n
    tai=dot_product(traneigv(i,:),eigenvector(:,i))
!....
enddo
不就行了么?[/quote]

不行吧?只有一重循环的话,只能说明他跟自身转置共轭相互作用啊,跟其他特征向量的转置共轭相乘的就没法表示了吧。

另外,求厄米矩阵的特征值和特征向量,好像用EVCHF好些,求出来的特征值和特征向量好像正好满足特征向量正交归一的条件。
我想试下是否真是这样,因为我的矩阵就是厄米矩阵,所以在imsl math/library上找了个程序http://wenku.baidu.com/view/427f26fff705cc17552709ab.html,在我电脑上用的时候出了点小问题:

program trans
 implicit none
 !定义变量
 integer lda,ldevec,n
 parameter(n=3,lda=n,ldevec=n)
 integer nout
 real epihf,eval(n),pi
 complex a(lda,n),evec(ldevec,n)
 logical small 
 external epihf,evchf,umach,wrcrn,wrrrn
 !定义参数a
 data a/(1.0,0.0),(1.0,7.0),(0.0,0.0),(0.0,1.0),(1.0,-7.0),(5.0,0.0),(10.0,3.0),(0.0,-1.0),(-2.0,0.0)/
 !找到矩阵A的特征值和特征向量
 call evchf(n,a,lda,eval,evec,ldevec)
 !计算performance index
 pi=epihf(n,n,a,lda,eval,evec,ldevec)
 !输出结果
 call umach(2,nout)
 call wrrrn('eval',1,n,eval,1,0) 
 call wrcrn('evec',n,n,evec,ldevec,0)
 write(nout,'(/a,f6.3)') 'Performance index=',PI
 end


编译的时候出错了:

trans.obj : error LNK2001: unresolved external symbol _EVCHF@24
trans.obj : error LNK2001: unresolved external symbol _EPIHF@28
trans.obj : error LNK2001: unresolved external symbol _UMACH@8
trans.obj : error LNK2001: unresolved external symbol _WRRRN@28
trans.obj : error LNK2001: unresolved external symbol _WRCRN@28
Debug/trans.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.

trans.exe - 6 error(s), 0 warning(s)
是我的fortran版本问题吗?

15 楼

问题在一点一点露出水面

16 楼


把它们给出的结果拿出来用matlab试了下,基本上满足正交归一了。
 EVEC

                    1                  2                  3

 1  ( 0.0631,-0.4075)  (-0.0598,-0.3117)  ( 0.8539, 0.0000)

 2  ( 0.7703, 0.0000)  (-0.5939, 0.1841)  (-0.0313,-0.1380)

 3  ( 0.4668, 0.1366)  ( 0.7160, 0.0000)  ( 0.0808,-0.4942)

17 楼

看来用EVCHF解厄米矩阵还是有一定优越性的

18 楼

难道我的库里没这些子程序?

19 楼

[quote][quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]

从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0[/quote]

明白你的意思了。


不同的特征值所对应的特征向量是正交的,它是自然正交的。

但是,当出现重根后,出现的特征向量就不一定是正交的了。所以,必须通过施密特正交化化法,然后单位化。

线性代数知识基本忘光了![em1][em1]

20 楼

[quote][quote][quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]

从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0[/quote]

明白你的意思了。


不同的特征值所对应的特征向量是正交的,它是自然正交的。

但是,当出现重根后,出现的特征向量就不一定是正交的了。所以,必须通过施密特正交化化法,然后单位化。

线性代数知识基本忘光了![em1][em1][/quote]


对,不同特征值对应的特征向量是自然正交的,不能强制正交。

对于后面的我就不清楚了,对于重根,是否特征向量还正交?但是我用malab算了下,重根的特征向量也是正交的。

好像对于这样的矩阵要用EVCHF来解了吧?那才是解厄米复数矩阵的函数啊。

我来回复

您尚未登录,请登录后再回复。点此登录或注册