Текст подпрограммы и версий 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