Текст подпрограммы и версий
ids8r_c.zip , ids8r_c.zip
Тексты тестовых примеров
tids8r_c.zip , tids8r_c.zip

Подпрограмма:  ids8r_c

Назначение

Вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки

Математическое описание

Пусть заданы узлы неравномерной сетки  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 )