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

Функция:  ias1r_c

Назначение

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

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

Пусть заданы сетка сплaйнa  TX (I) ,  I = 1, ..., NX + 4 и его коэффициенты  CX (I),  I = 1, ..., NX + 2, где  NX - число узлов исходной сетки.

Для вычисления значения сплайна или его производной до третьего порядка при заданном аргументе  XX определяется номер интервала на массиве  TX такой, чтобы  XX принадлежал отрезку  [ТХ (IХ), ТХ (IХ + 1)] , где  3 ≤ IX ≤ NX + 1.

Тогда из свойств локальных базисных сплайнов выводятся рекурентные формулы для вычисления производной порядка  IDX, где  0 ≤ IDX ≤ 3 :

     A(I) = CX(IX - 3 + I) ,   I = 1, ..., 4 ;

     A(I) = (4 - J) * ( A(I + 1) - A(I) ) / ( TX(IX + I) - TX(IX - 4 + I + J) ) ,
                I = 1, ..., 4-J ,   J = 1 ,..., IDX ;

     B(I) = TX(IX + I) - XX ,   I = 1, ..., 3-IDX ;

     C(I) = XX - TX(IX + 1 - I) ,   I = 1,..., 3-IDX ;

     A(I) = ( C(5 - I - J)*A(I + 1) + B(I)*A(I) ) / ( C(5 - I - J) + B(I) ) ,
                I = 1 ,..., 4-J ,   J = IDX + 1 ,..., 3 . 

После проведения этих вычислений значение содержится в  A (1).

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

    real ias1r_c (real *tx, integer *nx, real *cx, integer *idx, real *xx)

Параметры

tx - вещественный вектоp длины nx + 4, содержащий значения узлов сетки сплайна;
nx - заданное число узлов исходной сетки,  nx ≥ 4 (тип: целый);
cx - вещественный вектоp длины  nx + 2, содержащий значения коэффициентов сплайна;
idx - заданный порядок вычисляемой производной,  0 ≤ idx ≤ 3 (тип: целый);
xx - заданное значение аргумента, при котоpом производятся вычисления,  tx (3) ≤ xx ≤ tx (nx + 2) (тип: вещественный).

Версии: нет

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

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

 

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

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

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

int main(void)
{
    /* Initialized data */
    static float x[4] = { 2.f,3.f,4.f,5.f };
    static float fx[4] = { 8.f,27.f,64.f,125.f };

    /* Local variables */
    extern int iac1r_c(float *, int *, float *, int *, int *, float *,
                       int *, float *, float *, float *);
    extern float ias1r_c(float *, int *, float *, int *, float *);
    static float s, cx[8], tx[8];

    iac1r_c(x, &c__4, fx, &c__1, &c__1, &c_b4, &c__2, &c_b6, tx, cx);
    s = (float)ias1r_c(tx, &c__4, cx, &c__1, &c_b9);

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


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