я пытаюсь решить уравнение, используя gfortran, но я получаю ошибку - PullRequest
0 голосов
/ 13 июня 2010

Я использую приведенную ниже программу, но постоянно получаю сообщение об ошибке. Что не так с моей программой?

  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

1 Ответ

4 голосов
/ 13 июня 2010

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

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

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

...