(3)理解了上面的思想原理之后,就可以进行程序实现了 ---我觉得再多的理论有时候真的会很吓唬人,但是,通过程序来实现时,不但增加了自己对算法思想的理解,而且还无疑说明了两个问题:a 程序说明一切,再高端的算法,如果程序实现不了,那纯属扯淡 b,动手多实践 才是王道! (4)下面把我个人所实现的程序供大家参考,如果有什么问题,欢迎指正,在此不胜感激!!! include<iostream> using namespace std;//预先定义插值节点的个数为1000个,根据控制台输入的个数num从而确定插值节点的个数const int N=1000;//arrX[N],arrY[N]分别存放的是插值节点(Xi,Yi)中的Xi,Yi,参数n为插值节点的个数,而参数x为待求解的插值节点的X值//函数返回值为求解出来的插值节点X对应的Y值//注意整个过程涉及的变量,除了循环变量为int外,其他均为floatfloat Lagrange(float arrX[],float arrY[],int n,float x){float yResult=0.0;//LValue[N]存放的是每次求解的插值基函数的通项float LValue[N];//循环变量k,mint k,m;//插值基函数中的上下累乘temp1,temp2float temp1,temp2;for(k=0;k<n;k++){temp1=1.0;temp2=1.0;for(m=0;m<n;m++){if(m==k){continue;}temp1 *= (x-arrX[m]);temp2 *= (arrX[k]-arrX[m]);}LValue[k]=temp1/temp2;}for(int i=0;i<n;i++){yResult += arrY[i]*LValue[i];}return yResult;}int main(){float arrX[N],arrY[N];int num; cout<<"输入插值节点的个数(小于"<<N<<"个): ";cin>>num;cout<<"n--接下来输入这些插值节点(先输入X 再输入对应的Y)--n";for(int i=0;i<num;i++){cout<<"第"<<i+1<<"个节点的X值: ";cin>>arrX[i];cout<<"第"<<i+1<<"个节点的Y值: ";cin>>arrY[i];}float X;cout<<"n--请输入待求解的插值节点的X值--n";cin>>X; float Res = Lagrange(arrX,arrY,num,X);cout<<"n--插值结果为: "<<Res<<endl;return 0;} <span style="font-size:14px;">(5)下面是进行测试的结果,进行插值的三个节点为(11,0.190809),(12,0.107912),(13,0.224951) ,待测试的是(11.5,Y) 其中的函数 为y=sin(x) </span><span style="font-size:14px;"> 测试结果为0.199368或者0.199369</span>