Текст подпрограммы и версий ii22r_p.zip , ii22e_p.zip |
Тексты тестовых примеров tii22r_p.zip , tii22e_p.zip |
Вычисление значения интерполяционной рациональной функции в заданной точке по модифицированной схеме Невилла.
Пусть заданы узлы сетки x1, x2, ..., xNA, упорядоченные по возрастанию: x1 < x2 < ...< xNA и значения y1, y2, ..., yNA интерполируемой функции f (x) в узлах этой сетки. Подпрограмма I I22R вычисляет значение Y интерполяционной рациональной функции
R(x) = PNN(x) / QNN(x) = = ( p0 + p1 x + ... + pNN xNN ) / ( q0 + q1 x + ... + qNN xNN )
в заданной точке X и оценку ошибки DY полученного значения по модифицированной схеме Невилла.
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
procedure II22R(var XA :Array of Real; var YA :Array of Real; NA :Integer; NN :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 ≥ 2*NN + 1 (тип: целый); |
NN - | заданная степень полиномов PNN (x) и QNN (x), NN ≥ 1 (тип: целый); |
X - | заданная точка, в которой ищется значение интерполяционной рациональной функции (тип: вещественный); |
Y - | вещественная переменная, содержащая вычисленное значение интерполяционной рациональной функции в точке X; |
DY - | вещественная переменная, содержащая оценку ошибки вычисленного значения интерполяционной рациональной функции в точке X; |
C, D - | вещественные векторы длины 2*NN + 1, используемые в подпрограмме в качестве рабочих; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
IERR=65 - | когда интерполируемая функция имеет полюс в заданной точке X; |
IERR=66 - | когда число узлов сетки меньше 2*NN + 1 . |
Версии
I I22E - | вычисление значения интерполяционной рациональной функции в заданной точке по модифицированной схеме Невилла в режиме расширенной (Extended) точности. При этом параметры XA, YA, X, Y, DY, C и D должны иметь тип Extended. |
Вызываемые подпрограммы
UTI I10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы I I22R. |
UTI I11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы I I22E. |
Замечания по использованию
Точка X не обязательно должна лежать внутри заданной сетки. В случае, когда X < x1 или X > xNA, подпрограммы I I22R и I I22E строят экстраполяционную рациональную функцию и вычисляют ее значение в точке X . |
Unit TII22R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, II22R_p; function TII22R: String; implementation function TII22R: String; var NA,I,NN,IERR :Integer; R,X,Y,DY :Real; ХА :Array [0..19] of Real; YA :Array [0..19] of Real; C :Array [0..8] of Real; D :Array [0..8] 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; NN := 4; II22R(XA,YA,NA,NN,X,Y,DY,C,D,IERR); Result := Result + Format(' %20.16f %20.16f ',[Y,DY]) + #$0D#$0A; Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; UtRes('TII22R',Result); { вывод результатов в файл TII22R.res } exit; end; end. Результаты: Y = 0.89121 DY = 0.96018*10 - 8 IERR = 0