|
Текст подпрограммы и версий 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