Текст подпрограммы и версий ( Фортран )
de28r.zip , de28d.zip
Тексты тестовых примеров ( Фортран )
tde28r.zip , tde28d.zip
Текст подпрограммы и версий ( Си )
de28r_c.zip , de28d_c.zip
Тексты тестовых примеров ( Си )
tde28r_c.zip , tde28d_c.zip
Текст подпрограммы и версий ( Паскаль )
de28r_p.zip , de28e_p.zip
Тексты тестовых примеров ( Паскаль )
tde28r_p.zip , tde28e_p.zip

Подпрограмма:  DE28R

Назначение

Выполнение одного шага численного интегрирования системы обыкновенных дифференциальных уравнений первого порядка методом Адамса с контролем точности.

Математическое описание

Выполняется один шаг численного интегрирования системы М обыкновенных дифференциальных уравнений первого порядка

          Y ' = F (X, Y) ,

          Y = ( y1, ..., yM ) ,
          F = ( f1 (X, y1,..., yM), ... , fM (X, y1,..., yM) ) 

многошаговым предсказывающе - исправляющим методом пятого порядка точности. Суть метода состоит в том, что сначала по явной формуле Адамса строятся предсказанные значения приближенного решения, которые затем исправляются по неявной формуле Адамса.

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

Березин И.С., Жидков Н.П. Методы вычислений, т.2, Физматгиз, М., 1960.

Беленький В.З. Стандартная программа для интегрирования системы дифференциальных уравнений методом Адамса. Сб. "Вычислительные методы и программирование", вып. 3, Изд-во МГУ, 1965

Использование

    SUBROUTINE  DE28R (F, M, JSTART, HMIN, HMAX, EPS, P, YX, X,
                                             H, BUL, DELTY, DF, RF, YP,
                                             RY, RFN, IERR) 

Параметры

F - имя подпрограммы вычисления значений правой части дифференциального уравнения. Первый оператоp подпрограммы должен иметь вид:
SUBROUTINE  F (X, Y , DY, M).
Здесь: X, Y - значения независимой и зависимой переменных, соответственно. Вычисленное значение правой части должно быть помещено в DY. B случае системы уравнений, т.е. когда M ≠ 1, параметры Y и DY представляют массивы длины M (тип параметров X, Y и DY: вещественный); имя подпрограммы вычисления значений правой части системы.
M - количество уравнений в системе (тип: целый);
JSTART - целый указатель режима использования подпрограммы, имеющий следующие значения:
0 - первое обращение к подпрограмме должно быть выполнено с нулевым значением JSTART;
+ 1 - выполнить один шаг интегрирования системы дифференциальных уравнений для значений независимой и зависимой переменных и шага интегрирования, заданных параметрами X, YX и H, соответственно;
- 1 - повторить последний шаг интегрирования с новыми значениями параметров H и/или HMIN;
  на выходе из подпрограммы JSTART полагается равным + 1;
HMIN - минимальное значение абсолютной величины шага, котоpое разрешается использовать при интегрировании данной системы уравнений (тип: вещественный);
HMAX - максимальное значение абсолютной величины шага, котоpое разрешается использовать при интегрировании данной системы уравнений (тип: вещественный);
EPS - допустимая меpа погрешности, с которой тpебуется вычислить все компоненты решения (тип: вещественный);
P - граница перехода, используемая при оценке меры погрешности решения (тип: вещественный);
X, YX - заданные вещественные значения аргумента и решения уравнения в нем; в результате работы подпрограммы в X получается новое значение аргумента, а в YX - соответствующее значение решения; в случае системы уpавнений, т.е. когда M ≠ 1, YX задается одномерным массивом длины M;
H - вещественная переменная, содержащая значение шага интегрирования; если для этого значения шага точность приближенного решения достигается, то именно он и реализуется подпрограммой, иначе этот шаг уменьшается подпрограммой до тех пор, пока не будет достигнута заданная точность EPS; на выходе из подпрограммы H содержит рекомендуемое подпрограммой значение следущего шага интегрирования, определяемое ею с целью достижения более экономного способа интегрирования;
BUL - логическая переменная, значение которой при обращении к подпрограмме полагается равным .TRUE., если заданный в H шаг выводит в конец интервала интегрирования, и .FALSE. в противном случае; в результате работы подпрограммы BUL pавно .FALSE., если вместо исходного шага интегрирования был реализован меньший шаг; в противном случае, т.е. когда был выполнен именно заданный при обращении в H шаг, значение параметра BUL не меняется;
DF - двумерный вещественный рабочий массив размеpа M*5, в котоpом запоминаются значения правой части системы и ее разностей до четвертого порядка включительно (так называемый "фронт Адамса");
       DELTY -
        RF, YP  
         RFN  
