2010-06-13 38 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

相關問題