Текст подпрограммы и версий
ids7r_p.zip
Тексты тестовых примеров
tids7r_p.zip

Подпрограмма:  IDS7R (модуль IDS7R_p)

Назначение

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

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

Пусть в узлах неравномерной сетки  xK :  x1<x2<  ...<xN  заданы значения функции  y(x) :  yK = y(xK) и ее первой производной:  y'K = y'(xK), и известны значения ее второй производной в концевых точках :  y''1 = y''(x1),  y''N = y''(xN). Интерполяционный сплайн S(x)  5 - й степени на каждом из отрезков  [xK, xK+1] является многочленом  5 - й степени

     AK(x-xK)5 + BK(x-xK)4 + CK(x-xK)3 + DK(x-xK)2 + EK(x-xK) + FK ,

 где
   AK = 1/(ΔxK)4  [ 6 (ΔyK/ΔxK) - 3 (y'K + y'K+1) + ΔxK/2  (y''K+1 - y''K) ] ,

   BK = 1/(ΔxK)3 [ -15(ΔyK/ΔxK) + 8y'K + 7y'K+1 + ΔxK/2 (3y''K - 2y''K+1) ] ,

   CK = y'''K / 6 =
          = 1/(ΔxK)2  [ 10 ΔyK/ΔxK  -  6y'K - 4 y'K+1 + ΔxK/2  (y''K+1 - 3y''K) ] ,

   DK = y''K / 2 ,   EK = y'K ,   FK = yK ,
   ΔxK = xK+1 - xK ,   ΔyK = yK+1 - yK , 

а вторые производные  y''K определяются из условия непрерывности третьей производной S''' (x) сплайна S (x).

Подпрограмма IDS7R вычисляет в узлах сетки значения второй и третьей производной сплайна S (x).

Дж.Алберг, Э.Нильсон, Дж.Уолш, Теория сплайнов и ее приложения, M., Мир, 1972.

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

procedure IDS7R(N :Integer; var X :Array of Real;
                var Y :Array of Real; var Y1 :Array of Real;
                var Y2 :Array of Real; var Y3 :Array of Real);

Параметры

N - заданное число узлов сетки, N ≥ 3 (тип: целый);
            X, Y -             Y1   вещественные одномерные массивы длины N, содержащие заданные значения  xK,  yK и  y'K соответственно;
Y2 - вещественный одномерный массив длины N, в который помещаются вычисленные значения второй производной  y''K; на входе  y2 (1) = y''1,  y2 (N) = y''N;
Y3 - вещественный одномерный массив длины N, в который помещаются вычисленные значения третьей производной  y'''K.

Версии: нет

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

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

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

На сетке  xK = (K-1)*π/4 брались значения  y = sin (xK) ,  K = 1, 2, ..., 5,  y'K = cos (xK),  y''1 = -sin (x1),  y''5 = -sin (x5).

Unit tids7r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IDS7R_p;

function tids7r: String;

implementation

function tids7r: String;
var
N,K :Integer;
Y2 :Array [0..4] of Real;
Y3 :Array [0..4] of Real;
const
X :Array [0..4] of Real = ( 0.0,0.7854,1.5708,2.3562,3.1416 );
Y :Array [0..4] of Real = ( 0.0,0.7071,1.0,0.7071,0.0 );
Y1 :Array [0..4] of Real = ( 1.0,0.7071,0.0,-0.7071,-1.0 );
label
_2;
begin
Result := '';  { результат функции }
Y2[0] := 0.0;
Y2[4] := 0.0;
N := 5;
IDS7R(N,X,Y,Y1,Y2,Y3);
for K:=1 to N do
 begin
_2:
  Result := Result + Format(' %20.16f  %20.16f  %20.16f %20.16f ',
 [Y[K-1],Y1[K-1],Y2[K-1],Y3[K-1]]) + #$0D#$0A;
 end;
UtRes('tids7r',Result);  { вывод результатов в файл tids7r.res }
exit;
end;

end.


Результаты:

       Y2  =  ( 0.,  -7074,  -1.0004,  -0.7074,  0. )

       Y3  =  ( -1.002,  -0.7089,  -0.00002,  0.7090,  1.003 )