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

Подпрограмма:  id23r_c

Назначение

Вычисление значений производных до некоторого порядка функции, линейно представленной через  B - сплайн  K - го порядка, в заданной точке.

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

Пусть функция                                       
                 n
     f(x)  =  ∑  ai Ni k(x) ,
                i=1 

где  ai - заданные кoэффициенты, а ni k (x) - нормированные  B - сплайны  K - го порядка, построенные по сети узлов

     t1 ≤ t2 ≤ ... ≤ tk < tk+1 <...< tn < tn+1 ≤ tn+2 ≤ ... ≤ tn+k . 

B заданной точке  x  [t1, tn + 1] для некоторого целого числа ND:  0 ≤ ND ≤ K , вычисляются производные функции  f :  sj = D j - 1 f (x),  j = 1, 2,..., ND.

C.de Boor, Package for Calculating with B - splines, SIAM J. Numerical Analysis, 14(3), 1977, pp. 441-472.

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

    int id23r_c (real *t, real *a, integer *n, integer *k, real *x,
             real *s, integer *nd, real *r, real *r1)

Параметры

t - вещественный вектоp длины n + k, узлов сплайна t (1) ≤ t (2) ≤ ...≤ t (k) < t (k + 1) < ...< t (n) < t (n + 1) ≤ ...≤ t (n + k);
a - вещественный двумерный массив размера n*nd,  ai = a (i, 1),  i = 1, 2,..., n,  используемый также как рабочий (тип: вещественный);
n - заданное число  B - сплайнов, n ≥ 2*k (тип: целый);
k - порядок  B - сплайна (тип: целый);
x - заданное значение точки, в которой вычисляются производные функции, t (1) ≤ x ≤ t (n + 1) (тип: вещественный);
s - вещественный вектоp длины nd,  sj = s (j),  j = 1,  2,..., nd;
nd - заданное целое число,  0 ≤ nd ≤ k;
r - рабочий вектоp длины k (тип: вещественный);
r1 - вещественный двумерный рабочий массив размера 2k.

Версии: нет

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

i i21r1_c - служебная подпрограмма.
i i21r2_c - служебная подпрограмма.

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

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

int main(void)
{
    /* Initialized data */
    static float t[9] = { 0.f,0.f,0.f,2.f,4.f,6.f,8.f,8.f,8.f };
    static float a[18] /* was [6][3] */ = { 0.f,-2.f,18.f,110.f,322.f,512.f,
                            0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f };

    /* Local variables */
    extern int id23r_c(float *, float *, int *, int *, float *, float *,
                       int *, float *, float *);
    static int k, n;
    static float r__[3], s[3], x, r1[6]  /* was [2][3] */;
    static int nd;

    n = 6;
    k = 3;
    nd = 3;
    x = 5.f;
    id23r_c(t, a, &n, &k, &x, s, &nd, r__, r1);

    printf("\n %16.7e %16.7e %16.7e \n",s[0],s[1],s[2]);
    return 0;
} /* main */


Результаты:    s  =  125., 76., 30.