Интерполяционный полином
тут.
Здесь же интерполяционный полином Лагранжа реализуем в виде метода класса для выполнения интерполяции на основе данных, представленных в виде массивов-полей того же класса. Программный код приведен в следующем листинге.
На входе - набор узловых точек \({x_{i}}\), заданных своими координатами на плоскости и набор значений некоторой функции в этих точках: \({y_{i}}\). Задача состоит в том, что построить полином, график которого проходит через эти точки. Графически это продемонстрировано на рисунке. Красным цветом на рисунке выделены указанные точки с координатами из заданных исходных данных, а синяя линия - график, который построен с использованием интерполяционного полинома. В данном случае будет использован полинмо Лагранжа для интерполяции. Напомним, что интерполяцио́нный многочле́н Лагра́нжа — многочлен минимальной степени, принимающий данные значения в данном наборе точек. Подробнее о методе и полиноме можно прочитать
#include#include using namespace std; const int n=9; class Interpol{ double psi(int i,double z){ double tmp=1; int j; for(j=0; j < i; j++) tmp*=(z-x[j])/(x[i]-x[j]); for(j=i+1; j <= n; j++) tmp*=(z-x[j])/(x[i]-x[j]); return tmp;} public: double x[n+1]; double y[n+1]; double Lagr(double z){ double s=0; int i; for(i=0; i <= n; i++) s+=y[i]*psi(i,z); return s; } }; int main(){ int i; double x; Interpol obj; for(i=0; i <= n; i++){ obj.x[i]=i; obj.y[i]=i*(i-n/3)*(i-n+1)+0.001*(rand()%100-50); cout << obj.y[i]<<" ";} cout << endl; do{ cout << "x = "; cin >> x; cout<<"L(x)=" << obj.Lagr(x) << endl; }while(x >= 0&&x <= n); return 0;}