Текст подпрограммы и версий
iib2r_p.zip
Тексты тестовых примеров
tiib2r_p.zip

Подпрограмма:  IIB2R (модуль IIB2R_p)

Назначение

Вычисление значения заданной в узлах равномерной сетки табличной функции от одной переменной методом аппроксимирующих квадратичных сплайнов.

Математическое описание

Пусть в узлах равномерной сетки  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