Текст подпрограммы и версий 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