Текст подпрограммы и версий iib2r_p.zip |
Тексты тестовых примеров tiib2r_p.zip |
Вычисление значения заданной в узлах равномерной сетки табличной функции от одной переменной методом аппроксимирующих квадратичных сплайнов.
Пусть в узлах равномерной сетки x K: x1 < x2 < ... < x M с шагом H: x K + 1 = x K + H заданы значения yK = y (x K) , а узлы t K сетки, на которой строятся аппроксимирующие сплайны, таковы, что t K = x K - H / 2.
Значение аппроксимирующего квадратичного сплайна вычисляется по формулам:
S (x) = y2 + ( y2 - y1 ) ( x - x2 ) / H , x ∈ [x1, t3] i+1 S (x) = ∈ y K s K-1 ( x ) , x ∈ [t i , t i + 1] , i = 3, ..., M-3 k = i-1 S (x) = yM-1 + ( yM - yM-1 ) ( x - x M ) / H , x ∈ [t M - 2, x M] ,
где s K (x) - квадратичный В - сплайн [1], построенный по узлам t K, t K + 1, t K + 2.
А.И.Гребенников. Аппроксимация квадратичными сплайнами, Численный анализ на ФОРТРАНе, вып.15, Изд - во МГУ, 1976.
procedure IIB2R(var F :Array of Real; M :Integer; A :Real; H :Real; X :Real; var S :Real; var IERR :Integer);
Параметры
F - | вещественный вектоp длины M значений заданной табличной функции; |
M - | число узлов сетки (тип: целый); |
A - | первый узел сетки x1 (тип: вещественный); |
H - | шаг сетки, H > 0 (тип: вещественный); |
X - | аргумент, при котоpом производятся вычисления (тип: вещественный); |
S - | вещественная переменная, которая полагается pавной вычисленному значению функции; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IERR=65 - | когда зафиксирована ошибка в задании шага, H ≤ 0; |
IERR=66 - | когда аргумент X лежит вне отрезка [x1, x M]. |
Версии: нет
Вызываемые подпрограммы
UTI I12 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы I IB2R. |
Замечания по использованию: нет
Unit tiib2r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, IIB2R_p; function tiib2r: String; implementation function tiib2r: String; var K,IR :Integer; PI,S :Real; F :Array [0..5] of Real; X :Array [0..5] of Real; label _1; begin Result := ''; { результат функции } PI := 3.141592653/5.0; for K:=1 to 6 do begin X[K-1] := (K-1)*PI; F[K-1] := Cos(X[K-1]); _1: end; IIB2R(F,6,0.0,PI,X[2],S,IR); Result := Result + Format(' %20.16f ',[S]) + #$0D#$0A; UtRes('tiib2r',Result); { вывод результатов в файл tiib2r.res } exit; end; end. Результат: S = 0.29