я пытаюсь решить уравнение с помощью 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

person sameon    schedule 13.06.2010    source источник
comment
в чем ошибка? не заставляйте людей читать и компилировать вашу программу, чтобы выяснить это. как насчет фона? какое уравнение? какой метод решения? прочитайте это, пожалуйста: catb.org/~esr/faqs/smart-questions .html   -  person duffymo    schedule 13.06.2010
comment
Ну, во-первых, в основной программе не может быть оператора return.   -  person Rook    schedule 13.06.2010


Ответы (1)


Эта строка (третья в многострочном выражении):

-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)

Второй из них - тот, который у вас, вероятно, есть (и тот, который вы можете исправить с помощью приведенного выше решения). Первое, если оно у вас есть, вызовет проблемы, но я подозреваю, что это просто из-за моего окружения.

person paxdiablo    schedule 13.06.2010
comment
Любой, кто хорошо замечает несбалансированные скобки, также должен быть программистом на Лиспе. - person NealB; 16.06.2010