Текст подпрограммы и версий ( Фортран )
de50r.zip , de50d.zip
Тексты тестовых примеров ( Фортран )
tde50r.zip , tde50d.zip
Текст подпрограммы и версий ( Си )
de50r_c.zip , de50d_c.zip
Тексты тестовых примеров ( Си )
tde50r_c.zip , tde50d_c.zip
Текст подпрограммы и версий ( Паскаль )
de50r_p.zip , de50e_p.zip
Тексты тестовых примеров ( Паскаль )
tde50r_p.zip , tde50e_p.zip

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

Назначение

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

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

Решается двухточечная краевая задача для линейного дифференциального уравнения второго порядка

(1)       y '' + f(x) y ' + g(x) y = r(x)  ,      xN≤ x ≤ xK 

c заданными на концах отрезка интегрирования  [ xN, xК ] граничными условиями вида

(2)       aN y '(xN) + bN y(xN) = cN   ,      a2N + b2N ≠ 0

(3)       aK y '(xK) + bK y(xK) = cK   ,      a2K + b2K ≠ 0 

- методом конечных разностей.

Решение вычисляется на заданной на отрезке  [ xN, xK ] равномерной сетке с заданной абсолютной погрешностью  EPS.

L.Fox, Proc. Roy. Soc. A 190, 31 - 59, 1947.

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

    SUBROUTINE  DE50R (NX, XN, XK, CN, CK, F, G, R, EPS,
                                            IMAX, Y, IK, DELTY, RAB, IERR) 

Параметры

NX - число узлов равномерной сетки на отрезке [ xN, xK ], (включая  xN и  xK), в которых требуется вычислить решение задачи. Предполагается, что узлы расположены в порядке возрастания:  xN = x1 < x2< ... < xNX = xK;   NX ≥ 3 (тип: целый);
XN, XK - концы отрезка интегрирования, в которых заданы граничные условия (2) и (3), соответственно;   XN < XK (тип: вещественный);
CN, CK - одномерные вещественные массивы длины 3, в которых помещаются коэффициенты граничных условий (2) и (3), соответственно, т.е.  CN (1) = aN, CN (2) = bN,  CN (3) = cN,  CK (1) = aK,  CK (2) = bK,  CK (3) = cK. Коэффициенты граничных условий должны удовлетворять условию
a2N + b2N ≠ 0   и   a2K + b2K ≠ 0;
F, G, R - одномерные вещественные масивы длины  NX, в которых перед обращением к подпрограмме должны быть помещены значения коэффициентов уравнения (1), вычисленные в узлах равномерной сетки, на которой требуется получить решение краевой задачи, а именно:
      F (1) = f ( x1),   F (2) = f ( x2 ) ,...,  F (NX) = f ( xNX );
      G (1) = g ( x1), G (2) = g ( x2 ) ,..., G (NX) = g ( xNX );
      R (1) = r ( x1),   R (2) = r ( x2 ) ,...,  R (NX) = r ( xNX );  
EPS - абсолютная погрешность, с которой требуется вычислить решение краевой задачи (тип: вещественный);
IMAX - максимальное допустимое число разностных итераций, котоpое разрешается использовать в процессе работы подпрограммы. Если эти итерации не нужны, то параметр  IMAX при обращении к подпрограмме задается равным  0; в этом случае значение параметра  EPS при работе подпрограммы не используется (тип: целый);
Y - одномерный вещественный массив длины  NX, в котоpом в результате работы подпрограммы получаются приближеннные значения решения краевой задачи, вычисленные на сетке (эти значения помещаются в  Y в любом случае, даже и тогда, когда они не могут быть вычислены с требуемой точностью);
IK - число разностных итераций, использованных в действительности подпрограммой для достижения требуемой точности  EPS решения. B случае, когда данная точность не может быть достигнута за  IMAX итераций, значение параметра  IK в результате работы подпрограммы полагается равным  - 1. Если  IMAX = 0, то и значение  IK в результате выполнения программы тоже полагается равным  0 (тип: целый);
DELTY - одномерный вещественный массив длины  NX, значение которого в результате работы подпрограммы полагается равным разности между начальным приближением решения и значением его последней итерации, вычисленной во всех  NX узлах сетки. B случае  IMAX = 0 все элементы массива  DELTY полагаются равными нулю;
RAB - одномерный вещественный рабочий массив длины  8 * NX;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом:
IERR=65 - если в граничном условии (2) коэффициенты  aN = bN = 0;
IERR=66 - если в граничном условии (3) коэффициенты  aK = bK = 0;
IERR = 1 - если приближенное решение задачи, вычисленное за  IMAX итераций, не достигает требуемой точности  EPS;
  В каждом из этих случаев решение задачи прекращается. При  IERR = 1 интегрирование можно повторить обращением к подпрограмме с новыми значениями параметров  NX, F, G, R или  IMAX.

