2011-01-21 3 views
1

Я относительно новичок в программировании, и сейчас я пытаюсь написать программу с использованием Fortran 77, которая будет использовать метод решения уравнения Рунге-Кутта для определения температуры сферического мяч при определенном значении времени. В любом случае, уравнение в порядке, похоже, не вызывает никаких проблем, это, по-видимому, программирование самого метода РК.«Неожиданная ссылка на массив» в Fortran 77

Когда я говорю, что он компилируется, он представляет повторяющиеся ошибки в отношении «неожиданной ссылки на массив». Если кто-нибудь может дать мне несколько указателей о том, где я ошибаюсь, было бы очень признательно. Я развесить код и результаты ниже:

PROGRAM RKSubroutine 
    IMPLICIT NONE 
    DIMENSION t(3), y(3) 

    func=(-2.2067E-12)*((y**4)-(81E8)); 
    y0=1200; 
    h1=240; 
    a=0; 
    b=480; 

    func is name of function to be evaluated 
    a & b are the limits of integration 
    y0 is the initial condition 
    h1 is the stepsize  

    t=[a]; 
    y=[y0]; 
    i=1; 

    while t(i)<b 

    h=h1 
    k1=feval(func,t(i), y(i)); 
    k2=feval(func,t(i)+h/2,y(i)+k1*h/2); 
    k3=feval(func,t(i)+h/2,y(i)+k2*h/2); 
    k2=feval(func,t(i)+h,y(i)+k3*h); 

    y1=y(i)+(k1+2*k2+2*k3+k4)*h/6; 

    i=i+1; 
    t(i)=t(i-1)+h1; 

    stop 
    end 

После небольшой модификации следующих Bradys предложения ниже, сейчас я только получаю ошибку, казалось бы, независимо от значения размерности T в:

`In file RK.f:21 

    while t(i)<b 
     1 
    Error: Unexpected array reference at (1) 

Большое спасибо!

+0

Откуда у вас этот код? Это не FORTRAN77 - вы запускаете какие-либо простые программы FORTRAN? см. http://en.wikipedia.org/wiki/Fortran#FORTRAN_77 –

+0

Привет, Питер. Я написал несколько простых программ F77 раньше, но это был первый раз, когда я попытался использовать метод RK для решения проблемы. Я написал код с небольшой помощью из статьи Wiki об общем методе четвертого порядка Runge-Kutta http://en.wikipedia.org/wiki/Runge-Kutta_methods – PhysProg

ответ

0

Похоже, вы не объявили ни одну из ваших переменных. Тип каждой переменной объявляется первым символом имени переменной. И если вы явно не назначаете измерение (или размер) переменной, оно считается скалярной переменной. Поскольку вы ничего не заявляли, компилятор не знает, что t и y должны быть массивами (отсюда предупреждающие сообщения «неожиданный массив»).

Я настоятельно рекомендую вам использовать IMPLICIT NONE, если вы можете (не уверены, что это стандарт в Fortran 77). В любом случае всегда указывайте каждую используемую вами переменную. В вашем случае вы должны объявить t и y с соответствующим размером:

DIMENSION t(n), y(n) 

где заменить п целым числом, которое представляет фактический размер. Имейте в виду, что поведение программы не определено, если вы обращаетесь к массиву за пределами границ. Где не определено, как правило, означает, что ваша программа выйдет из строя.

+0

Это фантастика, спасибо, бради! Я теперь устранил все ошибки, кроме «В файле RK.f: 21 , в то время как t (i) PhysProg

Смежные вопросы