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

Функция:  ias2r_c

Назначение

Вычисление значения бикубического аппроксимирующего сплайна или его смешанных производных до третьего порядка при заданных значениях аргументов на заданных (возможно неравномерных) сетках при заданных коэффициентах.

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

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

Hа первых четырех этапах фиксируется индекс по  Y, а на пятом этапе используются четыре полученных значения.

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

    real ias2r_c (real *tx, integer *nx, real *ty, integer *ny, real *cxy,
            integer *ncx, integer *ncy, integer *idx, integer *idy, real *xx,
            real *yy)

Параметры

tx - вещественный вектоp длины  nx + 4, содержащий значения узлов сетки сплайна по  x;
nx - заданное число узлов исходной сетки по  x,  nx ≥ 4 (тип: целый);
ty - вещественный вектоp длины  ny + 4, содержащий значения узлов сетки сплайна по  y;
ny - заданное число узлов исходной сетки по  y,  ny ≥ 4 (тип: целый);
cxy - вещественный двумерный массив, содержащий значения коэффициентов сплайна, размерностью  ncx * ncy;
ncx - заданное число стpок массива  cxy,  ncx ≥ nx + 2 (тип: целый);
ncy - заданное число столбцов массива  cxy,  ncy ≥ ny + 2 (тип: целый);
idx - заданный порядок вычисляемой производной по  x,  0 ≤ idx ≤ 3 (тип: целый);
idy - заданный порядок вычисляемой производной по  y,  0 ≤ idy ≤ 3 (тип: целый);
xx - заданное значение аргумента по  x, при котоpом производятся вычисления,  tx (3) ≤ xx ≤ tx (nx + 2) (тип: вещественный);
yy - заданное значение аргумента по  y, при котоpом производятся вычисления,  ty (3) ≤ yy ≤ ty (ny + 2) (тип: вещественный).

Версии: нет

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

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

 

Подпрограмма - функция использует рабочие подпрограммы-функции ias1r1_c и ias1r2_c.

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

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

int main(void)
{
    /* Initialized data */
    static float x[4] = { 2.f,3.f,4.f,5.f };
    static float y[4] = { 2.f,3.f,5.f,6.f };
    static float fxa[4] = { 24.f,36.f,60.f,72.f };
    static float fxb[4] = { 60.f,90.f,150.f,180.f };

    /* Local variables */
    extern int iac2r_c(float *, int *, float *, int *, float *, int *,
                       int *, int *, int *, int *, float *, int *, float *,
                       int *, float *, int *, float *, float *, float *,
                       float *, int *, int *, float *);
    extern float ias2r_c(float *, int *, float *, int *, float *, int *,
                         int *, int *, int *, float *, float *);
    static int i__, j;
    static float s, cy[8], tx[8], ty[8], cxy[64] /* was [8][8] */,
                                         fxy[16] /* was [4][4] */;
    float r__1;

#define fxy_ref(a_1,a_2) fxy[(a_2)*4 + a_1 - 5]

    for (i__ = 1; i__ <= 4; ++i__) {
        for (j = 1; j <= 4; ++j) {
/* Computing 3rd power */
            r__1 = x[i__ - 1];
            fxy_ref(i__, j) = y[j - 1] * (r__1 * (r__1 * r__1));
/* l10: */
        }
    }
    iac2r_c(x, &c__4, y, &c__4, fxy, &c__4, &c__4, &c__1, &c__1, &c__1, fxa,
            &c__2, fxb, &c__0, x, &c__0, x, tx, ty, cxy, &c__8, &c__8, cy);

    s = (float)ias2r_c(tx, &c__4, ty, &c__4, cxy, &c__8, &c__8, &c__2, &c__0,
                       &c_b20, &c_b21);

    printf("\n %16.7e \n",s);
    return ;
} /* main */


Результат:    s  =  51.840