|
Текст подпрограммы и версий iis7r_p.zip |
Тексты тестовых примеров tiis7r_p.zip |
Вычисление значения интерполяционного натурального бикубибического сплайна в произвольной точке заданного элементарного прямоугольника.
Вычисляются значения натурального бикубического сплайна 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