program lagrang;
{ ***** ИНТЕРПОЛИРОВАНИЕ ПО ФОРМУЛЕ ЛАГРАНЖАВАНИЕ П}
const
Rmax = 15; { Максимальная размерность таблицы с данными }
type
Mas = array[1..Rmax] of real;
var
x, y: Mas; { Массивы табличных данных }
xt, Yr: real; { Координата интерполируемой точки и результат }
fname: string; { Имя файла }
{нтерполПроцедура ввода исходных данныхОЛИРОВА}
procedure Vvod_dannih(var x, y: Mas; var xt: real; var fname: string);
var
inp: text;
i: integer;
begin
write('Введите имя файла: ');
readln(fname);
assign(inp, fname);
reset(inp);
{ Ввод исходных данных из файла }
for i := 1 to Rmax do
read(inp, x[i]);
for i := 1 to Rmax do
read(inp, y[i]);
close(inp);
{ Ввод X интерполируемой точки }
repeat
write('Введите ординату X интерполируемой точки от ',
x[1]:0:3, ' до ', x[Rmax]:0:3, ': ');
readln(xt);
until (xt >= x[1]) and (xt <= x[Rmax]);
end;
{ reset(Функция вычисления значения по формуле ЛагранжаРМУЛЕ Л}
function Lagrange(xt: real; x, y: Mas): real;
var
i, j: integer;
pn, pv, s: real;
begin
s := 0;
for i := 1 to Rmax do
begin
pv := 1;
pn := 1;
for j := 1 to Rmax do
if i <> j then
begin
pv := pv * (xt - x[j]);
pn := pn * (x[i] - x[j]);
end;
s := s + y[i] * pv / pn;
end;
Lagrange := s;
end;
{ данныхПроцедура вывода результатаТЕРПОЛИ}
procedure Vivod_rezultata(xt, Yr: real);
begin
writeln;
writeln('******** РЕЗУЛЬТАТЫ ********');
writeln('X = ', xt:0:3);
writeln('Y = ', Yr:0:6);
end;
begin
{ Ввод данных }
Vvod_dannih(x, y, xt, fname);
{ Интерполяция }
Yr := Lagrange(xt, x, y);
{ Вывод результата }
Vivod_rezultata(xt, Yr);
readln;
end.