Версии

DE50D - вычисление решения двухточечной краевой задачи для линейного дифференциального уравнения второго порядка методом конечных разностей с повышенной точностью. При этом параметры  XN, XK, CN, CK, F, G, R, EPS, Y, DELTY, RAB должны иметь тип DOUBLE PRECISION.

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

AS09R - вычисление решения систем линейных алгебраических уравнений с ленточной матрицей.
AS09D - вычисление решения систем линейных алгебраических уравнений с ленточной матрицей с двойной точностью.
I I10R - подпрограмма вычисления центральных разностей таблично заданной функции.
I I10D - подпрограмма вычисления центральных разностей таблично заданной функции с двойной точностью.
  Подпрограммы AS09R и I I10R вызываются подпрограммой DE50R, а подпрограммы AS09D и I I10D - подпрограммой DE50D.
UTDE10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы DE50R.
UTDE11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы DE50D.

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

 

При задании значений коэффициентов уравнения в узлах равномерной сетки последняя должна быть достаточно густой для того, чтобы обеспечить сходимость метода конечных разностей.

В общем случае заданная точность  EPS приближенного pешения не гарантируется. Если для двух последовательных итераций  Yi ( j ) и  Yi ( j - 1 ) разность ei ( j ) = Yi ( j ) - Yi ( j - 1 ) удовлетворяет критерию

      | ei( j ) | ≤ EPS    для     i = 1, ..., NX   ,  

то  yi( j ) принимается в качестве приближенного решения краевой задачи. Если же после выполнения  IMAX итераций точность  EPS не достигается, то, тем не менее, значение приближенного решения, полученное на последней итерации, помещается в массив  Y. B этом случае параметр  IERR = 1, а  IK = - 1.

Значения параметров  NX, XN, XK, CN, CK, F, G, R, EPS, IMAX сохраняются.

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

Решается краевая задача:

     y '' + x2 y ' + x y = 10e- x*x ( 2x2 - 1 ) ( 2 - x )   ,   - 1≤ x ≤ 1 
     y ' - 2y = 0         при   x = - 1
     y ' + 2y = 0         при   x =  1

   (точное решение задачи  y (x) = 10e- x*x )

      DIMENSION  CN(3), CK(3), F(200), G(200), R(200), YX(200), 
     *                        DELTY(200), RAB(1600)
      XN = - 1.
      XK = 1.
      NX = 200
      CN(1) = 1.
      CN(2) = - 2.
      CN(3) = 0.
      CK(1) = 1.
      CK(2) = 2.
      CK(3) = 0.
      EPS = 0.00001
      IMAX = 4
      N = NX - 1
      H = (XK - XN) / N
      X = XN - H
      DO 1  I = 1, NX
      X = X + H
      F(I) = X**2
      G(I) = X
      R(I) = 10. * EXP(- X**2) * (2. * X**2 - 1.) * (2. - X)
   1 CONTINUE
      CALL  DE50R (NX, XN, XK, CN, CK, F, G, R, EPS, IMAX, YX,
     *                         IK, DELTY, RAB, IERR)

Результаты:   (приводятся только для первых 10 узлов)

      YX(1)   =  3.678799304
      YX(2)   =  3.753113958
      YX(3)   =  3.828156408
      YX(4)   =  3.903910587
      YX(5)   =  3.980359671
      YX(6)   =  4.057486083
      YX(7)   =  4.135271487
      YX(8)   =  4.213696790
      YX(9)   =  4.292742144
      YX(10) =  4.372386948

      IK  =  2
      IERR  =  0