首页 > 编程知识 正文

用C 语言程序实现拉格朗日插值公式,牛顿迭代法公式程序实现

时间:2023-05-04 01:13:14 阅读:263970 作者:3154

快三最准高手教学C++程序实现Lagrange插值公式       Lagrange插值公式,是属于数值分析方面的内容,关于其应用,在这里就不多说。此处我想用C语言程序来实现n各插值节点插值公式的求解,并求出在某一个插值节点对应的函数值。    对于Lagrange插值算法的基本思想,在这里我只想略提两点,一个是拉格朗日插值公式,一个是拉格朗日插值基函数的求解。因为这两者才是算法需要解决的最根本的问题。   (1)采用插值多项式  来近似的逼近拉格朗日差值多项式   即 其中   (2)上面的插值多项式中的  即为拉格朗日插值多项式的插值基函数的通项 而且  
   (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>


  


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。