/**
拉格朗日插值計算
拉格朗日插值公式:
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次求導(dǎo)的表達(dá)式) k=0
《數(shù)值計算方法與算法》第二版 - 科學(xué)出版社 P19
代碼維護(hù):2007.04.18 pengkuny
**/
float Lagrange(float px[], float py[], int n, float x)


{//px,py:插值點(Xi,Yi) n:插值點個數(shù) x:待計算的函數(shù)點
float y = 0;
for(int k=0; k<n; k++)//k控制Lagrange基函數(shù)序列

{
float tmp = 1;//tmp表示Lagrange基函數(shù)
for(int i=0;i<n;i++)

{
if(i!=k)

{
tmp = tmp * (x-px[i])/(px[k]-px[i]); //key step
}
}
y = y + py[k]*tmp;
}
return y;
}

int main()


{
float x;//插值
float px[10];//已知(x0,y0),(x1,y1)
float py[10];
int n;//輸入已知插值組數(shù)

cout<<"輸入插值組數(shù):"<<endl;
cin>>n;
cout<<"輸入"<<n<<"組已知插值數(shù)(X,Y)"<<endl;
for(int i=0; i<n; i++)

{
cin>>px[i]>>py[i];
}
cout<<"輸入插值:"<<endl;
cin>>x;

cout<<"Lagrange插值結(jié)果:"<<Lagrange(px, py, n, x)<<endl;

system("pause");
return 0;
}
posted on 2007-04-20 10:54
哈哈 閱讀(2836)
評論(1) 編輯 收藏 引用