Текст подпрограммы и версий ( Фортран ) de05r.zip , de05d.zip |
Тексты тестовых примеров ( Фортран ) tde05r.zip , tde05d.zip |
Текст подпрограммы и версий ( Си ) de05r_c.zip , de05d_c.zip |
Тексты тестовых примеров ( Си ) tde05r_c.zip , tde05d_c.zip |
Текст подпрограммы и версий ( Паскаль ) de05r_p.zip , de05e_p.zip |
Тексты тестовых примеров ( Паскаль ) tde05r_p.zip , tde05e_p.zip |
Вычисление решения задачи Коши для линейной устойчивой системы обыкновенных дифференциальных уравнений первого порядка с большой константой Липшица в конце интервала интегрирования методом Лоусона.
Решается задача Коши для линейной системы M обыкновенных дифференциальных уравнений первого порядка с переменными коэффициентами
(1) Y ' (X) = A(X) * Y(X) + φ(X) , Y = ( y1,..., yM ) , A(X) = ( ai j(X) ) , i, j = 1, ..., M , φ(X) = ( φ1(X), ... , φM(X) )
с начальными условиями, заданными в точке XN:
Y(XN) = YN , YN = ( y1 0,..., yM 0 ) .
Предполагается, что среди характеристических корней матрицы A(X) имеются большие по модулю корни, а функция φ (x) является достаточно малой. Решение вычисляется в одной точке XK, которая является концом интервала интегрирования. Для интегрирования системы применяется метод Лоусона.
Метод Лоусона является одношаговым методом и заключается в следующем. Допустим, что искомое решение системы (1) уже вычислено в некоторой точке x = xn интервала интегрирования, т.е. известно yn ≈ y (xn). Для отыскания решения Y(xn + 1) = Y(xn + H) в следующем узле xn + 1 = xn + H выполняются такие действия. Исходная система уравнений с помощью замены искомой функции Y (x) на xn ≤ x ≤ xn + H по формуле
Y(x) = exp [ ( x - xn ) A0 ] Z(x) ,
где A0 - некоторая постоянная матрица, преобразуется в систему уравнений относительно новой неизвестной функции Z (X):
(2) Z ' (x) = A1(x) Z(x) + φ1(x) = exp [ - ( x - xn ) A0 ] { A(x) - A0 } * * exp [ ( x - xn ) A0 ] Z(x) + exp [ ( - ( x - xn ) A0 ] φ(x) xn ≤ x ≤ xn + H
Данное преобразование выполняется самой подпрограммой. В качестве матрицы A0 подпрограмма выбирает матрицу A0 = A (xn + H /2). Если шаг H достаточно мал, то преобразование позволяет уменьшить характеристические корни матрицы A1 (x) по сравнению с характеристическими корнями исходной матрицы A (x). Это приводит к уменьшению константы Липшица системы (2) по сравнению с константой Липшица системы (1). Для решения системы (2) применяются формулы классического метода Рунге - Кутта четвертого порядка точности, причем одновременно с решением (2) производится обратное преобразование от функции Z (x) к функции Y (x).
Все компоненты решения вычисляются с контролем точности по мере погрешности, который заключается в следующем. Если некоторая компонента приближенного решения по абсолютной величине не меньше некоторой наперед заданной константы P, то контроль точности для этой компоненты ведется по относительной погрешности, иначе - по абсолютной. Абсолютная погрешность приближенного решения оценивается по правилу Рунге.
J.Douglas Louson. Generalized Runge - Kutta processes for stable systems with large Lipshitz constants, SIAM Journal on Numerical Analisys. Vol 4, No.3, 1967.
SUBROUTINE DE05R (FA, FI, M, XN, YN, XK, HMIN, EPS, P, H, Y, R, IERR)
Параметры
FA - |
подпрограмма вычисления матрицы системы A (X) в
точке X. Первый оператор подпрограммы должен иметь вид: SUBROUTINE FA (A, X, M). Здесь A - двумерный массив размера M*M, в котором помещается матрица системы, вычисленная при значении аргумента X (тип параметров A, X: вещественный); |
FI - |
подпрограмма вычисления неоднородности правой части системы
φ (X) в любой точке X. Первый
оператор подпрограммы должен иметь вид: SUBROUTINE FI (G, X, M). Здесь G - одномерный массив длины M, в который помещается неоднородность правой части системы, вычисленная при значении аргумента X (тип параметров G, X: вещественный); |
M - | количество уравнений в системе (тип: целый); |
XN, YN - | начальные значения аргумента и решения; в случае системы уравнений (т.е. M ≠ 1) YN представляет одномерный массив длины M (тип: вещественный); |
XK - | значение аргумента, при котором требуется вычислить решение задачи Коши (конец интервала интегрирования); XK может быть больше, меньше или равно XN (тип: вещественный); |
HMIN - | минимальное значение абсолютной величины шага, которое разрешается использовать при интегрировании данной системы уравнений (тип: вещественный); |
EPS - | допустимая мера погрешности, с которой требуется вычислить все компоненты решения (тип: вещественный); |
P - | граница перехода, используемая при оценке меры погрешности решения (тип: вещественный); |
H - | вещественная переменная, содержащая начальное значение шага интегрирования; может задаваться с учетом направления интегрирования, т.е. положительным, если XN < XK, отрицательным, если XN > XK, или без всякого учета в виде абсолютной величины; на выходе из подпрограммы содержит значение последнего шага интегрирования; |
Y - | искомое решение задачи Коши, вычисленное подпрограммой при значении аргумента XK; для системы уравнений (когда M ≠ 1) задается одномерным массивом длины M. В случае совпадения значений параметров XN и XK значение Y полагается равным начальному значению YN (тип: вещественный); |
R - | одномерный вещественный рабочий массив длины (5*M*M + 8*M + 1); |
IERR - | целая переменная, значение которой в результате работы подпрограммы полагается равным 65, если какая - нибудь компонента решения не может быть вычислена с требуемой точностью EPS; в этом случае интегрирование системы прекращается; при желании интегрирование системы можно повторить обращением к подпрограмме с новыми значениями параметров HMIN и H. |
Версии
DE05D - | вычисление решения задачи Коши для линейной устойчивой системы обыкновенных дифференциальных уравнений первого порядка с большой константой Липшица в конце интервала интегрирования методом Лоусона с удвоенным числом значащих цифр. При этом параметры XN, YN, XK, HMIN, EPS, P, H, Y, R и параметры A, G, X в подпрограммах FA и FI должны иметь тип DOUBLE PRECISION. |
Вызываемые подпрограммы
DE04R - DE04D | выполнение одного шага интегрирования линейной системы обыкновенных дифференциальных уравнений первого порядка с большой константой Липшица методом Лоусона. |
UTDE20 - UTDE21 | подпрограммы выдачи диагностических сообщений. |
Подпрограммы DE04R, UTDE20 вызываются при работе подпрограммы DE05R, а подпрограммы DE04D, UTDE21 - при работе DE05D. |
Замечания по использованию
Данная подпрограмма предназначена для интегрирования линейных систем, имеющих малую неоднородность φ (x). В общем случае заданная точность не гарантируется. При работе подпрограммы значения параметров M, XN, YN, XK, HMIN, EPS, P сохраняются. При работе подпрограмм FA и FI значения параметров X и M не должны изменяться. Если после работы подпрограммы нет необходимости иметь начальное значение решения YN, то параметры YN и Y при обращении к ней можно совместить. При этом следует иметь в виду, что в случае аварийного выхода из подпрограммы, т.е. со значением IERR = 65, значение параметра YN будет испорчено. Подпрограммы DE05R и DE05D предназначены также для решения задачи Коши для жестких дифференциальных уравнений (1). |
1) y1' = - ( 2 + x ) y1 /( 1 + x ) + 20 x y2 , y1(0) = 2 , y2' = -20 x y1 + ( 2 + x ) y2 /( 1 + x ) , y2(0) = 18 0 ≤ x ≤ 6
Приводятся подпрограммы вычисления матрицы системы и неоднородной части, фрагмент вызывающей программы и результаты счета.
SUBROUTINE FA (A, X, M) DIMENSION A(2, 2) A(1, 1) = -(2. + X)/(1. + X) A(1, 2) = 20.*X A(2, 1) = -A(1, 2) A(2, 2) = A(1, 1) RETURN END SUBROUTINE FI (R1, X, M) DIMENSION R1(2) R1(1) = 0. R1(2) = 0. RETURN END DIMENSION Y(2), YN(2), R(37) EXTERNAL FA, FI M = 2 XN = 0. YN(1) = 2. YN(2) = 18. HMIN = 1.E-10 EPS = 1.E-10 P = 100. XK = 6. H = 0.01 CALL DE05R (FA, FI, M, XN, YN, XK, HMIN, EPS, P, H, Y, R, IERR) END Результаты: Y(1) Y(2) H 5.911150077338-03 -2.487346326713-03 1.600000000001-01 IERR = 0 2) y1' = - 20 x y1 + ( (1 + 2x)/(1 + 3x) ) y2 + ( 1 / 10 ) x2 , y1(0) = 22 y2' = 19 x y1 + ( (2 + x)/(1 + x) ) y2 - ( 9 / 10 ) x2 , y2(0) = 18 0 ≤ x ≤ 3
Приводятся подпрограммы вычисления матрицы системы и неоднородной части, фрагмент вызывающей программы и результаты счета.
SUBROUTINE FA (A, X, M) DIMENSION A(2, 2) A(1, 1) = -20.*X A(1, 2) = (1. + 2.*X)/(1. + 3.*X) A(2, 1) = 19.*X A(2, 2) = -(2. + X)/(1. + X) RETURN END SUBROUTINE FI (R1, X, M) DIMENSION R1(2) R1(1) = X*X/10. R1(2) = -9.*R1(1) RETURN END DIMENSION Y(2), YN(2), R(37) EXTERNAL FA, FI M = 2 XN = 0. YN(1) = 22. YN(2) = 18. HMIN = 1.E-10 EPS = 1.E-10 P = 100. XK = 3. H = 0.01 CALL DE05R (FA, FI, M, XN, YN, XK, HMIN, EPS, P, H, Y, R, IERR) END Результаты: Y(1) Y(2) H 2.134285516536-02 4.227925779755-01 2.500000000001-03 IERR = 0