Текст подпрограммы и версий ( Фортран )
iib9r.zip , iib9d.zip
Тексты тестовых примеров ( Фортран )
tiib9r.zip , tiib9d.zip
Текст подпрограммы и версий ( Си )
iib9r_c.zip , iib9d_c.zip
Тексты тестовых примеров ( Си )
tiib9r_c.zip , tiib9d_c.zip
Текст подпрограммы и версий ( Паскаль )
iib9r_p.zip , iib9e_p.zip
Тексты тестовых примеров ( Паскаль )
tiib9r_p.zip , tiib9e_p.zip

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

Назначение

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

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

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

   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 , 

а также следующие значения первой частной производной функции  f по первой переменной:

   YP1  =  ∂ f (X1A(1), X2)) / ∂x(1) ,   YPM  =  ∂ f (X1A(M), X2) / ∂x(1) . 

Здесь X2 - вторая координата заданной точки (X1, X2) внутри сеточного прямоугольника, в которой ищется значение интерполируемой функции: Y = f (X1, X2). Используется метод бикубических сплайнов.

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

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

    SUBROUTINE  I IB9R (X1A, X2A, YA, Y2A, M, N, X1, X2, YP1, YPM,
                                          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 (тип: вещественный);
         YP1 -
         YPM  
заданные значения первой частной производной функции  f по первой переменной в точках (X1A (1), X2) и (X1A (M), X2) соответственно (тип: вещественный);
Y - вещественная переменная, содержащая вычисленное значение интерполируемой функции  f в точке (X1, X2);
YT - вещественный вектор длины N, используемый в подпрограмме в качестве рабочего;
Y2T - вещественный вектор длины  max (M, N), используемый в подпрограмме в качестве рабочего;
YYT, U - вещественные векторы длины M, используемые в подпрограмме в качестве рабочих.

Версии

I IB9D - выполняет те же вычисления, что и подпрограмма I IB9R, однако в режиме удвоенной точности. При этом все формальные параметры, кроме M и N, должны иметь тип DOUBLE PRECISION.

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

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

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

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

       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 
       YP1 = COS(X1A(1))*SIN(X2) 
       YPM = COS(X1A(M))*SIN(X2) 
       CALL  IIB9R (X1A, X2A, YA, Y2A, M, N, X1, X2, YP1, YPM, Y, YT,
      *                        Y2T, YYT, U)
      
Результат:   Y  =  0.316370