Текст подпрограммы и версий
iis8r_p.zip , iis8e_p.zip
Тексты тестовых примеров
tiis8r_p.zip , tiis8e_p.zip

Подпрограмма:  IIS8R (модуль IIS8R_p)

Назначение

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

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

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

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

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

procedure IIS8R(var XA :Array of Real; var YA :Array of Real;
                var Y2A :Array of Real; N :Integer; X :Real;
                var Y :Real; var IERR :Integer);

Параметры

XA - вещественный вектор длины N, содержащий узлы заданной сетки  x1, x2, ..., xN, упорядоченные по возрастанию;
YA - вещественный вектор длины N, содержащий значения  y1, y2, ..., yN интерполируемой функции в узлах заданной сетки;
Y2A - вещественный вектор длины N, содержащий значения второй производной интерполируемой функции в узлах заданной сетки;
N - количество узлов сетки (тип: целый);
X - заданная точка, в которой ищется значение интерполируемой функции (тип: вещественный);
Y - вещественная переменная, содержащая вычисленное значение интерполируемой функции в точке X;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом
IERR=65 - когда по крайней мере два узла сетки совпадают.

Версии

I IS8E - вычисление значения в заданной точке интерполируемой табличной функции,определенной в узлах неравномерной сетки, упорядоченной по возрастанию, по известным значениям ее второй производной в узлах этой сетки методом кубических сплайнов в режиме расширенной (Extended) точности. При этом параметры XA, YA, Y2A, X, и Y должны иметь тип Extended.

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

UTI I10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы I IS8R.
UTI I11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы I IS8E.

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

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

Unit TIIS8R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IIS8R_p;

function TIIS8R: String;

implementation

function TIIS8R: String;
var
N,I,IERR :Integer;
R,X,Y :Real;
ХА :Array [0..4] of Real;
YA :Array [0..4] of Real;
Y2A :Array [0..4] of Real;
label
_1;
begin
Result := '';  { результат функции }
N := 5;
R := 0.0;
for I:=1 to N do
 begin
  XA[I-1] := R;
  YA[I-1] := Sin(XA[I-1]);
  Y2A[I-1] := -YA[I-1];
_1:
  R := R+0.2;
 end;
X := 0.5;
IIS8R(XA,YA,Y2A,N,X,Y,IERR);
Result := Result + Format(' %20.16f %20.16f ',[X,Y]) + #$0D#$0A;
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('TIIS8R',Result);  { вывод результатов в файл TIIS8R.res }
exit;
end;

end.
      

Результаты:
    
             Y  =  0.47942 
       IERR  =  0