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

Подпрограмма:  IIS7R (модуль IIS7R_p)

Назначение

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

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

Вычисляются значения натурального бикубического сплайна  S (x, y), соответствующего двумерной сетке {x i, yi} и интерполирующего заданные значения табличной функции  f i j = f (x i, yj),   i = 1, 2, ..., NX,  j = 1, 2, ..., NY, в заданной точке  (x l, yl) элементарного прямоугольника

 R = [x lx, x lx + 1] * [yly, yly + 1]   по формуле :
                         4       4            
     S (x l, yl)  =  ∑     ∑   CRm n ( x l - x lx )m -1 ( yl - yly )n - 1 ;
                       m = 1  n = 1
         1 ≤ lx ≤ NX  ,   1 ≤ ly ≤ NY  , 

где  lx, ly - заданные индексы, а  CRm n,   n, m = 1, 2, 3, 4 - заданные коэффициенты, определяющие натуральный бикубический сплайн в этом прямоугольнике.

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

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

procedure IIS7R(var X :Array of Real; NX :Integer;
                var Y :Array of Real; NY :Integer; LX :Integer;
                LY :Integer; var C :Array of Real; XL :Real; YL :Real;
                var FL :Real; var IERR :Integer);

Параметры

X - вещественный вектоp длины  NX, содержащий заданные значения узлов одномерной сетки по оси  x и упорядоченный так, что  X (1) < X (2) < ... < X (NX);
NX - заданное число узлов одномерной сетки по оси  x,   NX ≥ 2 (тип: целый);
Y - вещественный вектоp длины  NY, содержащий заданные значения узлов одномерной сетки по оси  Y и упорядоченный так, что  Y (1) < Y (2) < ... < Y (NY);
NY - заданное число узлов одномерной сетки по оси  y,   NY ≥ 2 (тип: целый);
LX - заданное число, определяющее элементарный прямоугольник  R по оси  x, 1 ≤ LX < NX (тип: целый);
LY - заданное число, определяющее элементарный прямоугольник  R по оси  y, 1 ≤ LY < NY (тип: целый);
C - вещественный двумерный массив размера 4 * 4,  содержащий  заданные  в  элементарном  прямоугольнике  R = [x lx, x lx + 1] * [yly, yly + 1]  коэффициенты сплайна;
XL - заданная абсцисса точки, в которой вычисляется значение интерполяционного натурального бикубического сплайна,  X (LX) ≤ XL ≤ X (LX + 1) (тип: вещественный);
YL - заданная ордината точки, в которой вычисляется значение интерполяционного натурального бикубибического сплайна,  Y (LY) ≤ YL ≤ Y (LY + 1) (тип: вещественный);
FL - вычисленное значение интерполяционного натурального бикубического сплайна в точке  (XL, YL) (тип: вещественный);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR= 1 - когда абсцисса  XL заданной точки  (XL, YL) меньше  X (LX) или больше  X (LX + 1);
IERR= 2 - когда ордината  YL заданной точки  (XL, YL) меньше  Y (LY) или больше  Y (LY + 1);
IERR=65 - когда заданное число узлов сетки по  x меньше 2;
IERR=66 - когда заданное число узлов сетки по  y меньше 2;
IERR=67 - когда элементы вектоpа  X не упорядочены по возрастанию;
IERR=68 - когда элементы вектоpа  Y не упорядочены по возрастанию;
IERR=69 - когда  LX ≥ NX или  LX < 1;
IERR=70 - когда  LY ≥ NY или  LY < 1.

Версии: нет

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

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

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

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

Unit tiis7r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IIS6R_p, IIS7R_p;

function tiis7r: String;

implementation

function tiis7r: String;
var
NX,NY,LX,LY,IERR :Integer;
XL,YL,FL :Real;
C :Array [0..15] of Real;
WK :Array [0..25] of Real;
const
X :Array [0..2] of Real = ( 1.0,3.0,5.0 );
Y :Array [0..2] of Real = ( 1.0,3.0,5.0 );
F :Array [0..8] of Real = ( 2.0,4.0,3.0,0.5,1.0,0.75,1.0,2.0,1.5 );
begin
Result := '';  { результат функции }
NX := 3;
NY := 3;
LX := 1;
LY := 1;
IIS6R(F,X,NX,Y,NY,LX,LY,C,WK,IERR);
XL := 1.5;
YL := 1.5;
IIS7R(X,NX,Y,NY,LX,LY,C,XL,YL,FL,IERR);
Result := Result + Format('%3d ',[IERR]) + #$0D#$0A;
Result := Result + Format('%20.16f ',[FL]) + #$0D#$0A;
UtRes('tiis7r',Result);  { вывод результатов в файл tiis7r.res }
exit;
end;

end.


Результаты:    IERR  =  0 ,    FL    =  2.017