|
Текст подпрограммы и версий de23r_p.zip , de23e_p.zip , de25r_p.zip , de25e_p.zip |
Тексты тестовых примеров tde23r_p.zip , tde23e_p.zip , tde25r_p.zip , tde25e_p.zip |
Вычисление решения задачи Коши для нежесткой и жесткой систем обыкновенных дифференциальных уравнений первого порядка в конце интевала интегирования методом Гира с автоматическим выбром шага.
Решается задача Коши для системы M обыкновенных дифференциальных уравнений первого порядка
Y' = F (X, Y) ,
Y = ( y1, ..., yM ) ,
F = ( f1 (X, y1,..., yM),..., fM (X, y1,..., yM) )
с начальными условиями, заданными в точке XN:
Y(XN) = YN , YN = ( y10,..., yM0 ) ,
методом Гира. Решение вычисляется в одной точке XK, которая является концом интервала интегрирования.
Метод Гира для нежесткой системы является многошаговым предсказывающе - исправляющим методом Адамса, записанным в форме Нордсика, при этом предсказание и исправление имеют один и тот же порядок.
B случае, когда система уравнений является жесткой, интегрирование осуществляется специальным методом, основанном на методе типа Адамса и использующим якобиан ( ∂F/∂Y ) системы, который вычисляется подпрограммой по формулам численного дифференцирования. При интегрировании данной системы уравнений численное решение проверяется на точность; считается что значение решения в узле xn вычислено с требуемой точностью ЕРS, если выполняется следующее соотношение:
M
( ∑ δI2 )1/2 ≤ EPS ,
I=1
где δI - одна из погрешностей следующих типов: абсолютная, относительная или стандартная. При этом под относительной погрешностью приближенного значения I - й компоненты решения в узле xn подразумевается отношение абсолютной погрешности eI этого значения в узле xn к абсолютной величине значения I - й компоненты в предыдущем узле xn - 1, т.е. eI / | yIn - 1|, а под стандартной погрешностью - отношение eI / YPM (I), где
YPM(I) = max ( | yI0 |, | yI1 |,..., | yIn-1 | )
Tип погрешности специфицируется пользователем при обращении к подпрограмме.
Gear C.W. The automatic integration of ordinary differential equations. Communicatuons of the ACM, 14, 3 (March 1971), 176-179.
Gear C.W., Numerical Initial Value Problems in Ordinary Differential Equations, Prentice - Hall, Englewood Cliffs, N.J., 1971.
Gear C.W., The automatic integration of stiff ordinary differential equations. Information Processing 68, A.J.H.
procedure DE23R(F :Proc_F_DE; M :Integer; XN :Real;
var YN :Array of Real; XK :Real; HMIN :Real;
HMAX :Real; EPS :Real; ISTIFJ :Integer;
IORDER :Integer; IU :Integer; var H :Real;
var Y :Array of Real; var YPM :Array of Real;
var DELTY :Array of Real; var RAB :Array of Real;
var YP :Array of Real; var IERR :Integer);
Параметры
| F - |
имя подпрограммы вычисления значений правой
части дифференциального уравнения. Первый
оператоp подпрограммы должен иметь вид: procedure F (X :Real; var Y :Array of Real; var DY :Array of Real; M :Integer); Здесь: X, Y - значения независимой и зависимой переменных, соответственно. Вычисленное значение правой части должно быть помещено в DY. B случае системы уравнений, т.е. когда M ≠ 1, параметры Y и DY представляют массивы длины M (тип параметров X, Y и DY: вещественный); |
| M - | количество уравнений в системе (тип: целый); |
| XN, YN - | начальные значения аргумента и решения; в случае системы уравнений (т.е. M ≠ 1) YN представляет массив длины M (тип: вещественный); |
| XK - | значение аргумента, при котоpом требуется вычислить решение задачи Коши (конец интервала интегрирования); XK может быть больше, меньше, или pавно XN (тип: вещественный); |
| HMIN - | минимальное значение абсолютной величины шага, котоpое разрешается использовать при интегрировании данной системы уравнений; это значение должно быть много меньше среднего ожидаемого шага интегрирования, задаваемого параметром H (тип: вещественный); |
| HMAX - | максимальное значение абсолютной величины шага, котоpое разрешается использовать при интегрировании данной системы уравнений (тип: вещественный); |
| EPS - | допустимая погрешность, с которой требуется вычислить все компоненты решения; тип погрешности специфицируется с помощью параметpа IU (тип: вещественный); |
| ISTIFJ - | целый указатель метода численного интегрирования: |
| ISTIFJ=0 - | интегрирование системы ведется методом Адамса; |
| ISTIFJ=1 - | интегрирование ведется специальным методом, предназначенным для жестких систем; |
| IORDER - | целая переменная, указывающая максимальный допустимый порядок метода; IORDER должен быть не больше 7 для метода Адамса и не больше 6 для метода интегрирования жестких систем; |
| IU - | целый указатель типа погрешности численного решения: |
| IU = 1 - | для стандартной погрешности; |
| IU = 2 - | для относительной погрешности; |
| IU = 3 - | для абсолютной погрешности; |
| H - | вещественная переменная, содержащая начальное значение шага интегрирования; может задаваться с учетом направления итегрирования, т.е. положительным, если XK > XN, отрицательным, если XK < XN, или без такого учета в виде абсолютной величины; |
| Y - | искомое решение задачи Коши, вычисленное подпрограммой для значения аргумента XK; для системы уравнений (когда M ≠ 1) задается массивом длиной M; в случае совпадения значений параметров XN и XK значение Y полагается равным начальному значению YN (тип: вещественный); |
|
YPM - DELTY | одномерные вещественные рабочие массивы длиной M; |
| RAB - | одномерный вещественный рабочий массив; при интегрировании нежесткой системы уравнений RAB имеет размер 17*M, при интегрировании жесткой системы - M*(M + 17); |
| YP - | двумерный вещественный рабочий массив размеpа 8*M; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом: |
| IERR= 1 - | когда неправильно задан параметр IORDER, а именно, когда IORDER превосходит максимальный допустимый порядок метода; в этом случае интегрирование системы ведется методом Гира порядка не выше 7 для нежесткой системы, и не выше 6 для жесткой; |
| IERR=65 - | когда решение системы не может быть вычислено с требуемой точностью EPS при заданных начальном шаге H, его минимальном значении HMIN и порядке метода IORDER; |
| IERR=66 - | когда приближенное значение решения не может быть вычислено, т.к. итерационный процесс его определения не сходится для шагов интегрирования H, больших заданного минимального значения HMIN; |
| IERR=67 - | когда требуемая точность EPS вычисления приближенного решения меньше той, которая может быть достигнута для данной задачи при тех размерах шага интегрирования, начальное значение которого задано параметром H; |
| при IERR = 65, 66, 67 интегрирование системы прекращается; при желании интегрирование можно повторить обращением к подпрограмме с новыми значениями параметров H, HMIN и IORDER; |
| IERR=68 - | когда приближенное значение решения для жесткой системы не может быть вычислено с заданной точностью; для достижения тебуемой точности следует воспользоваться версиями подпрограммы DE23E, DE25R или DE25E. |
Версии
| DE23E - | вычисление решения задачи Коши для нежесткой и жесткой систем обыкновенных дифференциальных уравнений первого порядка в конце интервала интегрирования методом Гира с расширенной (Extended) точностью. При этом параметры XN, YN, XK, HMIN, HMAX, EPS, H, Y, YPM, DELTY, RAB, YP и параметры X, Y и DY в подпрограмме F должны иметь тип Extended. |
| DE25R - |
вычисление решения задачи Коши для жесткой
системы обыкновенных дифференциальных уравнений
первого порядка в конце интервала
интегрирования методом Гира с автоматическим выбором шага.
Первый оператор подпрограммы имеет вид:
procedure DE25R(F :Proc_F_DE; FJ :Proc_F_DE; M :Integer; XN :Real;
var YN :Array of Real; XK :Real; HMIN :Real;
HMAX :Real; EPS :Real; IORDER :Integer;
IU :Integer; var H :Real; var Y :Array of Real;
var YPM :Array of Real; var DELTY :Array of Real;
var RAB :Array of Real; var YP :Array of Real;
var IERR :Integer);
Здесь: FJ - имя подпрограммы вычисления
якобиана правой части системы; первый оператор
этой подпрограммы имеет вид:procedure FJ (X :Real; var Y :Array of Real; var Z :Array of Real; M :Integer); Здесь: X, Y - значения независимой и зависимой переменных, соответственно, причем Y представляет одномерный массив длины M; вычисленное значение якобиана должно быть помещено в двумерный массив Z размера M*M, при этом частная производная от правой части I - ого уравнения по J - ой переменной Y (J) запоминается в элементе Z (I, J) (тип параметров X, Y и Z: вещественный). Остальные параметры подпрограммы DE25R имеют тот же смысл, что и одноименные параметры подпрограммы DE23R. |
| DE25E - | вычисление решения задачи Коши для жесткой системы обыкновенных дифференциальных уравнений первого порядка в конце интервала интегрирования методом Гира с расширенной (Extended) точностью. Первый оператор подпрограммы имеет тот же вид, что и в подпрограмме DE25R; при этом параметры XN, YN, XK, HMIN, HMAX, EPS, H, Y, YPM, DELTY, RAB, YP и параметры X, Y, DY и Z в подпрограммах F и FJ должны иметь тип Extended. |
Вызываемые подпрограммы
| DE21R - | выполнение одного шага численного интегрирования нежесткой и жесткой систем обыкновенных дифференциальных уравнений первого порядка методом Гира с контролем точности; вызывается при работе подпрограммы DE23R. |
| DE21E - | выполнение одного шага численного интегрирования нежесткой и жесткой систем обыкновенных дифференциальных уравнений первого порядка методом Гира с расширенной (Extended) точностью; вызывается при работе подпрограммы DE23E. |
| DE24R - | выполнение одного шага численного интегрирования жесткой системы обыкновенных дифференциальных уравнений первого порядка методом Гира с контролем точности; вызывается при работе подпрограммы DE25R. |
| DE24E - | выполнение одного шага численного интегрирования жесткой системы обыкновенных дифференциальных уравнений первого порядка методом Гира с расширенной (Extended) точностью; вызывается при работе подпрограммы DE25E. |
| UTDE12 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм DE21R, DE23R, DE24R, DE25R. |
| UTDE13 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм DE21E, DE23E, DE24E, DE25E. |
Замечания по использованию
|
B общем случае заданая точность EPS не гарантируется. При работе подпрограммы и ее версий значения параметров M, XN, YN, XK, HMIN, HMAX, EPS, ISTIFJ, IORDER, IU сохраняются. Если после работы подпрограммы нет необходимости иметь начальное значение решения YN, то параметры YN и Y при обращении к ней можно совместить. Значение HMIN должно быть много меньше среднего ожидаемого шага интегрирования, задаваемого параметром H при обращении к подпрограмме и ее версиям, т.к. интегрирование системы начинается с метода первого порядка. |
y1' = -20 y1 + y2
y2' = 19 y1 - 2 y2 , 0 ≤ x ≤ 1
y1(0) = 2 , y2(0) = 18
Собственные значения якобиевой матрицы системы
λ1 = -21 , λ2 = -1 .
Поэтому эту систему можно рассматривать как жесткую.
Unit TDE23R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FDE23R_p, DE23R_p;
function TDE23R: String;
implementation
function TDE23R: String;
var
IU,IORDER,M,ISTIFJ,IERR :Integer;
EPS,HMIN,XN,XK,HMAX,H,X :Real;
RАВ :Array [0..37] of Real;
Y :Array [0..1] of Real;
YN :Array [0..1] of Real;
DELTY :Array [0..1] of Real;
YРМ :Array [0..1] of Real;
YP :Array [0..15] of Real;
begin
Result := ''; { результат функции }
IU := 3;
EPS := 0.00001;
IORDER := 6;
HMIN := 1.E-10;
M := 2;
XN := 0.0;
YN[0] := 2.0;
YN[1] := 18.0;
ХК := 1.0;
ISTIFJ := 1;
НМАХ := 0.1;
H := 0.01;
DE23R(FDE23R,M,XN,YN,XK,HMIN,HMAX,EPS,ISTIFJ,IORDER,
IU,H,Y,YPM,DELTY,RAB,YP,IERR);
Result := Result + Format(' %20.16f %20.16f %20.16f ',
[X,Y[0],Y[1]]) + #$0D#$0A;
UtRes('TDE23R',Result); { вывод результатов в файл TDE23R.res }
exit;
end;
end.
Unit fde23r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
procedure fde23r(X :Real; var Y :Array of Real; var DY :Array of Real;
M :Integer);
implementation
procedure fde23r(X :Real; var Y :Array of Real; var DY :Array of Real;
M :Integer);
begin
DY[0] := -20.0*Y[0]+Y[1];
DY[1] := 19.0*Y[0]-2.0*Y[1];
end;
end.
Результаты:
IERR = 0
Y(1) = 3.678796482-01
Y(2) = 6.989709436