|
Текст подпрограммы и версий iis8r_c.zip , iis8d_c.zip |
Тексты тестовых примеров tiis8r_c.zip , tiis8d_c.zip |
Вычисление значения в заданной точке интерполируемой табличной функции, определенной в узлах неравномерной сетки, упорядоченной по возрастанию, по известным значениям ее второй производной в узлах этой сетки методом кубических сплайнов.
Пусть заданы узлы неравном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