Текст подпрограммы и версий ( Фортран ) 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 |
Выполнение одного шага численного интегрирования системы обыкновенных дифференциальных уравнений первого порядка методом Адамса с контролем точности.
Выполняется один шаг численного интегрирования системы М обыкновенных дифференциальных уравнений первого порядка
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