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