Текст подпрограммы и версий
ids8r_p.zip , ids8e_p.zip
Тексты тестовых примеров
tids8r_p.zip , tids8e_p.zip

Подпрограмма:  IDS8R (модуль IDS8R_p)

Назначение

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

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

Пусть заданы узлы неравномерной сетки  x1, x2, ..., xN, упорядоченные по возрастанию:  x1 < x2 < ...< xN и значения y1, y2, ..., yN функции  f (x) в узлах этой сетки. Пусть также известны значения YP1 и YPN первой производной функции  f (x) в концевых узлах  x1 и  xN соответственно.

Если YP1 и YPN меньше  (XMAX) 1/2, где XMAX - наибольшее положительное вещественное число, представимое на используемой машине, то подпрограмма IDS8R вычисляет вторые производные функции  f (x) в узлах заданной сетки методом кубических сплайнов. Если же YP1 и/или YPN больше или равны  (XMAX) 1/2, то подпрограмма IDS8R при вычислении вторых производных устанавливает соответствующее краевое условие для натурального кубического сплайна (нулевое значение второй производной в соответствующем концевом узле).

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.

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

procedure IDS8R(var X :Array of Real; var Y :Array of Real;
                N :Integer; YP1 :Real; YPN :Real;
                var Y2 :Array of Real; var U :Array of Real);

Параметры

X - вещественный вектор длины N, содержащий узлы заданной неравномерной сетки  x1, x2, ..., xN, упорядоченные по возрастанию;
Y - вещественный вектор длины N, содержащий значения  y1, y2, ...,yN функции  f (x) в узлах заданной сетки;
N - количество узлов сетки (тип: целый);
YP1 - заданное значение первой производной функции  f (x) в узле  x1 (тип: вещественный);
YPN - заданное значение первой производной функции  f (x) в узле  xN (тип: вещественный);
Y2 - вещественный вектор длины N, содержащий вычисленные вторые производные функции  f (x) в узлах заданной сетки;
U - вещественный вектор длины N, используемый в подпрограмме в качестве рабочего.

Версии

IDS8E - вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки в режиме расширенной (Extended) точности. При этом параметры X, Y, YP1, YP2 и Y2 должны иметь тип Extended.

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

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

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

Unit tids8r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IDS8R_p;

function tids8r: String;

implementation

function tids8r: String;
var
N,I,_i :Integer;
R,YP1,YPN :Real;
X :Array [0..4] of Real;
Y :Array [0..4] of Real;
Y2 :Array [0..4] of Real;
U :Array [0..4] of Real;
label
_1;
begin
Result := '';  { результат функции }
R := 0.0;
N := 5;
for I:=1 to N do
 begin
  X[I-1] := R;
  Y[I-1] := Sin(X[I-1]);
_1:
  R := R+0.2;
 end;
YP1 := Cos(X[0]);
YPN := Cos(X[N-1]);
IDS8R(X,Y,N,YP1,YPN,Y2,U);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[Y2[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tids8r',Result);  { вывод результатов в файл tids8r.res }
exit;
end;

end.
      

Результаты:

       Y2  =  ( -0.15369E+00,  -0.19929E+00,  -0.39072E+00, 
                    -0.56655E+00,  -0.71964E+00 )