2010-06-13 36 views
0

我使用下面的程序,但我不断收到error.What是我的程序错了吗?我试图解决使用gfortran的等式,但我不断收到错误

real x 
    complex y 
    real m1,H0,Ms,P1,P2,P3,w0,wm,wh 
    complex w1,w2,o1,o2 
    integer i,n 
    real pi 
    n=4000000000 
    pi=4*atan(1.0) 
    m1=4*pi*1e-7 
    H0=39.79e3 
    Ms=1400e3 
    P1=0.7*0.12 
    P2=0.3*0.12 
    P3=P1-P2 
    w0=m1*(1.76e11)*H0 
    wm=m1*(1.76e11)*Ms 
    wh=w0-P3*wm 
    im=cmplx(0,1) 
    w1=wm/2+wh-im*0.06*2*pi*x 
    w2=wm/2-wh-im*0.06*2*pi*x 
    o1=x**2-x*(2*wh-(P3*wm)/2)-w1*w2+(wm/2)*(P1*w2+P2*w1) 
    o2=x**2+x*(2*wh-(P3*wm)/2)-w1*w2+(wm/2)*(P1*w2+P2*w1) 

    do i=0,n 
    x=i 
    y=1+wm*(P1*w1*((w2)**2-x**2))/(o1*o2) 
&  +wm*(P2*w2*((w1)**2-x**2))/(o1*o2) 
&  -wm*((wm/2)*((P1*w2+P2*w1)**2)))/(o1*o2) 
&  +wm*((wm/2)*((P3*x)**2))/(o1*o2) 
    write(10,*)x,y 
    enddo 
    return 
    end 
+0

错误是什么?不要让人们阅读并编译你的程序来找出答案。如何'回合一些背景?等式是什么?解决方法是什么?请阅读:http://www.catb.org/~esr/faqs/smart-questions.html – duffymo 2010-06-13 15:05:31

+0

首先,在主程序中不能有return语句。 – Rook 2010-06-13 18:38:26

回答

4

这条线(在多行语句中的第三个):

-wm*((wm/2)*((P1*w2+P2*w1)**2)))/(o1*o2) 
    || | ||   | ||| |  | 
    |+----+ |+-----------+ ||| +-----+ 
    |  +----------------+|| 
    +-------------------------+| 
??? <--------------------------+ 

有一个太多右括号{心惊胆战我真棒绘画技巧:-)}。它应该是:

-wm*((wm/2)*((P1*w2+P2*w1)**2))/(o1*o2) 

问题的清单我从源头得到的是:

source.f90:7.18: n=4000000000 
          1 
       Error: Integer too big for its kind at (1). This check can 
       be disabled with the option -fno-range-check. 
source.f90:26.9: y=1+wm*(P1*w1*((w2)**2-x**2))/(o1*o2) & 
       1 
       Error: Unclassifiable statement at (1) 

那些二是你可能具有一个(和你可以用上面的解决方案修复)。首先,如果你拥有它,会导致问题,但我怀疑这只是因为我的环境。

+1

任何善于发现不平衡括号的人也必须是lisp程序员 – NealB 2010-06-15 21:04:52

相关问题