Текст подпрограммы и версий
iis8r_c.zip , iis8d_c.zip
Тексты тестовых примеров
tiis8r_c.zip , tiis8d_c.zip

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

Назначение

Вычисление значения в заданной точке интерполируемой табличной функции, определенной в узлах неравномерной сетки, упорядоченной по возрастанию, по известным значениям ее второй производной в узлах этой сетки методом кубических сплайнов.

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

Пусть заданы узлы неравномepнoй cетки  x1, x2, ..., xN, упорядоченные по возрастанию:  x1 < x2 < ...< xN и значения  y1, y2, ..., yN интерполируемой функции  f (x) в узлах этой сетки. Пусть заданы также значения второй производной функции  f (x) в тех же узлах. Подпрограмма i is8r_c вычисляет значение Y функции  f (x) в заданной точке X методом кубических сплайнов.

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.

Использование

    int iis8r_c (real *xa, real *ya, real *y2a, integer *n,
            real *x, real *y, integer *ierr)

Параметры

xa - вещественный вектор длины n, содержащий узлы заданной сетки  x1, x2, ..., xn, упорядоченные по возрастанию;
ya - вещественный вектор длины n, содержащий значения  y1, y2, ..., yn интерполируемой функции в узлах заданной сетки;
y2a - вещественный вектор длины n, содержащий значения второй производной интерполируемой функции в узлах заданной сетки;
n - количество узлов сетки (тип: целый);
x - заданная точка, в которой ищется значение интерполируемой функции (тип: вещественный);
y - вещественная переменная, содержащая вычисленное значение интерполируемой функции в точке x;
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом
ierr=65 - когда по крайней мере два узла сетки совпадают.

Версии

i is8d_c - вычисление значения в заданной точке интерполируемой табличной функции,определенной в узлах неравномерной сетки, упорядоченной по возрастанию, по известным значениям ее второй производной в узлах этой сетки методом кубических сплайнов в режиме удвоенной точности. При этом параметры xa, ya, y2a, x, и y должны иметь тип double.

Вызываемые подпрограммы

uti i10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы i is8r_c;
uti i11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы i is8d_c.

Замечания по использованию: нет

Пример использования

int main(void)
{
    /* Builtin functions */
    double sin(double);

    /* Local variables */
    static int ierr;
    extern int iis8r_c(float *, float *, float *, int *, float *, float *,
                       int *);
    static int i__, n;
    static float r__, x, y, xa[5], ya[5], y2a[5];
    int i__1;

    n = 5;
    r__ = 0.f;
    i__1 = n;
    for (i__ = 1; i__ <= i__1; ++i__) {
        xa[i__ - 1] = r__;
        ya[i__ - 1] = (float)sin(xa[i__ - 1]);
        y2a[i__ - 1] = -ya[i__ - 1];
/* l1: */
        r__ += .2f;
    }
    x = .5f;
    iis8r_c(xa, ya, y2a, &n, &x, &y, &ierr);

    printf("\n %16.7e %16.7e \n",x, y);
    printf("\n %5i \n",ierr);
    return 0;
} /* main */
      

Результаты:
    
             y  =  0.47942 
       ierr  =  0