Текст подпрограммы и версий iis2r_p.zip |
Тексты тестовых примеров tiis2r_p.zip |
Вычисление значения кусочно - полиномиальной функции в заданной точке.
Пусть кусочно - полиномиальная функция задана следующим образом: на каждом полуинтервале (xk, xk + 1), k = 0, 1, ..., N - 1, неравномерной сетки x0 < x1 < x2 < ... < xN она является полиномом степени M
Ak1 (x - xk)M + Ak2 (x - xk)M - 1 + ... + Ak M (x - xk) + Ak M + 1
с известными коэффициентами Ak1, Ak2, ..., Ak M + 1. Подпрограмма вычисляет значения этой кусочно - полиномиальной функции в заданной точке xt : x0 < xt < xN.
procedure IIS2R(X0 :Real; N :Integer; var X :Array of Real; M :Integer; var A :Array of Real; var Y0 :Real; var IERR :Integer);
Параметры
XT - | заданная точка xt, в которой ищется значение кусочно - полиномиальной функции (тип: вещественный); |
N - | заданное число полуинтервалов, N ≥ 2 (тип: целый); |
X - | вещественный одномерный массив размерности N + 1, в котоpом заданы узлы сетки xk; |
M - | заданная степень кусочно - полиномиальной функции (тип: целый); |
A - | вещественный двумерный массив размера N * (M + 1), в котоpом задаются на соответствующих местах коэффициенты Ai j кусочно - полиномиальной функции в порядке убывания степеней; |
YT - | вещественная переменная, содержащая вычисленное значение кусочно - полиномиальной функции в заданной точке xt; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IERR=65 - | когда заданное значение XT не принадлежит полуинтервалу (x0, xN]. |
Версии: нет
Вызываемые подпрограммы
UTI I10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы I IS2R. |
Замечания по использованию
Коэффициенты кусочно - полиномиальной функции помещаются в матрице A по столбцам. |
На сетке xk = (k - 1) * π / 4, k = 1, ..., 5, заданы значения коэффициентов интерполяционного полинома.
Unit TIIS2R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, IIS2R_p; function TIIS2R: String; implementation function TIIS2R: String; var M,N,IERR :Integer; YT :Real; const ХТ :Real = 0.134; X :Array [0..4] of Real = ( 0.0,0.7854,1.5708,2.3562,3.1416 ); A :Array [0..23] of Real = ( 0.0115,0.0028,-0.0036,0.0004,-0.0075,0.0301, 0.0467,0.0167,-0.1624,-0.1152,-0.0026,0.122,0.0, -0.355,-0.5005,-0.3512,1.0,0.7071,0.0,-0.7071,0.0, 0.7071,1.0,0.7071 ); begin Result := ''; { результат функции } N := 4; M := 5; IIS2R(XT,N,X,M,A,YT,IERR); Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; Result := Result + Format('%s',[' YT=']); Result := Result + Format('%20.16f ',[YT]) + #$0D#$0A; UtRes('TIIS2R',Result); { вывод результатов в файл TIIS2R.res } exit; end; end. Результат: YT = 0.1336