主题:jstzhurj老师,我又将程序简化了,能否看下?
tianhy2010
[专家分:60] 发布于 2010-08-28 22:18:00
还是上次那代码。我想了下,由于相邻的两个特征值之间可能有好几个p,比如在eigenvalue(4)和eigenvalue(5)之间有8个p,分别是23、24、25、。。。、30,他们的conr值相同,我只要算一个就可以了,然后把这个值赋给其他的conr,比如得到了conr(23),可以把conr(23)直接赋给conr(24、25、26、...、30),这样就不用再重复计算了,我改了下程序,帮忙看下吧?呵呵
q=1
do i=1,4*m*n-1 !每个i找满足的p,先对i循环
conduc=0.0
k=0
do p=q,450000
if((eigenvalue(i)<=Ef(p)).and.(eigenvalue(i+1)>Ef(p))) then !如果p满足条件,就执行下面的操作,再看下满足这个条件的p有几个
q=p+1 !p+1看下还能否满足条件,如果能那就k+1,直到不能满足条件跳出if语句
k=k+1 !计算总的能满足i条件的p的个数
end if
do temp=1,i
do j=i+1,4*m*n
ea=matmul(traneigv(temp,:),hx)
ec=matmul(traneigv(temp,:),hy)
eb=matmul(traneigv(j,:),hx)
ed=matmul(traneigv(j,:),hy)
conduc=conduc+(dot_product(ea,eigenvector(:,j))*dot_product(ed,eigenvector(:,temp))
end do
end do
conr(p)=2*pi*aimag(conduc)/S
!将能满足i条件的所有conr(p)都赋值,如果k>1,那就说明不止一个能满足条件了
if(k>1) then
do ii=1,k
conr(p+ii)=conr(p)
end do
end if
q=p
exit !退到计算下一个i的地方
end do
end do
最后更新于:2010-08-30 22:21:00
回复列表 (共58个回复)
21 楼
jstzhurj [专家分:4680] 发布于 2010-08-30 14:39:00
[quote]
请问你的loop=10循环干啥用?
[/quote]
22 楼
jstzhurj [专家分:4680] 发布于 2010-08-30 14:53:00
[quote]加了10个循环主要是考虑到每次去矩阵特征向量和特征值都有所不同,多次求取平均值吧[/quote]
放在循环体内求平均,有何意义?在10个结果还没得到之前,每次循环求平均?!能得到你要的结果吗?
23 楼
tianhy2010 [专家分:60] 发布于 2010-08-30 14:53:00
抱歉。加了10个循环主要是考虑到每次求矩阵特征向量和特征值都有所不同,多次求取平均值吧
24 楼
tianhy2010 [专家分:60] 发布于 2010-08-30 14:54:00
不能,这个地方处理出错了。
25 楼
tianhy2010 [专家分:60] 发布于 2010-08-30 15:01:00
[quote][quote]加了10个循环主要是考虑到每次去矩阵特征向量和特征值都有所不同,多次求取平均值吧[/quote]
放在循环体内求平均,有何意义?在10个结果还没得到之前,每次循环求平均?!能得到你要的结果吗?[/quote]
b不能得到我的结果,我处理错了,应该求完10次之后在循环外求平均
26 楼
jstzhurj [专家分:4680] 发布于 2010-08-30 15:02:00
[quote]抱歉。加了10个循环主要是考虑到每次求矩阵特征向量和特征值都有所不同,多次求取平均值吧[/quote]
再说了,特征向量是一个矢量,简单的平均又有何意义?
27 楼
jstzhurj [专家分:4680] 发布于 2010-08-30 15:04:00
[quote]不能,这个地方处理出错了。[/quote]
所以说我严重怀疑你的程序!
28 楼
tianhy2010 [专家分:60] 发布于 2010-08-30 15:19:00
[quote][quote]抱歉。加了10个循环主要是考虑到每次求矩阵特征向量和特征值都有所不同,多次求取平均值吧[/quote]
再说了,特征向量是一个矢量,简单的平均又有何意义?[/quote]
难道还要对实部和虚部分别求平均吗?[em15][em21][em21]
这个漏洞百出的程序搞了我一个假期[em21][em21][em21]
老师,除了eig函数还有没有其他函数求特效向量?我发现这个程序得到的特征向量跟matlab得到的老大的不同。特征值都是相同的。
29 楼
jstzhurj [专家分:4680] 发布于 2010-08-30 15:39:00
[quote][quote][quote]抱歉。加了10个循环主要是考虑到每次求矩阵特征向量和特征值都有所不同,多次求取平均值吧[/quote]
再说了,特征向量是一个矢量,简单的平均又有何意义?[/quote]
难道还要对实部和虚部分别求平均吗?[em15][em21][em21]
这个漏洞百出的程序搞了我一个假期[em21][em21][em21]
老师,除了eig函数还有没有其他函数求特效向量?我发现这个程序得到的特征向量跟matlab得到的老大的不同。特征值都是相同的。[/quote]
把所有的complex换成complex*16 试试!看看结果还和matlab的是否一致
30 楼
jstzhurj [专家分:4680] 发布于 2010-08-30 20:21:00
[em1][em50][em58][em57][em56][em55][em54][em53][em66][em75][em74][em72][em71][em64][em65][em67][em68][em69][em27][em1][em50][em58][em57][em56][em55][em54][em53][em66][em75][em74][em72][em71][em64][em65][em67][em68][em69][em27][em1][em50][em58][em57][em56][em55][em54][em53][em66][em75][em74][em72][em71][em64][em65][em67][em68][em69][em27]
我来回复