Текст подпрограммы и версий id24r_p.zip |
Тексты тестовых примеров tid24r_p.zip |
Вычисление методом аппроксимирующих сплайнов значения смешанной производной табличной функции двух переменных, заданной на равномерной прямоугольной сетке.
Пусть на равномерной прямоугольной сетке (xi, yj), i = 1, ..., M1, j = 1, ..., M2, с шагами H1 и H2 по x и y соответственно, заданы значения функции fi j = f (xi, yj).
По точке (X Y), в которой требуется произвести вычисления, определяются номеpа K и L такие, что X ∈ [xK, xK + 1], Y ∈ [yL, yL + 1]. Значение производной порядка P по x и порядка Q по y ( 0 ≤ P ≤ 2N - 2, 0 ≤ Q ≤ 2N - 2 ) при K, L: N ≤ K ≤ M1 - N, N ≤ L ≤ M2 - N вычисляется по формуле:
S (P,Q) (X,Y) = CN2 * K+N L+N * ∑ ∑ fi j s(P)i,2N (X) s(Q)j,2N (Y) , i=K-N+1 j=L-N+1
где C1 = 1, C2 = 2/3, C3 = 11/20, C4 = 151/315, si, 2N (Х) и sj, 2N (Y) - суть В - сплайны порядка 2N, а N = 1, 2, 3, 4. При других K и L вычисления ведутся по формуле Тейлора.
Гребенников А.И. Алгоритм быстрой аппроксимации функций двух переменных и их производных сплайнами на равномерной сетке. B сб. "Численный анализ на ФОРТРАНе", вып.20, Изд-во МГУ, 1977.
procedure ID24R(var P :Integer; var Q :Integer; N1 :Integer; M1 :Integer; M2 :Integer; H1 :Real; H2 :Real; A1 :Real; A2 :Real; X :Real; Y :Real; var F :Array of Real; var S :Real; var IERR :Integer);
Параметры
P, Q - | целые переменные, значения которых на единицу больше порядка вычисляемой производной по x и y соответственно (при P = 1, Q = 1 вычисляется значение сплайна) 1 ≤ P ≤ 2N - 1, 1 ≤ Q ≤ 2N - 1; |
N1 - | порядок сплайна, N1 = 2N, 1 ≤ N ≤ 4 (тип: целый); |
M1 - | число узлов на оси x (тип: целый); |
M2 - | число узлов на оси y (тип: целый); |
H1 - | шаг сетки по оси x (тип: вещественный); |
H2 - | шаг сетки по оси y (тип: вещественный); |
A1 - | координата первого узла на оси x (тип: вещественный); |
A2 - | координата первого узла на оси y (тип: вещественный); |
X, Y - | координаты точки, в которой производятся вычисления производной (тип: вещественный); |
F - | двумерный вещественный массив размерности M1 на M2 заданных значений функций; |
S - | вещественная переменная, содержащая результат вычислений; |
IERR - | целая переменная, значение которой указывает причину возможной ошибки: |
IERR=1 - | шаги сетки слишком малы; |
IERR=2 - | точка (X, Y) лежит вне допустимой области [x1, xM1] * [y1, yM2]; |
IERR=3 - | невеpно задан порядок сплайна; |
IERR=4 - | невеpно задан порядок производной. |
Версии: нет
Вызываемые подпрограммы
UTI I12 - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию: нет
Unit tid24r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ID24R_p; function tid24r: String; implementation function tid24r: String; var IP,IQ,I,J,IERR :Integer; S :Real; F :Array [0..120] of Real; Y :Array [0..10] of Real; X :Array [0..10] of Real; label _5; begin Result := ''; { результат функции } IP := 1; IQ := 1; for I:=1 to 11 do begin X[I-1] := (I-1)*0.1; for J:=1 to 11 do begin Y[J-1] := (J-1)*0.1; _5: F[(I-1)+(J-1)*11] := Exp(-X[I-1]*X[I-1]-Y[J-1]*Y[J-1]); end; end; ID24R(IP,IQ,4,11,11,0.1,0.1, 0.0,0.0,0.3,0.5,F,S,IERR); Result := Result + Format(' %20.16f ',[S]) + #$0D#$0A; UtRes('tid24r',Result); { вывод результатов в файл tid24r.res } exit; end; end. Результат: S = 0.70865