主题: jstzhurj老师,在啊?选择特定特征向量
tianhy2010
[专家分:60] 发布于 2010-09-01 20:11:00
还有个问题,自己修改了下,麻烦给帮忙看下吧![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,再跟后面的比较,再把最小的给它吧?
最后更新于:2010-09-01 20:48:00
回复列表 (共26个回复)
11 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 12:11:00
[quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]
从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0
12 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 12:49:00
应该用EVCHF求矩阵,因为我的矩阵是厄米矩阵,刚用matlab试了下,对厄米矩阵,给出的特征向量本身就 满足正交归一。研究下
13 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 13:23:00
[quote][quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]
从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0[/quote]
那为啥还要2重循环?
do i=1,4*m*n
tai=dot_product(traneigv(i,:),eigenvector(:,i))
!....
enddo
不就行了么?
14 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 13:53:00
那为啥还要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 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 13:54:00
问题在一点一点露出水面
16 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 14:04:00
把它们给出的结果拿出来用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 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 14:05:00
看来用EVCHF解厄米矩阵还是有一定优越性的
18 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 14:24:00
难道我的库里没这些子程序?
19 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 14:28:00
[quote][quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]
从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0[/quote]
明白你的意思了。
不同的特征值所对应的特征向量是正交的,它是自然正交的。
但是,当出现重根后,出现的特征向量就不一定是正交的了。所以,必须通过施密特正交化化法,然后单位化。
线性代数知识基本忘光了![em1][em1]
20 楼
tianhy2010 [专家分:60] 发布于 2010-09-02 14:52:00
[quote][quote][quote]
是寻找与其本身转置共轭乘积为1的向量吗?[/quote]
从矩阵特征向量里找,寻找与其本身转置共轭乘积为1的向量,而且与其它向量转置共轭乘积为。
正交归一。
归一化:某个向量与它本身转置共轭乘积为1
正交:某个向量与不是它本身向量转置共轭乘积为0[/quote]
明白你的意思了。
不同的特征值所对应的特征向量是正交的,它是自然正交的。
但是,当出现重根后,出现的特征向量就不一定是正交的了。所以,必须通过施密特正交化化法,然后单位化。
线性代数知识基本忘光了![em1][em1][/quote]
对,不同特征值对应的特征向量是自然正交的,不能强制正交。
对于后面的我就不清楚了,对于重根,是否特征向量还正交?但是我用malab算了下,重根的特征向量也是正交的。
好像对于这样的矩阵要用EVCHF来解了吧?那才是解厄米复数矩阵的函数啊。
我来回复