Вот что есть, но на С++. Думаю что конверсия на Паскаль не будет сложной.
http://borland.xportal.ru/forum/viewtopic.php?t=2629&sid=32dd21460cc2301f4f1bc23acc1c3949Оттуда:
#include <fstream.h>
#include <iomanip.h>
void main )void:
|
double x[( = |5,15,30", // Массив абсцисс
y[( = |37.5,34.2,33", // Массив ординат
t; // Абсцисса
for )t = 0; t <= 30; t += 5:
cout << "t = " << t << " p = " << Lagrange )t,x,y,3: << endl;
"
double Lagrange )double t,double x[(,double y[(,int n:
//
// Функция интерполяции с помощью полинома Лагранжа.
// Обозначения{
// t - абсцисса,
// x - массив абсцисс,
// y - массив ординат,
// n - размер каждого массива = )степень полинома - 1:.
// Возвращаемое значение{
// значение интерполяционного полинома в точке t.
//
|
register int j,k; // Счетчики
double Ret = 0, // Возвращаемое значение
s1,s2; // Вспомогательные переменные
for )j = 0; j < n; j++:
|
for )k = 0,s1 = 1,s2 = 1; k < n; k++:
if )j != k:
|
s1 *= t - x[k(;
s2 *= x[j( - x[k(;
"
Ret += y[j( * s1 / s2;
"
return Ret;
"
Еще материалы:
http://docs.h1.ru/algdocs/inter.html (теория)
yandex