Текст подпрограммы и версий
ip01r_p.zip , ip01e_p.zip
Тексты тестовых примеров
tip01r_p.zip , tip01e_p.zip

Подпрограмма:  IP01R (модуль IP01R_p)

Назначение

Вычисление коэффициентов интерполяционного полинома

Математическое описание

Пусть заданы узлы сетки  x1, x2, ..., xN, упорядоченные по возрастанию:  x1 < x2 < ...< xN и значения  y1, y2, ..., yn функции  f (x) в узлах этой сетки. Подпрограмма IP01R вычисляет коэффициенты  ci  ( i = 1, 2, ..., N ) интерполяционного полинома

                   P(x)  =  c1 + c2 x + c3 x2 + ... + cN xN-1

 степени N - 1. 

Отметим, что коэффициенты  ci интерполяционного полинома удовлетворяют системе линейных алгебраических уравнений

   |   1   x1   x12   ...   x1N-1   |         |   c1   |          |   y1   |
   |   1   x2   x22   ...   x2N-1   |         |   c2   |    =    |   y2   |
    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
   |   1   xN   xN2  ...   xNN-1  |         |   cN  |          |   yN  |

 с матрицей Вандермонда.

Решение этой системы с транспонированной матрицей осуществляется подпрограммой ASV1R .

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.

Использование

procedure IP01R(var X :Array of Real; var Y :Array of Real;
                N :Integer; var COF :Array of Real;
                var S :Array of Real);

Параметры

X - вещественный вектор длины N, содержащий узлы заданной сетки  x1, x2, ..., xN, упорядоченной по возрастанию;
Y - вещественный вектор длины N, содержащий значения  y1, y2, ..., yN функции  f (x) в узлах заданной сетки;
N - количество узлов сетки, N ≥ 2 (тип: целый);
COF - вещественный вектор длины N, содержащий вычисленные коэффициенты интерполяционного полинома;
S - вещественный вектор длины N, используемый в подпрограмме в качестве рабочего.

Версии

IP01E - вычисление коэффициентов интерполяционного полинома в режиме расширенной (Extended) точности; при этом параметры X, Y, COF и S должны иметь тип Extended.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

Unit tip01r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, IP01R_p;

function tip01r: String;

implementation

function tip01r: String;
var
N,K,J,_i :Integer;
A,B :Real;
X :Array [0..4] of Real;
Y :Array [0..4] of Real;
COF :Array [0..4] of Real;
S :Array [0..4] of Real;
X1 :Array [0..4] of Real;
Y1 :Array [0..4] of Real;
const
SYS001 :Real = 3.1415926535897932384626433832795;
label
_1,_5;
begin
Result := '';  { результат функции }
N := 5;
A := 0.0;
B := 1.0;
for K:=1 to N do
 begin
  X1[K-1] := (B+A)/2+((B-A)/2)*Cos((2*K-1)*SYS001/(2*N));
_1:
  Y1[K-1] := Sin(X1[K-1])/X1[K-1];
 end;
for J:=1 to N do
 begin
  K := N-J+1;
  X[K-1] := X1[J-1];
_5:
  Y[K-1] := Y1[J-1];
 end;
IP01R(X,Y,N,COF,S);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[COF[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tip01r',Result);  { вывод результатов в файл tip01r.res }
exit;
end;

end.
      

Результаты:
     
        COF  =  ( 0.999999, 0.202257E-04, 
                       -0.166825, 0.464717E-03, 0.781631E-02 )