double Lagrange(int N,vector<double>&X,vector<double>&Y,double x) {
//数据类型视情况改变
//N-插值点的个数,k次多项式要插k+1个点
//X,Y两个vector存xi,yi
//x--求f(x)
double result=0;
for(int i=0; i<N; i++) {
double temp=Y[i];
for(int j=0; j<N; j++) {//这段可预处理优化,优化后可变为O(n)
if(i!=j) {
temp = temp*(x-X[j]);
temp = temp/(X[i]-X[j]);
}
}
result += temp;
}
return result;
}
int main() {
cout<<"请输入差值次数n的值:"<<endl;
int N;
cin>>N;
vector<double>X(N,0);
vector<double>Y(N,0);
cout<<"请输入插值点对应的值及函数值(Xi,Yi):"<<endl;
for(int a=0; a<N; a++) {
cin>>X[a]>>Y[a];
}
cout<<"请输入要求值x的值:"<<endl;
double x;
cin>>x;
double result=Lagrange(N,X,Y,x);
cout<<"由拉格朗日插值法得出结果: "<<result<<endl;
return 0;
}