|
Текст подпрограммы и версий ias1r_p.zip |
Тексты тестовых примеров tias1r_p.zip |
Вычисления значения кубического аппроксимирующего сплайна или его производной до третьего порядка при заданном значении аргумента на заданной (возможно неравномерной) сетке сплайна при заданных коэффициентах.
Пусть заданы сетка сплайна TX (I) , I = 1, ..., NX + 4 и его коэффициенты CX (I), I = 1, ..., NX + 2, где NX - число узлов исходной сетки.
Для вычисления значения сплайна или его производной до третьего порядка при заданном аргументе XX определяется номер интервала на массиве TX такой, чтобы XX принадлежал отрезку [ТХ (IХ), ТХ (IХ + 1)] , где 3 ≤ IX ≤ NX + 1 .
Тогда из свойств локальных базисных сплайнов выводятся рекурентные формулы для вычисления производной порядка IDX, где 0 ≤ IDX ≤ 3 :
A(I) = CX(IX - 3 + I) , I = 1, ..., 4 ;
A(I) = (4 - J) * ( A(I + 1) - A(I) ) / ( TX(IX + I) - TX(IX - 4 + I + J) ) ,
I = 1, ..., 4-J , J = 1 ,..., IDX ;
B(I) = TX(IX + I) - XX , I = 1, ..., 3-IDX ;
C(I) = XX - TX(IX + 1 - I) , I = 1,..., 3-IDX ;
A(I) = ( C(5 - I - J)*A(I + 1) + B(I)*A(I) ) / ( C(5 - I - J) + B(I) ) ,
I = 1 ,..., 4-J , J = IDX + 1 ,..., 3 .
После проведения этих вычислений значение содержится в A (1).
function IAS1R(var TX :Array of Real; NX :Integer;
var CX :Array of Real; IDX :Integer; XX :Real): Real;
Параметры
| TX - | вещественный вектоp длины NX + 4, содержащий значения узлов сетки сплайна; |
| NX - | заданное число узлов исходной сетки, NX ≥ 4 (тип: целый); |
| CX - | вещественный вектоp длины NX + 2, содержащий значения коэффициентов сплайна; |
| IDX - | заданный порядок вычисляемой производной, 0 ≤ IDX ≤ 3 (тип: целый); |
| XX - | заданное значение аргумента, при котоpом производятся вычисления, TX (3) ≤ XX ≤ TX (NX + 2) (тип: вещественный). |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
|
Подпрограмма - функция использует рабочие подпрограммы - функции IAS1R1 и IAS1R2. Для вычисления сетки и коэффициентов сплайна рекомендуется воспользоваться подпрограммой IAC1R. |
Unit TIAS1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IAC1R_p, IAS1R_p;
function TIAS1R: String;
implementation
function TIAS1R: String;
var
S :Real;
ТХ :Array [0..7] of Real;
СХ :Array [0..7] of Real;
const
X :Array [0..3] of Real = ( 2.0,3.0,4.0,5.0 );
FX :Array [0..3] of Real = ( 8.0,27.0,64.0,125.0 );
begin
Result := ''; { результат функции }
IAC1R(X,4,FX,1,1,12.0,2,30.0,TX,CX);
S := IAS1R(TX,4,CX,1,2.4);
Result := Result + Format('%s',[' PEЗYЛЬТАТ : S=']);
Result := Result + Format('%20.16f ',[S]) + #$0D#$0A;
UtRes('TIAS1R',Result); { вывод результатов в файл TIAS1R.res }
end;
end.
Результат: S = 17.280