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