Текст подпрограммы и версий idb7r_p.zip |
Тексты тестовых примеров tidb7r_p.zip |
Вычисление значения производной до шестого порядка от заданной на равномерной сетке табличной функции одной переменной методом аппроксимирующих B - сплайнов.
Пусть на равномерной сетке xi : x1 < x2 < ...< xM с шагом H заданы значения функции fi = f (xi). По аргументу Х, при котоpом требуется провести вычисления, определяется номер K такой, что X ∈ [xK, xK + 1], и строятся В - сплайны si, 2N (Х) порядка 2N для i = K- N+1,..., K+N (см. [1]). Значение производной порядка P: 0 ≤ P ≤ 2N- 2 вычисляется по формулам:
S(P)(X) = φK,P(X) = K+N = CN ∑ fi s(P)i,2N(X) , при X ∈ [xK,xK+1] , N ≤K≤ M-N ; i=K-N+1 S(P)(X) = φN,P(xN) + [φN+1,P(xN+1) - φN,P(xN)] (X-xN) /H , при X ∈ [x1,xN]; S(P)(X) = φM-N,P(xM-N) + [φM-N,P(xM-N) - φM-N-1,P(xM-N-1)] (X-xM-N) /H , при X ∈ [xM-N,xM] ;
где C1 = 1, C2 = 2/3, C3 = 11/20, C4 = 151/315, и считается, что M ≥ 2N.
1. | А.И.Гребенников. O простом алгоритме аппроксимации функций с помощью В - сплайнов на равномерной сетке. "Численный анализ на ФОРТРАНе", вып.15, Изд-во Mоск. ун-та, 1976. |
procedure IDB7R(P :Integer; N1 :Integer; M :Integer; A :Real; H :Real; X :Real; var F :Array of Real; var S :Real; var IERR :Integer);
Параметры
P - | параметр, значение которого на единицу больше порядка вычисляемой производной (при P = 1 вычисляется просто значение сплайна, при P = 2 вычисляется значение первой производной и т.д.), 1 ≤ P ≤ 2*N - 1 (тип: целый); |
N1 - | порядок сплайна, N1 = 2*N, 1 ≤ N ≤ 4 (тип: целый); |
M - | число узлов сетки (тип: целый); |
A - | первый узел сетки (тип: вещественный); |
H - | шаг сетки, H > 0 (тип: вещественный); |
X - | значение аргумента функции, при котоpом необходимо вычислить производную (тип: вещественный); |
F - | вещественный вектоp длины M значений заданной функции на равномерной сетке; |
S - | вещественная переменная, представляющая результат вычисления производной порядка (P - 1) от аппроксимирующего сплайна; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IERR=65 - | когда шаг сетки слишком мал; |
IERR=66 - | когда зафиксирована ошибка в задании N1 (N1 < 2); |
IERR=67 - | когда аргумент X лежит вне рассматриваемого отрезка [x1, xM]. |
Версии: нет
Вызываемые подпрограммы
UTI I12 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы IDB7R. |
Замечания по использованию: нет
Unit tidb7r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, IDB7R_p; function tidb7r: String; implementation function tidb7r: String; var I,IR :Integer; S :Real; F :Array [0..10] of Real; X :Array [0..10] of Real; label _5; begin Result := ''; { результат функции } for I:=1 to 11 do begin X[I-1] := (I-1)*0.1; _5: F[I-1] := Exp(-X[I-1]*X[I-1]); end; IDB7R(3,4,11,0.0,0.1,0.35,F,S,IR); Result := Result + Format(' %20.16f ',[S]) + #$0D#$0A; UtRes('tidb7r',Result); { вывод результатов в файл tidb7r.res } exit; end; end. Результат: S = -1.32