|
Текст подпрограммы и версий idb9r_p.zip , idb9e_p.zip |
Тексты тестовых примеров tidb9r_p.zip , tidb9e_p.zip |
Вычисление второй частной производной функции двух переменных, заданной на прямоугольной неравномерной сетке, по второй переменной методом одномерных натуральных кубических сплайнов.
Пусть заданы узлы неравномерной прямоугольной сетки:
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