回 帖 发 新 帖 刷新版面

主题:选择部分数据输出!期望有人能帮下忙,该文章要数据

我做了个求能带图的程序,每个k对应N个E,N=40,横坐标是k,纵坐标是E,我写的程序,但是换行不合理啊
program nengdai
use imsl
implicit none
parameter N=40
parameter pi=3.1415926,t=2.8

integer i,j
real H(2*N,2*N),U(2,2),U2(2,2),E(2*N)
real B0,k

E=0.0
B0=0.0
H=0.0
U=0.0
U2=0.0

U(1,1)=-t
u(2,2)=-t




do i=1,N
   j=2*i-1
    H(j,j)=B0
    H(j,j+1)=0.0

    H(j+1,j)=0.0
    H(j+1,j+1)=-B0
   
end do

open(2,file='Eig.dat')

do k=0,2*pi,0.01

U2(1,1)=-2*t*cos(k/2)
U2(2,2)=U2(1,1)

  do  j=1,N
    i=2*j-1
    if (mod(J,2)==1) then
      if (J==1) then
    H(i:i+1,i+2:i+3)=u2
      else
    H(i:i+1,i+2:i+3)=u2
    H(i:i+1,i-2:i-1)=u
      end if
    else
      if (J==N) then
    H(i:i+1,i-2:i-1)=u2  
      else
    H(i:i+1,i+2:i+3)=u
    H(i:i+1,i-2:i-1)=u2
      end if
    end if
  end do

E=eig(H)

 write(2,'(f8.2,40f10.2/)') k,E  !需要换行操作的语句在这里,怎么办呢

end do
end
最后换行操作我干脆 让k和40个E写完之后换行,但是结果输出不理想,大家能否帮忙看下怎么解决啊、

回复列表 (共4个回复)

沙发

要每个k对应它的E,矩阵是80*80的,这样写可以吗?
write(2,'(f8.6,80f10.8)') k,E

板凳

出现这种数据:
0.0000008.3784488.378447****************8.313964********8.313962****************8.2070678.207067********

中间有好多**********是怎么回事

3 楼

write(2,'(f8.6, 80f18.6)') k,E
解决了

4 楼

如果我想达到这种效果,该怎么处理?让程序只输出一部分值,如果
 do i=1,2*N

   if (0.0<abs(E(i))<=0.4) then
      EF2(i)=E(i)
        end if
    if (-0.4<E(i)<=0.0) then
      EF1(i)=E(i)
   end if
   write(1,'(f8.6, 2f18.6)') k,EF1(i),EF2(i)
 end do
让0<E<0.4和-0.4<E<0的值分别输出,这样修改不行啊,输出的还是全体结果,该怎么处理呢?期待啊

我来回复

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