Текст подпрограммы и версий
pa07r_c.zip  pa07d_c.zip 
Тексты тестовых примеров
tpa07r_c.zip  tpa07d_c.zip 

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

Назначение

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

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

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

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

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

    int pa07r_c(real *xx, integer *n, real *x, integer *j)

Параметры

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

Версии

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

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

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

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

int main(void)
{
    /* Local variables */
    extern int pa07r_c(float *, int *, float *, int *);
    static int i__, j, n;
    static float r__, x, 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;
    pa07r_c(xx, &n, &x, &j);

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


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