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