Текст подпрограммы и версий
idb9r_p.zip , idb9e_p.zip
Тексты тестовых примеров
tidb9r_p.zip , tidb9e_p.zip

Подпрограмма:  IDB9R (модуль IDB9R_p)

Назначение

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

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

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

   X1A = { x1(1), x2(1), ..., xM(1) } ;   X2A  =  { x1(2), x2(2), ..., xN(2) }

и значения функции  f ( x(1), x(2) ) в узлах этой сетки:

  YA(I, J)  =  f ( X1A(I), X2A(J) ) ,   I = 1, 2, ..., M ;   J = 1, 2, ..., N.

Предполагается, что  x1(1) < x2(1) <...< xM(1)  и  x1(2) < x2(2) <...< xN(2). 

Подпрограмма IDB9R вычисляет вторые частные производные

2 f (x(1), x(2)) / ∂x(2) 2 

в узлах заданной сетки методом одномерных натуральных кубических сплайнов по направлению x (2).

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

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

procedure IDB9R(var X1A :Array of Real; var X2A :Array of Real;
                var YA :Array of Real; M :Integer; N :Integer;
                var Y2A :Array of Real; var YT :Array of Real;
                var Y2T :Array of Real; var RAB :Array of Real);

Параметры

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

Версии

IDB9E - вычисление второй частной производной функции двух переменных, заданной на прямоугольной неравномерной сетке, по второй переменной методом одномерных натуральных кубических сплайнов в режиме расширенной (Extended) точности; все формальные параметры, за исключением M и N, должны иметь тип Extended.

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

       IDS8R -
       IDS8E  
вычисление вторых производных таблично - заданной функции в узлах неравномерной сетки методом кубических или натуральных кубических сплайнов при заданных первых производных функции в концевых узлах сетки в режимах одинарной и расширенной (Extended) точности соответственно; используются в подпрограммах IDB9R и IDB9E.

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

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

Unit TIDB9R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IDB9R_p;

function TIDB9R: String;

implementation

function TIDB9R: String;
var
M,N,I,J,_i :Integer;
R :Real;
X1A :Array [0..4] of Real;
X2A :Array [0..3] of Real;
YA :Array [0..19] of Real;
Y2A :Array [0..19] of Real;
YT :Array [0..3] of Real;
Y2T :Array [0..3] of Real;
RАВ :Array [0..3] of Real;
Y2АТ :Array [0..19] of Real;
label
_1,_2,_3;
begin
Result := '';  { результат функции }
M := 5;
N := 4;
R := 0.0;
for I:=1 to M do
 begin
  X1A[I-1] := R;
_1:
  R := R+0.1;
 end;
R := 0.0;
for I:=1 to N do
 begin
  X2A[I-1] := R;
_2:
  R := R+0.1;
 end;
for I:=1 to M do
 begin
  for J:=1 to N do
   begin
    YA[(I-1)+(J-1)*5] := Sin(X1A[I-1])*Sin(X2A[J-1]);
_3:
    Y2AT[(I-1)+(J-1)*5] := -YA[(I-1)+(J-1)*5];
   end;
 end;
IDB9R(X1A,X2A,YA,M,N,Y2A,YT,Y2T,RAB);
Result := Result + #$0D#$0A;
for _i:=0 to 19 do
 begin
  Result := Result + Format('%20.16f ',[Y2A[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 19 do
 begin
  Result := Result + Format('%20.16f ',[Y2AT[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TIDB9R',Result);  { вывод результатов в файл TIDB9R.res }
exit;
end;

end.

Результаты:      

                   |  0.0      0.0                    0.0                    0.0
                   |  0.0     -0.80066E-02   -0.27724E-01    0.0
       Y2A = |   0.0     -0.15933E-01   -0.55172E-01    0.0
                   |  0.0     -0.23700E-01   -0.82068E-01    0.0
                   |  0.0     -0.31230E-01   -0.10814            0.0