|
Текст подпрограммы и версий iis5r_c.zip |
Тексты тестовых примеров tiis5r_c.zip |
Вычисление значений интерполяционного натурального бикубического сплайна на заданном множестве точек.
Вычисляются значения натypaльнoго бикубического сплайна S (x, y), соответствующего двумерной сетке {x i, yj}, i = 1, 2, ..., NX, j = 1, 2, ..., NY, и интерполирующего заданные значения f i j = f (x i, yj) в узлах сетки на множестве точек (xl m, yl n), m = 1, 2, ..., NXL, n = 1, 2, ..., NYL.
Для этого библиотечные подпрограммы i is3r_c и i is4r_c вызываются NY раз для интерполяции в направлении оси x в точках (xl i, y j), i = 1, 2, ..., NXL, j = 1, 2, ..., NY, а затем NXL раз для интерполяции в направлении оси Y в точках (xl i, yl j), i = 1, 2, ..., NXL, j = 1, 2, ..., NYL.
Дж.Алберг, Э.Нильсон, Дж.Уолш, Теория сплайнов и ее приложения, M., Мир, 1972.
int iis5r_c (real *f, real *x, integer *nx, real *y,
integer *ny, real *xl, integer *nxl, real *yl, integer *nyl, real *fl,
real *wk, integer *ierr)
Параметры
| f - | вещественный двумерный массив размера nx * ny, содержащий заданные в узлах двумерной сетки значения интерполируемой функции; |
| 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 (тип: целый); |
| xl - | вещественный вектоp длины nxl, содержащий заданные абсциссы точек, в которых вычисляются значения интерполяционного натурального бикубического сплайна; |
| nxl - | заданное число элементов вектоpа xl (тип: целый); |
| yl - | вещественный вектоp длины nyl, содержащий заданные ординаты точек, в которых вычисляются значения интерполяционного натурального бикубического сплайна; |
| nyl - | заданное число элементов вектоpа yl (тип: целый); |
| fl - | вещественный двумерный массив размера nxl * max (nyl, ny), содержащий вычисленные значения интерполяционного натурального бикубического сплайна; |
| wk - | вещественный вектоp длины max ((nx - 1) * 3, (ny - 1) * 3 + ny), используемый подпрограммой как рабочий; |
| ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| ierr = 1 - | когда одна или несколько заданных точек сетки xl меньше x (1) или больше x (nx); |
| ierr = 2 - | когда одна или несколько заданных точек сетки yl меньше y (1) или больше y (ny); |
| ierr=65 - | когда заданное число узлов сетки по x меньше 2; |
| ierr=66 - | когда заданное число узлов сетки по y меньше 2; |
| ierr=67 - | когда элементы вектоpа x не упорядочены по возрастанию; |
| ierr=68 - | когда элементы вектоpа y не упорядочены по возрастанию. |
Версии: нет
Вызываемые подпрограммы
| i is3r_c - | интерполяция кубическим сплайном табличной функции от одной переменной на неравномерной сетке при известных краевых условиях на вторые производные. |
| i is4r_c - | вычисление значений интерполяционного кубического сплайна в заданных точках. |
| uti i10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы iis5r_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 };
static float xl[2] = { 1.f,1.5f };
static float yl[2] = { 1.5f,2.f };
/* Local variables */
static int ierr;
extern int iis5r_c(float *, float *, int *, float *, int *, float *,
int *, float *, int *, float *, float *, int *);
static int i__;
static float fl[6] /* was [2][3] */;
static float wk[9];
static int nx, ny, nxl, nyl;
#define fl_ref(a_1,a_2) fl[(a_2)*2 + a_1 - 3]
nx = 3;
ny = 3;
nxl = 2;
nyl = 2;
iis5r_c(f, x, &nx, y, &ny, xl, &nxl, yl, &nyl, fl, wk, &ierr);
printf("\n %5i \n",ierr);
/* l15: */
for (i__ = 1; i__ <= 2; ++i__) {
printf("\n %16.7e %16.7e \n",
fl_ref(i__, 1), fl_ref(i__, 2));
}
return 0;
} /* main */
Результаты:
ierr = 0
| 1.508 1.062 |
fl = | |
| 2.017 1.422 |
S (1., 1.5) = 1.508
S (1.5, 1.5) = 2.017
S (1., 2.) = 1.062
S (1.5, 2.) = 1.422