Методы решения обычных дифференциальных уравнений (Лабораторная работа № 7), страница 8

C  ВЫВОД ИНФОРМ.НА ЭКРАН ДИСПЛЕЯ ДЛЯ ТЕКУЩЕГО

С КОНТРОЛЯ РЕШЕНИЯ

WRITE(5,106)X,NREZ   

106 FORMAT(1X,'X=',F8.4,'    NREZ=',I4)

C   ОБРАЩЕНИЕ К ПОДПРОГРАММЕ РЕШЕНИЯ

С ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ

6 CALL RNGKT2(N,X,H,Y,PRAV)

C   НАДО ЛИ ПРОДОЛЖАТЬ РАСЧЕТ?

9 IF(NREZ.LT.501)GO TO 10

WRITE(5,*)'DIF1: РАСЧЕТ ПРИОСТАНОВЛЕН ПО ПРИЧИНЕ   

*' ЗАПОЛНЕНИЯ ВЫХОДНЫХ ФАЙЛОВ (NREZ>501)'

GO TO 11

10 IF ((X-XKAN).GT.0.)GO TO 11

C   УВЕЛИЧЕНИЕ НЕЗАВИСИМОЙ ПЕРЕМЕННОЙ НА ВЕЛИЧИНУ

С ШАГА

X=X+H

GO TO 4

C        ЗАКРЫТИЕ ВЫХОДНЫХ  ФАЙЛОВ

11 CLOSE(UNIT=3)  

CLOSE(UNIT=4)

WRITE(5,101) Z2,Z3

101 FORMAT(1X,'DIFRK2: РАБОТА ЗАКОНЧЕНА. Р-ТЫ ЗАПИСАНЫ',

*' В ФАЙЛЫ ',A8, ' I ',A8)                                                          422

STOP

END

C

SUBROUTINE RNGKT2(N,X,H,Y,FNC)

C ПОДПРОГРАММА РЕШЕНИЯ СИСТЕМЫ ДИФФЕРЕНЦ.

C УРАВНЕНИЙ dY/dx=F(x,Y) С НАЧАЛЬНЫМИ УСЛОВИЯМИ

С (ЗАДАЧА КАШИ) МЕТОДОМ РУНГЕ-КУТТА ВТОРОГО ПОРЯДКА

C НА ОДНОМ ВРЕМЕННОМ ШАГЕ ПО АЛГОРИТМУ:

C               y(i+1)=y(i)+(h/2)*(k1+k2),

C               k1=f(x(i),y(i)),

C               k2=f(x(i)+h,y(i)+h*k1).

C РАЗРАБОТАНА НА КАФЕДРЕ ЭЛЕКТРИЧЕСКИХ СТАНЦИЙ 20.09.93.

C ОБОЗНАЧЕНИЯ ПЕРЕМЕННЫХ:

C    N - КОЛИЧЕСТВО УРАВНЕНИЙ В СИСТЕМЕ (ВХОДНАЯ

С ВЕЛИЧИНА)

C    X - ТЕКУЩЕЕ ЗНАЧЕНИЕ НЕЗАВИСИМОЙ ПЕРЕМЕННОЙ x

C    (РАБОЧАЯ И  ВЫХОДНАЯ ВЕЛИЧИНА)

C    H - ШАГ ИЗМЕНЕНИЯ НЕЗАВИС. ПЕРЕМЕННОЙ x

С (ВХОДН.ВЕЛИЧИНА)

C    Y(N) - МАССИВ ТЕКУЩИХ ЗНАЧЕНИЙ ИНТЕГРИРУЕМЫХ

C  ПЕРЕМЕННЫХ Y   (РАБОЧИЙ МАССИВ)

C    YF(N) - МАССИВ ЗНАЧЭНИЙ IНТЕГРИРУЕМЫХ ПЕРЕМЕННЫХ

С y(i)+h*k1,

C        ИСПОЛЬЗ.КАК АРГУМЕНТЫ ПРИ ВЫЧИСЛ.ПРАВЫХ ЧАСТЕЙ

С СИСТЕМЫ

C        k2=f(x(i)+h,y(i)+h*k1) В ПРАВОМ УЗЛЕ ИНТЕРВАЛА h

C    F1(N),F2(N) - МАССИВЫ ЗНАЧЕНИЙ k1 I k2 ФУНКЦИЙ F(x,Y)

C     АНАЛОГ. В  ЛЕВОМ И ПРАВОМ УЗЛАХ ИНТЕРВАЛА h

С       (РАБОЧИЕ МАСIВЫ).

C        ЗНАЧЕНИЯI ФУНКЦИЙ F(x,Y) ВЫСЧИТЫВАЮТСЯ В ВНЕШНЕЙ

C        ПОДПРОГРАММЕ FNC, КОТОРАЯ ЦЕЛИКОМ ВЫСЧИТ. ВИДОМ

