Текст подпрограммы и версий
ii10r_p.zip , ii10e_p.zip
Тексты тестовых примеров
tii10r_p.zip , tii10e_p.zip

Подпрограмма:  I I10R (модуль I10R_p)

Назначение

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

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

Пусть мы имеем таблицу значений вещественной функции  y в узлах некоторой равномерной сетки:

        y0 , y1 , y2 , y3 , y4 , ... , yn . 

Тогда центральные разности первого порядка определяются следующими соотношениями:

     δ1 y1/2 = y1 - y0 ,     δ1 y3/2 = y2 - y1 ,     δ1 y5/2 = y3 - y2 , ... 

Центральные разности второго порядка выражаются через центральные разности первого порядка следующим образом:

    δ 2 y1 = δ1 y3/2 - δ1 y1/2 ,    δ 2 y2 = δ1 y5/2 - δ1 y3/2 , ... 

Формулы общего вида для вычисления центральных разностей имеют вид:

   δ 2j + 1 yi + 1/2 = δ 2j yi + 1 - δ 2j yi     и
   δ 2j yi = δ 2j - 1 yi + 1/2 - δ 2j - 1 yi - 1/2 . 

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

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

procedure II10R(MU :Integer; NL :Integer; NS :Integer; NU :Integer;
                NO :Integer; LO :Integer; var Y :Array of Real);

Параметры

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) (тип: целый);
NO - заданный максимальный порядок вычисляемых разностей (тип: целый);
LO - определяет порядок расположения вычисленных разностей в массиве Y (тип: целый); при этом если:
LO=0 - то  δ 2j - 1 yi - 1/2 будет расположена в элементе массива  Y (NL + I*NS - [NS/2], 2*J), а  δ 2j yi - в элементе массива  Y (NL + I*NS, 2*J + 1);
LO=1 - то  δ 2j - 1 yi - 1/2 будет расположена в элементе массива  Y (NL + I*NS - [NS/2], J + 1), а  δ 2j yi - в элементе массива  Y (NL + I*NS, J + 1);
LO=2 - то  δ 2j - 1 yi - 1/2 будет расположена в элементе массива  Y (NL + I*NS - [NS/2], J + 1), а  δ 2j yi - в элементе массива  Y (NL + I*NS, J + 2);
Y - вещественный двумерный массив, в котоpом задается таблица значений функции и помещаются вычисленные разности; длина массива  Y должна быть при  LO = 0 pавна  MU * (NO + 1), при  LO = 1 - MU * [(NO + 3)/2], при  LO = 2 - MU * [(NO + 4)/2].

Версии

I I10E - вычисление центральных разностей таблично заданной функции на равномерной сетке с расширенной (Extended) точностью.

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

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

  1. 

Для I I10E параметр Y должен иметь тип Extended.

  2. 

Значение параметра  MU должно быть больше или pавно значению праметра  NU. Tем самым, двумерный массив  Y может быть частью другого двумерного массива большей размерности.

  3. 

Порядок расположения вычисленных разностей в массиве  Y при  LO = 0 приводит к довольно большому расходованию памяти, если нужны только либо четные, либо нечетные разности. Поэтому, если нужны только четные разности, следует положить  LO = 1 и  NS = 1. Для получения же только нечетных разностей надо взять  LO = 2 и  NS = 1 .

  4.  Значение  NS всегда дожно быть больше или pавно 1 .

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

Unit TII10R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, II10R_p;

function TII10R: String;

implementation

function TII10R: String;
var
MU,NL,NS,NU,NO,LO,I,J :Integer;
Y :Array [0..8] of Real;
begin
Result := '';  { результат функции }
{ прототип оператора DАТА на FORTRANе  }
Y[0] := 1.353352832E-01;
Y[1] := 1.053992246E-01;
Y[2] := 8.208499862E-01;
Y[3] := 0.0;
Y[4] := 0.0;
Y[5] := 0.0;
Y[6] := 0.0;
Y[7] := 0.0;
Y[8] := 0.0;
MU := 3;
NL := 1;
NS := 1;
NU := 3;
NO := 2;
LO := 0;
II10R(MU,NL,NS,NU,NO,LO,Y);
Result := Result + #$0D#$0A;
for J:=1 to 3 do
 begin
  for I:=1 to 3 do
   begin
    Result := Result + Format('%20.16f ',[Y[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
UtRes('TII10R',Result);  { вывод результатов в файл TII10R.res }
exit;
end;

end.

Результаты:

   а) значения функции:
      Y(1, 1)  =   1.353352832E-01 ,     Y(2, 1)  =   1.053992246E-01 ,
      Y(3, 1)  =   8.208499862E-01 ;

   б) первые разности:
      Y(1, 2)  =   0. ,     Y(2, 2)  =  -2.993605860E-02 ,
      Y(3, 2)  =   7.154507616E-01 ;

   в) вторые разности:
      Y(1, 3)  =  0. ,      Y(2, 3)  =   7.453868202E-01 ,     Y(3, 3)  =  0.