拉格朗日插值法(板子)

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;
}

  

猜你喜欢

转载自www.cnblogs.com/bibibi/p/9342889.html