|
Текст подпрограммы и версий iis7r_c.zip |
Тексты тестовых примеров tiis7r_c.zip |
Вычисление значения интерполяционного натурального бикубического сплайна в произвольной точке заданного элементарного прямоугольника.
Вычисляются значения натypaльнoго бикубического сплайна 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.
int iis7r_c (real *x, integer *nx, real *y, integer *ny,
integer *lx, integer *ly, real *c, real *xl, real *yl, real *fl,
integer *ierr)
Параметры
| 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_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы i is7r_c. |
Замечания по использованию: нет
int main(void)
{
/* Initialized data */
static float x[3] = { 1.f,3.f,5.f };
static float y[3] = { 1.f,3.f,5.f };
static float f[9] /* was [3][3] */ = { 2.f,4.f,3.f,.5f,1.f,.75f,1.f,2.f,
1.5f };
/* Local variables */
static int ierr;
extern int iis6r_c(float *, float *, int *, float *, int *, int *,
int *, float *, float *, int *),
iis7r_c(float *, int *, float *, int *, int *, int *, float *,
float *, float *, float *, int *);
static float c__[16] /* was [4][4] */, fl, wk[26];
static int lx, ly, nx, ny;
static float xl, yl;
nx = 3;
ny = 3;
lx = 1;
ly = 1;
iis6r_c(f, x, &nx, y, &ny, &lx, &ly, c__, wk, &ierr);
xl = 1.5f;
yl = 1.5f;
iis7r_c(x, &nx, y, &ny, &lx, &ly, c__, &xl, &yl, &fl, &ierr);
printf("\n %5i \n",ierr);
printf("\n %16.7e \n",fl);
return 0;
} /* main */
Результаты: ierr = 0 , fl = 2.017