牛顿和拉格朗日插值算法

qing520753

qing520753

2016-02-19 21:36

今天图老师小编给大家精心推荐个牛顿和拉格朗日插值算法教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~
/*近日浏览文章时发现在这个网站上有好几篇问关于牛顿插值和拉格朗日插值的文章。本人正好写了这个代码,将它公布,希望对一些朋友有帮助。如程序中有什么问题请与我联系。QQ:421404493 E-mail:wbaobao#zj.com*///编译平台:2000+vc6.0//实验一
  //作者:计算机科学与技术02级2班 宝宝 421404493
  #includestdio.h
  #includestdlib.h
  #includeiostream.h
  typedef strUCt data
  {
   float x;
   float y;
  }Data;//变量x和函数值y的结构
  Data d[20];//最多二十组数据
  float f(int s,int t)//牛顿插值法,用以返回插商
  {
   if(t==s+1)
    return (d[t].y-d[s].y)/(d[t].x-d[s].x);
   else
          return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);  
  }
  float Newton(float x,int count)
  {
   int n;
   while(1)
   {
       cout"请输入n值(即n次插值):";//获得插值次数
    cinn;
    if(n=count-1)// 插值次数不得大于count-1次
     break;
    else
     system("cls");
   }
  //初始化t,y,yt。
   float t=1.0;
   float y=d[0].y;
   float yt=0.0;
  //计算y值
   for(int j=1;j=n;j++)
   {
    t=(x-d[j-1].x)*t;
    yt=f(0,j)*t;
    //coutf(0,j)endl;
    y=y+yt;
   }
   return y;
  }
  float lagrange(float x,int count)
  {
   float y=0.0;
   for(int k=0;kcount;k++)//这儿默认为count-1次插值
   {
    float p=1.0;//初始化p
    for(int j=0;jcount;j++)
    {//计算p的值
     if(k==j)continue;//判定是否为同一个数
     p=p*(x-d[j].x)/(d[k].x-d[j].x);
    }
    y=y+p*d[k].y;//求和
   }
   return y;//返回y的值
  }
  void main()
  {
   float x,y;
   int count;
   while(1)
   {
    cout"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数
    cincount;
    if(count=20)
     break;//检查输入的是否合法
    system("cls");
   }
  //获得各组数据
   for(int i=0;icount;i++)
   {
        cout"请输入第"i+1"组x的值:";
        cind[i].x;
        cout"请输入第"i+1"组y的值:";
        cind[i].y;
     system("cls");
   }
   cout"请输入x的值:";//获得变量x的值
   cinx;
   while(1)
   {
    int choice=3;
    cout"请您选择使用哪种插值法计算:"endl;
    cout"              (0):退出"endl;
  
     cout"              (1):Lagrange"endl;
    cout"              (2):Newton"endl;
    cout"输入你的选择:";
    cinchoice;//取得用户的选择项
    if(choice==2)
    {
     cout"你选择了牛顿插值计算方法,其结果为:";
     y=Newton(x,count);break;//调用相应的处理函数
    }
          if(choice==1)
    {
     cout"你选择了拉格朗日插值计算方法,其结果为:";
     y=lagrange(x,count);break;//调用相应的处理函数
    }
    if(choice==0)
     break;
    system("cls");
    cout"输入错误!!!!"endl;
   }
   coutx"    ,        "yendl;//输出最终结果
      
  }
  
展开更多 50%)
分享

猜你喜欢

牛顿和拉格朗日插值算法

编程语言 网络编程
牛顿和拉格朗日插值算法

轮回的拉格朗日动漫高清图集

电脑网络
轮回的拉格朗日动漫高清图集

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Photoshop插值放大图像浅析

PS PS教程
Photoshop插值放大图像浅析

Photoshop如何选择“插值”的方式

PS PS教程
Photoshop如何选择“插值”的方式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

马走日棋盘算法

C语言教程 C语言函数
马走日棋盘算法

教你Vista 壁纸插值解决方法

电脑入门
教你Vista 壁纸插值解决方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

现学现用WPS Office,小技巧大帮助

现学现用WPS Office,小技巧大帮助

用好HTML表单的选择框

用好HTML表单的选择框
下拉加载更多内容 ↓