Текст подпрограммы и версий ( Фортран )
iib8r.zip , iib8d.zip
Тексты тестовых примеров ( Фортран )
tiib8r.zip , tiib8d.zip
Текст подпрограммы и версий ( Си )
iib8r_c.zip , iib8d_c.zip
Тексты тестовых примеров ( Си )
tiib8r_c.zip , tiib8d_c.zip
Текст подпрограммы и версий ( Паскаль )
iib8r_p.zip , iib8e_p.zip
Тексты тестовых примеров ( Паскаль )
tiib8r_p.zip , tiib8e_p.zip

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

Назначение

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

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

Пусть заданы узлы неравномерной прямоугольной сетки:

   X1A  =  { x1(1), x2(1), ...,xM(1) } ;   X2A  =  { x1(2), x2(2), ..., xN(2) } ,
 а также значения интерполируемой функции    f (x(1), x(2))

 и ее второй частной  производной    ∂2 f (x(1), x(2)) / ∂x(2) 2
 в узлах этой сетки:
 YA(I, J)  =  f (X1A(I), X2A(J)) ;   Y2A(I, J)  =  ∂2 f (X1A(I), X2A(J)) / ∂x(2) 2 ,

   I = 1, 2, ..., M ;   J = 1, 2, ..., N . 

Подпрограмма I IB8R вычисляет значение Y функции  f (x(1), x(2)) в заданной точке с координатами (X1, X2), лежащей внутри сеточного прямоугольника, методом бикубических сплайнов.

Н.С.Бахвалов, Численные методы. Изд - во "Наука", 1973.

Использование

    SUBROUTINE  I IB8R (X1A, X2A, YA, Y2A, M, N, X1, X2, Y, YT, Y2T,
                                           YYT, U) 

Параметры

         X1A -
         X2A  
вещественные векторы длины M и N, содержащие узлы  {x1 (1), x2 (1), ...,xM (1)} и {x1 (2), x2 (2), ..., xN (2)} соответственно;
YA - вещественный двумерный массив размеров M на N, содержащий значения интерполируемой функции  f (x (1), x (2)) двух переменных в узлах заданной сетки;
Y2A - вещественный двумерный массив размеров M на N, содержащий значения второй частной производной функции  f по второй переменной в узлах заданной сетки;
M, N - длины векторов X1A и X2A соответственно (тип: целый);
X1, X2 - координаты заданной точки внутри сеточного прямоугольника, в которой ищется значение интерполируемой функции  f (тип: вещественный);
Y - вещественная переменная, содержащая вычисленное значение интерполируемой функции  f в точке (X1, X2);
YT - вещественный вектор длины N, используемый в подпрограмме в качестве рабочего;
Y2T - вещественный вектор длины max (M, N), используемый в подпрограмме в качестве рабочего;
YYT, U - вещественные векторы длины M, используемые в подпрограмме в качестве рабочих.

Версии

I IB8D - вычисление значения в заданной точке интерполируемой функции двух переменных, определенной на прямоугольной неравномерной сетке, по известным значениям на этой сетке ее второй частной производной по второй переменной методом бикубических сплайнов режиме удвоенной точности.

Вызываемые подпрограммы

       IDS8R -
       IDS8D  
вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки в режиме одинарной и удвоенной точности соответственно; используются в подпрограммах I IB8R и I IB8D соответственно.
       I IS8R -
       I IS8D  
вычисление значения в заданной точке интерполируемой табличной функции, определенной в узлах неравномерной сетки, упорядоченной по возрастанию, по известным значениям ее второй производной в узлах этой сетки методом кубических сплайнов в режиме одинарной и удвоенной точности соответственно; используются в подпрограммах I IB8R и I IB8D соответственно.

Замечания по использованию: нет

Пример использования

       REAL  X1A(5), X2A(4), YA(5, 4), Y2A(5, 4), YT(4), Y2T(5),  
      *          YYT(5), U(5) 
       M = 5 
       N = 4 
       R = 0.0 
       DO 1  I = 1, M 
       X1A(I) = R 
    1 R = R + 0.1 
       R = 0.0 
       DO 2  I = 1, N 
       X2A(I) = R 
    2 R = R + 0.1 
       DO 4  I = 1, M 
       DO 4  J = 1, N 
       YA(I, J) = SIN(X1A(I))*SIN(X2A(J)) 
    4 Y2A(I, J) = -YA(I, J) 
       X1 = 0.55 
       X2 = 0.65 
       CALL  IIB8R (X1A, X2A, YA, Y2A, M, N, X1, X2, Y, YT, Y2T,
      *                        YYT, U)
      
Результат:    Y=0.321498