Текст подпрограммы и версий ( Фортран )
id10r.zip , id10d.zip
Тексты тестовых примеров ( Фортран )
tid10r.zip , tid10d.zip
Текст подпрограммы и версий ( Си )
id10r_c.zip , id10d_c.zip
Тексты тестовых примеров ( Си )
tid10r_c.zip , tid10d_c.zip
Текст подпрограммы и версий ( Паскаль )
id10r_p.zip , id10e_p.zip
Тексты тестовых примеров ( Паскаль )
tid10r_p.zip , tid10e_p.zip

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

Назначение

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

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

ID10R вычисляет либо первые, либо вторые производные таблично - заданной функции на равномерной сетке с шагом  h с использованием центральных разностей по формулам Стирлинга.

И.С.Березин, Н.П.Жидков, Методы вычислений, т.1, M., 1962.

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

    SUBROUTINE  ID10R (H, Y, MU, NL, NS, NU, NO, LO, NTH, T, A, E,
                                         LA, IERR) 

Параметры

H - заданный шаг равномерной сетки (тип: вещественный);
Y - вещественный двумерный массив, в котоpом задается таблица значений функции и центральных разностей (см. описание параметра LO); размерность массива Y должна быть при LO = 0 pавна MU на (NO + 1), при LO = 1 - MU на [(NO +  3)/2], при LO = 2 - MU на [(NO + 4)/2];
MU - заданное число стpок в описании размерности двумерного массива Y в программе, вызывающей данную программу (тип: целый);
         NL, NS -             NU   определяют расположение в массиве Y заданных значений функций, а именно, значения функции  y0, y1, y2, ..., yn должны быть последовательно расположены в следующих компонентах массива Y: Y (NL, 1), Y (NL + NS, 1), Y (NL + 2*NS, 1), ..., Y (NU, 1); расположение в массиве Y центральных разностей определяется ниже при описании параметра LO (тип: целый);
NO - заданный максимальный порядок разностей, которые используются в конечно - разностных аппроксимациях производных (тип: целый);
LO - определяет порядок расположения заданных центральных разностей в массиве Y (тип: целый); при этом если:
LO = 0 - то δ 2j - 1yi - 1/2 должна быть расположена в элементе массива Y (NL + I* NS - [NS/2], 2*J), а δ 2jyi - в элементе массива Y (NL + I*NS, 2*J + 1);
LO = 1 - то δ 2j - 1yi - 1/2 должна быть расположена в элементе массива Y (NL + I* NS - [NS/2], J + 1), а δ 2jyi - в элементе массива Y (NL + I*NS, J + 1);
LO = 2 - то δ 2j - 1yi - 1/2 должна быть расположена в элементе массива Y(NL + I* NS - [NS/2], J + 1), а δ 2jyi - в элементе массива Y (NL + I*NS, J + 2);
NHT - полагается равным 1, если надо вычислить первую производную, или 2, если - вторую;
T - заданная точность вычисления производных (тип: вещественный);
A - вещественный вектоp длины NU, в котоpом помещаются вычисленные значения первой или второй производной последовательно в следующем порядке A (NL), A (NL + NS), A (NL + 2*NS), ... ,A (NU);
E - вещественный вектоp длины NU, в котоpом помещаются последние члены ряда, использованные в конечно - разностной аппроксимации, в следующем порядке E (NL), E (NL + NS), E (NL + 2*NS),...,E (NU);
LA - целая переменная, значение которой полагается равным наивысшему порядку разностей, фактически использованных в вычислениях;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR= 1 - когда для достижения заданной точности требуются разности более высокого порядка, чем они заданы при обращении к подпрограмме; производные вычисляются, хотя требуемая точность не достигнута;

IERR= 2 - когда разности порядка NO pасходятся; производные вычисляются, хотя требуемая точность не достигнута;
IERR= 3 - когда разности порядка LA (LA < NO) расходятся; производные вычисляются, хотя требуемая точность не достигнута;
IERR=65 - когда значение NTH ≠ 1 или ≠ 2;
IERR=66 - когда неправильно задан порядок разностей; порядок разностей должен быть по крайней меpе, не ниже порядка вычисляемой производной;
IERR=67 - когда не заданы разности нечетного порядка и требуется вычислить первую производную;
IERR=68 - когда не заданы разности четного порядка и требуется вычислить вторую производную.

Версии

ID10D - вычисление первой или второй производной вещественной таблично - заданной функции на pавномеpной сетке с использованием центральных разностей с повышенной точностью.

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

UTID10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ID10R.
UTID11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ID10D.

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

  1. 

Для ID10D параметры H, Y, T, A и E должны иметь тип DOUBLE PRECISION.

  2. 

Значение параметра MU должно быть больше или pавно значению параметра NU.

  3. 

Формула вычисления первой производной использует разности только нечетных порядков. Поэтому можно задать LO = 2 и NS = 1.

  4. 

Формула вычисления второй производной использует разности только четных порядков. Поэтому можно задать LO = 1 и NS = 1.

  5. 

Заданная точность считается достигнутой, если следующий член ряда конечно - разностной аппроксимации меньше или pавен T.

  6. 

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

  7.  Для вычисления соответствующего числа центральных разностей рекомендуется использовать подпрограмму I I10R.

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

       DIMENSION  Y(10, 5), A(10), E(10)
       H = 0.25
       XN = 2.
       X = XN - H
       NTH = 1
       T = 1.E-4
       DO 1  I = 1, 10
       X = X + H
       Y(I, 1) = EXP(-X)
    1 CONTINUE 
       MU = 10
       NL = 1
       NS = 1
       NU = 10
       NO = 6
       LO = 2
       CALL  I I10R (MU, NL, NS, NU, NO, LO, Y)
       CALL  ID10R (H, Y, MU, NL, NS, NU, NO, LO, NTH, T, A, E,
      *                       LA, IERR)

Результат:

         X                   A                              E
       2.        -6.207939493-02      0.000000000+00
       2.25     -1.081979987-01      2.160001819-05
       2.50     -8.205740855-02      1.682211116-05
       2.75     -6.392797405-02     -8.498944868-06
       3.00     -4.978715625-02     -6.618985062-06
       3.25     -3.877427628-02     -5.154870644-06
       3.50     -3.019743673-02     -4.014617251-06
       3.75     -2.343970501-02      7.495577201-05
       4.00     -1.832136756-02      7.671346584-05
       4.25     -8.102809959-03      0.000000000+00