Текст подпрограммы и версий 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