回 帖 发 新 帖 刷新版面

主题:jstzhurj老师,我又将程序简化了,能否看下?

还是上次那代码。我想了下,由于相邻的两个特征值之间可能有好几个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

回复列表 (共58个回复)

11 楼

老师,发给我看下吧。呵呵,多谢啦

12 楼


[em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2][em2]

13 楼

发到这个邮箱吧。tianhy2010@163.com多谢啦。

14 楼

[quote]发到这个邮箱吧。tianhy2010@163.com多谢啦。[/quote]

[em1][em2][em3][em4][em5][em7][em9][em10][em12][em13][em15][em14][em16][em17][em18][em19][em20]

15 楼



老师,我感谢您!!祝您身体健康,每天心情愉快,万事顺心!!
感谢上帝,阿门!!
[em1][em2][em3][em4][em5][em6][em7][em8][em9][em10][em11][em12][em13][em13][em14][em16][em17][em18][em19][em20][em35][em35][em35][em35][em35][em35][em35][em35][em35][em35][em35][em35][em35][em32][em32][em32][em32][em32][em32][em32][em60][em60][em60][em60]

16 楼


请问你的loop=10循环干啥用?

17 楼


我现在对你的程序有严重的怀疑!怀疑你程序实现的东西完全不是你本意想要的东西!!

18 楼

老师,我把我的本意贴出来吧,在word里,您看下吧。

19 楼

那个附件就是的

20 楼

加了10个循环主要是考虑到每次去矩阵特征向量和特征值都有所不同,多次求取平均值吧

我来回复

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