拉格朗日插值法(板子)
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; }