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