|
Текст подпрограммы и версий 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