|
Текст подпрограммы и версий id22r_c.zip |
Тексты тестовых примеров tid22r_c.zip |
Вычисление значения некоторой производной функции, линейно представленной через B - сплайн k - го порядка, в заданной точке.
Пусть функция
n
f(x) = ∑ aj Nj k(x) ,
j=1
где aj - заданные коэффициенты, а Nj k (x) - нормированные B - сплайны k - го порядка, соответствующие сетке узлов
t1 ≤ t2 ≤ ... ≤ tk < tk+1 <...< tn < tn+1 ≤ tn+2 ≤ ... ≤ tn+k .
Вычисляется значение i - ой производной функции f в заданной точке x ∈ [t1, tn + 1] для некоторого i: 0 ≤ i ≤ k .
C.de Boor, Package for Calculating with B - splines, SIAM J. Numerical Analysis, 14(3), 1977, pp. 441-772.
real id22r_c (real *t, real *a, integer *n, integer *k, real *x, integer *id,
real *r)
Параметры
| t - | вещественный вектоp длины n + k, значений узлов сплайна t (1) ≤ t (2) ≤ ...≤ t (k) < t (k + 1) < ...< t (n) < t (n + 1) ≤ ...≤ t (n + k); |
| a - | вещественный вектоp длины n заданных значений коэффициентов aj = A (j), j = 1, 2,..., n; |
| n - | заданное число B - сплайнов, n ≥ 2*k (тип: целый); |
| k - | порядок B - сплайна (тип: целый); |
| x - | заданное значение точки, в которой вычисляется производная f ( i ) (x), порядка i = id; t (1) ≤ x ≤ t (n + 1) (тип: вещественный); |
| id - | заданный порядок вычисляемой производной 0 ≤ id ≤ k (тип: целый); |
| r - | вещественный рабочий двумерный массив размерности 3k. |
Версии: нет
Вызываемые подпрограммы
| 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[6] = { 0.f,-2.f,18.f,110.f,322.f,512.f };
/* Local variables */
extern float id22r_c(float *, float *, int *, int *, float *, int *,
float *);
static int i__, k, n;
static float r__[9] /* was [3][3] */, s, x;
static int id;
n = 6;
x = 5.f;
k = 3;
id = 0;
for (i__ = 1; i__ <= 3; ++i__) {
id = i__;
s = (float)id22r_c(t, a, &n, &k, &x, &id, r__);
printf("\n id = %2i s = %16.7e \n",id, s);
/* l5: */
}
return 0;
} /* main */
Результаты: s = 76., 30., 0.