Текст подпрограммы и версий id22r_p.zip |
Тексты тестовых примеров tid22r_p.zip |
Вычисление значения некоторой производной функции, линейно представленной через B - сплайн k - го порядка, в заданной точке.
Пусть функция n f(x) = ∑ aj Nj k(x) , j=1
где aj - заданные коэффициенты, а Nj k (x) - нормированные B - сплайны k - го порядка, соответствующие сетке узлов
t1 ≤ t2 ≤ ... ≤ tk < tk+1 <...< tn < tn+1 ≤ tn+2 ≤ ... ≤ tn+k .
Вычисляется значение i - ой производной функции f в заданной точке x ∈ [t1, tn + 1] для некоторого i: 0 ≤ i ≤ k .
C.de Boor, Package for Calculating with B - splines, SIAM J. Numerical Analysis, 14(3), 1977, pp. 441-772.
function ID22R(var T :Array of Real; var A :Array of Real; N :Integer; K :Integer; X :Real; ID :Integer; var R :Array of Real): Real;
Параметры
T - | вещественный вектоp длины N + K, значений узлов сплайна T (1) ≤ T (2) ≤ ...≤ T (K) < T (K + 1) < ...< T (N) < T (N + 1) ≤ ...≤ T (N + K); |
A - | вещественный вектоp длины N заданных значений коэффициентов aj = A (J), J = 1, 2,..., N; |
N - | заданное число В - сплайнов, N ≥ 2*K (тип: целый); |
K - | порядок В - сплайна (тип: целый); |
X - | заданное значение точки, в которой вычисляется производная f ( i ) (x), порядка i = ID; T (1) ≤ X ≤ T (N + 1) (тип: вещественный); |
ID - | заданный порядок вычисляемой производной 0 ≤ ID ≤ K (тип: целый); |
R - | вещественный рабочий двумерный массив размерности 3K. |
Версии: нет
Вызываемые подпрограммы
I I21R2 - | служебная подпрограмма. |
Замечания по использованию: нет
Unit TID22R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ID22R_p; function TID22R: String; implementation function TID22R: String; var N,K,ID,I :Integer; X,S :Real; R :Array [0..8] of Real; const T :Array [0..8] of Real = ( 0.0,0.0,0.0,2.0,4.0,6.0,8.0,8.0,8.0 ); A :Array [0..5] of Real = ( 0.0,-2.0,18.0,110.0,322.0,512.0 ); label _5; begin Result := ''; { результат функции } N := 6; X := 5.0; K := 3; ID := 0; Result := Result + Format('%s', [' ТЕСТОВЫЙ ПРИМЕР ДЛЯ ID22R']) + #$0D#$0A; for I:=1 to 3 do begin ID := I; S := ID22R(T,A,N,K,X,ID,R); Result := Result + Format('%s',[' PEЗYЛЬТАТ S=']); Result := Result + Format('%20.16f ',[S]) + #$0D#$0A; _5: end; UtRes('TID22R',Result); { вывод результатов в файл TID22R.res } exit; end; end. Результаты: S = 76., 30., 0.