Текст подпрограммы и версий pa08r_c.zip pa08d_c.zip |
Тексты тестовых примеров tpa08r_c.zip tpa08d_c.zip |
Определение узлов упорядоченной по возрастанию или по убыванию неравномерной сетки, между которыми лежит заданная точка, с использованием информации о ее предположительном местоположении.
Пусть заданы узлы сетки 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