|
Текст подпрограммы и версий ii23r_p.zip , ii23e_p.zip |
Тексты тестовых примеров tii23r_p.zip , tii23e_p.zip |
Рациональная интерполяция таблично - заданной функции с помощью непрерывных дробей.
Пусть заданы m точек x1 < x2 < x3 < ... < xm , в которых известны значения функции y = f (x) : y1, y2, y3,..., ym. Подпрограмма II23R по заданным ( xi, yi ), i = 1, 2,..., m, строит интерполирующую непрерывную дробь
a1 + ( x - x1 ) / ( a2 + ( x - x2 ) / ( a3 + ... + ( x - xm-1 ) / am ) ... )
Кроме того, подпрограмма II23R приводит вычисленную непрерывную дробь к рациональной функции
( b0 + b1 x + ... + bn xn ) / ( c0 + c1 x + ... + cn xn ) ,
где n ≤ m ÷ 2 . Здесь ÷ - означает целое деление.
procedure II23R(M :Integer; var X :Array of Real;
var Y :Array of Real; var A :Array of Real;
var B :Array of Real; var C :Array of Real;
var P :Array of Real; var Q :Array of Real);
Параметры
| M - | заданное число точек xi , i = 1, 2,..., m (тип: целый); |
| X - | вещественный вектор длины M, содержащий заданные точки xi , i = 1, 2,..., m; |
| Y - | вещественный вектор длины M, содержащий значения заданной функции в точках xi , i = 1, 2,..., m; |
| A - | вещественный вектор длины M, содержащий вычисленные значения коэффициентов интерполирующей непрерывной дроби; |
| B, C - | вещественные векторы длины M ÷ 2 + 1, содержащие коэффициенты полиномов соответственно в числителе и знаменателе интерполирующей рациональной функции; |
| P, Q - | вещественные векторы длины M ÷ 2 + 1, используемые в подпрограмме в качестве рабочих. |
Версии
| II23E - | рациональная интерполяция таблично - заданной функции с помощью непрерывных дробей в режиме расширенной (Extended) точности; при этом параметры X, Y, A, B, C, P и Q должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit tii23r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, II23R_p;
function tii23r: String;
implementation
function tii23r: String;
var
M,_i :Integer;
X :Array [0..4] of Real;
Y :Array [0..4] of Real;
A :Array [0..4] of Real;
B :Array [0..2] of Real;
C :Array [0..2] of Real;
P :Array [0..2] of Real;
Q :Array [0..2] of Real;
begin
Result := ''; { результат функции }
X[0] := 50.0;
X[1] := 65.0;
X[2] := 60.0;
X[3] := 95.0;
X[4] := 75.0;
Y[0] := -40.0;
Y[1] := 25.0;
Y[2] := 10.0;
Y[3] := 30.0;
Y[4] := -20.0;
M := 5;
II23R(M,X,Y,A,B,C,P,Q);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%20.16f ',[B[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
begin
Result := Result + Format('%20.16f ',[C[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tii23r',Result); { вывод результатов в файл tii23r.res }
exit;
end;
end.
Результаты:
A = ( -40, 0.2307692, 162.5, -0.3901895, -68.50479 );
B = ( 236142.4, -7220.216, 53.99522 );
C = ( 2825.957, -111.5789, 1 )