一元多项式分段插值

内插法:

原理:

数据输入:

  插值点数据:键入

  插值多项式:把线性和抛物线值函数式f(x)分别写在两个c++函数中

数据存储:

  已知点数据:用两个全局一维数组存贮 const double x[7],fx[7]并初始化

  插值点数据:用一个变量存储double xx;

  插值多项式:对于线性和抛物线插值,分别用两个函数实现;

  说明:插值区间即数组x[L...R],L为数组的下标;

  线性插值函数:double Linear(double xx,int L)

  抛物线插值函数:double Parabola(double xx,int L)

数据处理:

  插值算法设计:分段线性和抛物线插值;  

  插值函数 :本例选用N次拉格朗日插值多项式;

 

  


  1. #include <iostream>   
  2. #include<cmath>  
  3. using namespace std;  
  4. void La(float (* xy)[8],float x,int n)  
  5. {  
  6.    float fx(0),t;  
  7.    int i,j;  
  8.    for(i=0;i<=n;i++)                          
  9.    {  
  10.        t=1;  
  11.        for(j=0;j<=n;j++)  
  12.        {  
  13.            if(j==i)  
  14.                continue;  
  15.            else  
  16.                t=t*(x-xy[0][j])/(xy[0][i]-xy[0][j]);//求插值基函数  
  17.        }  
  18.        fx=fx+t*xy[1][i];  
  19.    }  
  20.    cout<<"插值点"<<x<<"的值为:"<<fx<<endl;  
  21. }  
  22.   
  23.   
  24. int main()  
  25. {  
  26.     cout<<"此程序最多可以用于计算8个节点的插值"<<endl;  
  27.     float xy[8][8];  
  28.     int i,j;  
  29.     float m;  
  30.     cout<<"请输入节点个数:";  
  31.     cin>>j;  
  32.   
  33.     cout<<"请 输 入 x的 值:";   //输入各个节点的x 的值  
  34.     for(i=0;i<j;i++)  
  35.         cin>>xy[0][i];  
  36.     cout<<"请输入对应的y值:";    //输入对应于x 的y的值  
  37.     for(i=0;i<j;i++)  
  38.         cin>>xy[1][i];  
  39.     cout<<"请输入需要求的插值点m:";     //输入对分的次数  
  40.     cin>>m;  
  41.     cout<<"用拉格朗日插值法求解为:"<<endl;  
  42.     La(xy,m,j);                              //用拉格朗日法求解  
  43.      
  44.     return 0;  
  45. }   
 

 

posted on 2018-06-12 17:22  冲天香阵透长安  阅读(486)  评论(0)    收藏  举报

导航