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

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

Назначение

Вычисление значения кусочно - полиномиальной функции в заданной точке.

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

Пусть кусочно - п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