Подпрограмма: 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