回 帖 发 新 帖 刷新版面

主题: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个回复)

21 楼

[quote]
请问你的loop=10循环干啥用?
[/quote]

22 楼

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

放在循环体内求平均,有何意义?在10个结果还没得到之前,每次循环求平均?!能得到你要的结果吗?

23 楼

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

24 楼

不能,这个地方处理出错了。

25 楼

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

放在循环体内求平均,有何意义?在10个结果还没得到之前,每次循环求平均?!能得到你要的结果吗?[/quote]

b不能得到我的结果,我处理错了,应该求完10次之后在循环外求平均

26 楼

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

再说了,特征向量是一个矢量,简单的平均又有何意义?

27 楼

[quote]不能,这个地方处理出错了。[/quote]
 所以说我严重怀疑你的程序!

28 楼

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

再说了,特征向量是一个矢量,简单的平均又有何意义?[/quote]

难道还要对实部和虚部分别求平均吗?[em15][em21][em21]
这个漏洞百出的程序搞了我一个假期[em21][em21][em21]

老师,除了eig函数还有没有其他函数求特效向量?我发现这个程序得到的特征向量跟matlab得到的老大的不同。特征值都是相同的。

29 楼

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

再说了,特征向量是一个矢量,简单的平均又有何意义?[/quote]

难道还要对实部和虚部分别求平均吗?[em15][em21][em21]
这个漏洞百出的程序搞了我一个假期[em21][em21][em21]

老师,除了eig函数还有没有其他函数求特效向量?我发现这个程序得到的特征向量跟matlab得到的老大的不同。特征值都是相同的。[/quote]


把所有的complex换成complex*16 试试!看看结果还和matlab的是否一致

30 楼


[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]

我来回复

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