Текст подпрограммы и версий
idb7r_p.zip
Тексты тестовых примеров
tidb7r_p.zip

Подпрограмма:  IDB7R (модуль IDB7R_p)

Назначение

Вычисление значения производной до шестого порядка от заданной на равномерной сетке табличной функции одной переменной методом аппроксимирующих  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