|
Текст подпрограммы и версий iis2r_c.zip |
Тексты тестовых примеров tiis2r_c.zip |
Вычисление значения кусочно - полиномиальной функции в заданной точке.
Пусть кусочно - пoлинoмиальная функция задана следующим образом: на каждом полуинтервале (xk, xk + 1), k = 0, 1, ..., N - 1, неравномерной сетки x0 < x1 < x2 < ... < xN она является полиномом степени M
Ak1 (x - xk)M + Ak2 (x - xk)M - 1 + ... + Ak M (x - xk) + Ak M + 1
с известными коэффициентами Ak1, Ak2, ..., Ak M + 1. Подпрограмма вычисляет значения этой кусочно - полиномиальной функции в заданной точке xt : x0 < xt < xN.
int iis2r_c (real *xt, integer *n, real *x, integer *m,
real *a, real *yt, integer *ierr)
Параметры
| xt - | заданная точка xt, в которой ищется значение кусочно - полиномиальной функции (тип: вещественный); |
| n - | заданное число полуинтервалов, n ≥ 2 (тип: целый); |
| x - | вещественный одномерный массив размерности n + 1, в котоpом заданы узлы сетки xk; |
| m - | заданная степень кусочно - полиномиальной функции (тип: целый); |
| a - | вещественный двумерный массив размера n * (m + 1), в котоpом задаются на соответствующих местах коэффициенты Ai j кусочно - полиномиальной функции в порядке убывания степеней; |
| yt - | вещественная переменная, содержащая вычисленное значение кусочно - полиномиальной функции в заданной точке xt; |
| ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| ierr=65 - | когда заданное значение xt не принадлежит полуинтервалу (x0, xn]. |
Версии: нет
Вызываемые подпрограммы
| uti i10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы i is2r_c. |
Замечания по использованию
| Коэффициенты кусочно - полиномиальной функции помещаются в матрице a по столбцам. |
На сетке xk = (k - 1) * π / 4, k = 1, ..., 5, заданы значения коэффициентов интерполяционного полинома.
int main(void)
{
/* Initialized data */
static float xt = .134f;
static float x[5] = { 0.f,.7854f,1.5708f,2.3562f,3.1416f };
static float a[24] /* was [4][6] */ = { .0115f,.0028f,-.0036f,4e-4f,
-.0075f,.0301f,.0467f,.0167f,-.1624f,-.1152f,-.0026f,.122f,0.f,
-.355f,-.5005f,-.3512f,1.f,.7071f,0.f,-.7071f,0.f,.7071f,1.f,
.7071f };
/* Local variables */
static int ierr;
extern int iis2r_c(float *, int *, float *, int *, float *, float *,
int *);
static int m, n;
static float yt;
n = 4;
m = 5;
iis2r_c(&xt, &n, x, &m, a, &yt, &ierr);
printf("\n %5i \n",ierr);
printf("\n %16.7e \n",yt);
return 0;
} /* main */
Результат: yt = 0.1336