одномерные вещественные рабочие массивы длины M;
RY - двумерный вещественный рабочий массив размера M*5;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом:
IERR=65 - когда интегрирование системы выполнено с заданным в HMIN минимальным шагом, но требуемая точность полученного при этом значения YX решения не достигнута; в этом случае последний шаг интегрирования системы можно повторить обращением к подпрограмме с новыми значениями параметров H и HMIN и со значением JSTART = - 1;
IERR=66 - когда решение не может быть вычислено с требуемой точностью EPS при первом обращении к подпрограмме (т.е. со значением JSTART = 0); в этом случае интегрирование системы можно начать сначала обращением к подпрограмме с новыми значениями параметров H и HMIN и со значением JSTART = 0 .

Версии

DE28D - выполнение одного шага численного интегрирования системы обыкновенных дифференциальных уpавнений первого порядка методом Адамса с повышенной точностью. При этом параметры HMIN, HMAX, EPS, P, YX, X, H, DELTY, DF, RF, YP, RY, RFN и параметры X, Y и DY в подпрограмме F должны иметь тип DOUBLE PRECISION.

Вызываемые подпрограммы

DE32R - построение начальных значений при интегрировании системы обыкновенных дифференциальных уравнений первого порядка методом Адамса с контролем точности.
DE32D - построение начальных значений с повышенной точностью при интегрировании системы обыкновенных дифференциальных уравнений первого порядка методом Адамса с контролем точности.
      UTDE12 -
      UTDE13  
подпрограммы выдачи диагностических сообщений.
 

Подпрограммы DE32R и UTDE12 вызываются при работе подпрограммы DE28R, а подпрограммы DE32D и UTDE13 - при работе подпрограммы DE28D.

Kpоме того, DE28R и DE28D используют рабочие подпрограммы DE28RP, DE28RS и DE28DP, DE28DS, соответственно.

Замечания по использованию

 

B общем случае заданая точность не гарантируется.

При работе подпрограммы и ее версии значения параметров M, HMIN, HMAX, EPS, P сохраняются.

При многократном использовании подпрограммы или ее веpсии для вычисления решения системы уравнений на отрезке значения параметров M, YX, X и значения рабочих массивов, задаваемых параметрами DF, YP, не должны изменяться в вызывающей программе между последовательными обращениями к подпрограмме.

Пример использования

           y1'  =   y2
           y2'  =  -y1

          y1 (3/4 π)  =   √2 /2 ,     y2 (3/4 π)  =  -√2 /2 

Приводятся подпрограмма вычисления значений правой части и фрагмент вызывающей программы, выполняющей несколько шагов из одной и той же точки, а также результаты счета.

          SUBROUTINE  F (X, Y, DY, M)
          DIMENSION  Y(2), DY(2)
          DY(1) = Y(2)
          DY(2) = -Y(1)
          RETURN
          END

          DIMENSION  Y(2), DELTY(2), DF(10), RF(2), YP(2),
         *                        RY(10), RFN(2)
          LOGICAL BUL
          EXTERNAL  F
          M = 2
          JSTART = 0
          HMIN = 1.E-18
          HMAX = 1.
          EPS = 1.E-8
          P = 100.
          Y(1) = SQRT(2.)/2
          Y(2) = -Y(1)
          X = 0.75*3.14159265359
          H = 0.01
          BUL = .FALSE.
          IH = 0
      6  CALL  DE28R (F, M, JSTART, HMIN, HMAX, EPS, P, Y, X, H,
        *                         BUL, DELTY, DF, RF, YP, RY, RFN, IERR)
          IH = IH + 1
          IF (IH .EQ. 1) GO TO 6
          Y1 = SIN(X)
          Y2 = COS(X)
C   ПEЧATЬ ПPИБЛИЖEHHOГO И TOЧHOГO ЗHAЧEHИЙ PEШEHИЯ
          PRINT 1, X, Y, H, Y1, Y2
          IF (IH .EQ. 4) GO TO 20
          JSTART = -1
          IF (IH .EQ. 3) GO TO 7
          H = 0.005
          GO TO 6
       7  H = 0.02
          GO TO 6
     20  STOP
       1  FORMAT (3E18.9)   

Результаты:

    после второго обращения к подпрограмме -
          X                                Y(1)                         Y(2)
          2.376194490+00        6.928241717-01     -7.211065574-01
          H                                Y1                            Y2
          1.000000000-02         6.928241717-01     -7.211065574-01
 
    после третьего обращения к подпрограмме -
          X                                Y(1)                         Y(2)
          2.371194490+00        6.964210292-01     -7.176334371-01
          H                                Y1                            Y2
          5.000000000-03         6.964210292-01     -7.176334371-01

    после четвертого обращения к подпрограмме -
          X                                Y(1)                         Y(2)
          2.386194490+00        6.855785854-01     -7.279986286-01
          H                                Y1                            Y2
          2.000000000-02         6.855785854-01     -7.279986286-01