C        ПРАВОЙ ЧАСТИ  СИСТЕМЫ УРАВНЕНИЙ И ДЛЯ КАЖДОЙ

C       НОВОЙ СИСТЕМЫ СКЛАДЫВАЕТСЯ ПОЛЬЗОВАТЕЛЕМ

С       ЗАНОВО

C    FNC - ИМЯ ВНЕШНЕЙ ПОДПРОГРАММЫ, В КОТОРОЙ

C       ВЫСЧИТЫВАЮТСЯ ЗНАЧЕНИЯ  ФУНКЦИЙ F(x,Y) В ПРАВОЙ

С   ЧАСТИ СИСТЭМЫ. ИМЯ ЭТОЙ ПОДПР. В СПИСКЕ ФОРМАЛЬНЫХ

C        ПАРАМЕТРОВ ОПЕРАТОРА SUBROUTINE ЭТОЙ

C        ПОДПРОГРАММЫ И В СПИСКЕ ФАКТИЧЕСКИХ ПАРАМЕТРОВ

C        ОПЕРАТОРА CALL ПРОГРАММЫ, КОТОРАЯ ЕЕ ВЫЗЫВАЕТ,

С        МОЖЕТ БЫТЬ РАЗНЫМ, В ТАКОМ СЛУЧАЕ В

C        ПРОГРАММЕ, КОТОРАЯ ЕЕ ВЫЗЫВАЕТ, ЭТО ИМЯ ДОЛЖНО

C        БЫТЬ ОПИСАНО В  ОПЕРАТОРЕ EXTERNAL

DIMENSION Y(16),YF(16),F1(16),F2(16)

C ВЫЧИСЛ. ЗНАЧЭНИЙ ФУНКЦИЙ f(x,Y) В ЛЕВОМ КОНЦЕ ИНТЕРВ.h

C  ПО ФОРМУЛЕ к1=f(x(i),y(i))

CALL FNC(X,Y,F1)

C ВЫЧИСЛЕНИЕ ЗНАЧЕНИЙ ФУНКЦЫИ f(x,Y) В ПРАВОМ КОНЦЕ

C ИНТЕРВАЛА ПО ФОРМУЛЕ k2=f(x(i)+h,y(i)+h*k2)

XF=X+H

DO 1 I=1,N

1 YF(I)=Y(I)+H*F1(I)

CALL FNC(XF,YF,F2)

C ВЫЧИСЛЕНИЕ ЗНАЧЕНИЙ ИНТЕГРИРУЕМЫХ ПЕРЕМЕННЫХ Y НА

C НОВОМ ШАГЕ  ПО ФОРМУЛЕ y(i+1)=y(i)+(k1+k2)*(h/2)

DO 6 I=1,N

6 Y(I)=Y(I)+H*(F1(I)+F2(I))/2.

11 RETURN

END

C

C ПОДПРОГРАММА ВЫЧИСЛЕНИЯ  ПРАВЫХ ЧАСТЕЙ

C ДЛЯ СЛЕДУЮЩЕЙ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ

С УРАВНЕНИЙ 3-ГА ПОРЯДКА

C dy1/dt=f1(y1,y2,y3,x); где: f1(y1,y2,y3,x)=cos(x)-exp(-x)-y3

C dy1/dt=f2(y1,y2,y3,x);      f2(y1,y2,y3,x)=y3

C dy1/dt=f3(y1,y2,y3,x);      f3(y1,y2,y3,x)=-y2

SUBROUTINE PRAV(X,Y,F)

DIMENSION Y(*),F(*)

F(1)=COS(X)-EXP(-X)-Y(3)

F(2)=Y(3)

F(3)=-Y(2)

RETURN

END   

Дополнение 3

C      ПРОГРАММА 'DIFRK4' 16.09.94

C      РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ

C      dY/dx = f(x,Y) МЕТОДАМ РУНГЕ-КУУТТА ЧЕТВЕРТОГО

C      ПОРЯДКА С ПОСТОЯННЫМ ШАГОМ ИЗМЕНЕНИЯ

С      НЕЗАВИСИМОЙ ПЕРЕМЕННОЙ. АЛГОРИТМ

C      НА ОДНОМ ВРЕМЕННОМ  ШАГЕ  ВИД:

C            y(i+1)=y(i)+(h/6)*(k1+2*k2+2*k3+k4),

C                k1=f(x(i),y(i),

C                k2=f(x(i)+h/2,y(i)+(h/2)*k1),

C                k3=f(x(i)+h/2,y(i)+(h/2)*k2),

C                k4=f(x(i)+h,y(i)+h*k3),

C            i=0,1,2, ... ,m-1 (m-КОЛИЧЕСТВО КРОКАУ ПО ВОСI x)

C

C            ОБОЗНАЧЕНИЯ ПЕРЕМЕННЫХ В ПРОГРАММЕ:

C N - КОЛИЧЕСТВО ДИФФЕРЕНЦ.УРАВНЕНИЙ В СИСТЕМЕ