Текст подпрограммы и версий
pa08r_c.zip  pa08d_c.zip 
Тексты тестовых примеров
tpa08r_c.zip  tpa08d_c.zip 

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

Назначение

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

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

Пусть заданы узлы сетки  x1, x2,..., xN, упорядоченные либо по возрастанию, либо по убыванию. Подпрограмма pa08r_c по заданной точке  X вычисляет методом бисекции значение индекса  J, при котором точка  X лежит между узлами  xJ и  xJ + 1 , с использованием значения индекса  JL, определяющим ее предположительное местоположение.

Если  J = 0, то это означает, что точка  X лежит левее узла  x1. Если  J = N, то это означает, что точка  X лежит правее узла  xN.

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

    int pa08r_c(real *xx, integer *n, real *x, integer *jl,
        integer *j)

Параметры

xx - вещественный вектор длины  n, содержащий узлы заданной сетки  x1, x2,..., xN упорядоченной либо по возрастанию, либо по убыванию;
n - количество узлов сетки (тип: целый);
x - заданная точка, местоположение которой ищется по отношению к узлам сетки (тип: вещественный);
jl - значение индекса, определяющего предположительное положение точки  x по отношению к узлам сетки (тип: целый);
j - целая переменная, значение которой полагается равной индексу, при котором точка  x лежит между узлами xx (j) и xx (j + 1).

Версии

pa08d_c - определение узлов упорядоченной по возрастанию или убыванию неравномерной сетки, между которыми лежит заданная точка, с использованием информации о ее предположительном местоположении в режиме удвоенной точности. При этом параметры xx и x должны иметь тип double.

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

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

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

int main(void)
{
    /* Local variables */
    extern int pa08r_c(float *, int *, float *, int *, int *);
    static int i__, j, n;
    static float r__, x;
    static int jl;
    static float xx[20];
    int i__1;

    n = 20;
    r__ = 0.f;
    i__1 = n;
    for (i__ = 1; i__ <= i__1; ++i__) {
        xx[i__ - 1] = r__;
/* L1: */
        r__ += .2f;
    }
    x = 1.7f;
    jl = 15;
    pa08r_c(xx, &n, &x, &jl, &j);

    printf("\n %15.5e \n", x);
    printf("\n %15.5e \n", xx[j - 1]);
    printf("\n %5i %5i \n", jl, j);
    return 0;
} /* main */


Результат:    j  =  9