Текст подпрограммы и версий ids8r_c.zip , ids8r_c.zip |
Тексты тестовых примеров tids8r_c.zip , tids8r_c.zip |
Вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки
Пусть заданы узлы неравномерной сетки x1, x2, ..., xN, упорядоченные по возрастанию: x1 < x2 < ...< xN и значения y1, y2, ..., yN функции f (x) в узлах этой сетки. Пусть также известны значения YP1 и YPN первой производной функции f (x) в концевых узлах x1 и xN соответственно.
Если YP1 и YPN меньше (XMAX) 1/2, где XMAX - наибольшее положительное вещественное число, представимое на используемой машине, то подпрограмма ids8r_c вычисляет вторые производные функции f (x) в узлах заданной сетки методом кубических сплайнов. Если же YP1 и/или YPN больше или равны (XMAX) 1/2, то подпрограмма ids8r_c при вычислении вторых производных устанавливает соответствующее краевое условие для натурального кубического сплайна (нулевое значение второй производной в соответствующем концевом узле).
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
int ids8r_c(real *x, real *y, integer *n, real *yp1, real * ypn, real *y2, real *u)
Параметры
x - | вещественный вектор длины n, содержащий узлы заданной неравномерной сетки x1, x2, ..., xn, упорядоченные по возрастанию; |
y - | вещественный вектор длины n, содержащий значения y1, y2, ...,yn функции f (x) в узлах заданной сетки; |
n - | количество узлов сетки (тип: целый); |
yp1 - | заданное значение первой производной функции f (x) в узле x1 (тип: вещественный); |
ypn - | заданное значение первой производной функции f (x) в узле xn (тип: вещественный); |
y2 - | вещественный вектор длины n, содержащий вычисленные вторые производные функции f (x) в узлах заданной сетки; |
u - | вещественный вектор длины n, используемый в подпрограмме в качестве рабочего |
Версии
ids8d_c - | вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки в режиме удвоенной точности. При этом параметры x, y, yp1, yp2 и y2 должны иметь тип double |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Builtin functions */ double sin(double), cos(double); /* Local variables */ extern int ids8r_c(float *, float *, int *, float *, float *, float *, float *); static int i__, n; static float r__, u[5], x[5], y[5], y2[5], yp1, ypn; int i__1, i; r__ = 0.f; n = 5; i__1 = n; for (i__ = 1; i__ <= i__1; ++i__) { x[i__ - 1] = r__; y[i__ - 1] = (float)sin(x[i__ - 1]); /* L1: */ r__ += .2f; } yp1 = (float)cos(x[0]); ypn = (float)cos(x[n - 1]); ids8r_c(x, y, &n, &yp1, &ypn, y2, u); for (i = 1; i <= 5; ++i) { printf("\n %16.7e \n",y2[i-1]); } return 0; } /* main */ Результаты: y2 = ( -0.15369e+00, -0.19929e+00, -0.39072e+00, -0.56655e+00, -0.71964e+00 )