Текст подпрограммы и версий id23r_c.zip |
Тексты тестовых примеров tid23r_c.zip |
Вычисление значений производных до некоторого порядка функции, линейно представленной через 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.