Текст подпрограммы и версий
ip02r_p.zip , ip02e_p.zip
Тексты тестовых примеров
tip02r_p.zip , tip02e_p.zip

Подпрограмма:  IP02R (модуль IP02R_p)

Назначение

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

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

Пусть заданы узлы сетки  x1, x2, ..., xNA, упорядоченные по возрастанию:  x1 < x2 < ...< xNA и значения  y1, y2, ..., yNA интерполируемой функции  f (x) в узлах этой сетки. IP02R вычисляет значение Y интерполяционного полинома степени NP в заданной точке X и оценку ошибки DY полученного значения по модифицированной схеме Невилла.

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.

Использование

procedure IP02R(var XA :Array of Real; var YA :Array of Real;
                NA :Integer; NP :Integer; X :Real; var Y :Real;
                var DY :Real; var C :Array of Real;
                var D :Array of Real; var IERR :Integer);

Параметры

XA - вещественный вектор длины NA, содержащий узлы заданной сетки  x1, x2, ..., xNA, упорядоченные по возрастанию;
YA - вещественный вектор длины NA, содержащий значения  y1, y2, ..., yNA интерполируемой функции в узлах заданной сетки;
NA - количество узлов сетки, NA ≥ NP + 1 (тип: целый);
NP - заданная степень интерполяционного полинома, NP ≥ 1 (тип: целый);
X - заданная точка, в которой ищется значение интерполяционного полинома (тип: вещественный);
Y - вещественная переменная, содержащая вычисленное значение интерполяционного полинома в точке X;
DY - вещественная переменная, содержащая оценку ошибки вычисленного значения интерполяционного полинома в точке X;
C, D - вещественные векторы длины NP + 1, используемые в подпрограмме в качестве рабочих;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом
IERR=65 - когда по крайней мере два узла сетки совпадают;
IERR=66 - когда число узлов сетки меньше или равно степени интерполяционного полинома.

Версии

IP02E - вычисление значения интерполяционного полинома по модифицированной схеме Невилла в режиме расширенной (Extended) точности. При этом параметры XA, YA, X, Y, DY, C и D должны иметь тип Extended.

Вызываемые подпрограммы

UTIP10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы IP02R.
UTIP11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы IP02E.

Замечания по использованию

  Точка X не обязательно должна лежать внутри заданной сетки. В случае, когда X < x1 или X > xNA, подпрограммы IP02R и IP02E строят экстраполяционный полином степени NP и вычисляют его значение в точке X.

Пример использования

Unit TIP02R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IP02R_p;

function TIP02R: String;

implementation

function TIP02R: String;
var
NA,I,NP,IERR :Integer;
R,X,Y1,Y,DY :Real;
ХА :Array [0..19] of Real;
YA :Array [0..19] of Real;
C :Array [0..4] of Real;
D :Array [0..4] of Real;
label
_1;
begin
Result := '';  { результат функции }
R := 0.0;
NA := 20;
for I:=1 to NA do
 begin
  XA[I-1] := R;
  YA[I-1] := Sin(XA[I-1]);
_1:
  R := R+0.2;
 end;
X := 1.1;
NP := 4;
IP02R(XA,YA,NA,NP,X,Y,DY,C,D,IERR);
Y1 := Sin(X);
Result := Result + Format(' %20.16f  %20.16f  %20.16f %20.16f ',
 [X,Y,DY,Y1]) + #$0D#$0A;
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('TIP02R',Result);  { вывод результатов в файл TIP02R.res }
exit;
end;

end.

Результаты:
      
             Y = 0.89121 
          DY = 0.000034719 
       IERR = 0