/**
拉格朗日插值计算
拉格朗日插值公式:
n n
Pn(x(i))= ∑〔 ∏ (x-x(j))/(x(k)-x(j)) 〕y(k)
k=0 j=0
j≠k
属性:插值计算法
n
精度(局部截断误差):| f(x) - Pn(x) | = [f(ε)] / (n+1)! ∏ ( x - x(k) ) (注:其中[f(ε)]为f(ε)第n+1次求导的表达式)
k=0
《数值分析简明教程》-2 Editon -高等教育出版社 -page 18 -算法流程图
代码维护:2005.6.11 DragonLord
**/
#include<iostream.h>
int main()
{
float x;//插值
float p[10][2];//已知(x0,y0),(x1,y1)...
int n;//输入已知插值组数
float y,t;
int k;
cout<<"输入插值组数:"<<endl;
cin>>n;
cout<<"输入"<<n<<"组已知插值数(X,Y)"<<endl;
for(int i=0;i<n;i++)
{
cin>>p[i][0]>>p[i][1];
}
cout<<"输入插值:"<<endl;
cin>>x;
y=0;
k=0;
for(k=0;k<n;k++)
{
t=1;
for(i=0;i<n;i++)
{
if(i!=k)
{
t=t*(x-p[i][0])/(p[k][0]-p[i][0]); //key step
}
}
y=y+p[k][1]*t;
}
cout<<"插值结果:"<<y<<endl;
return 0;
}