牛顿和拉格朗日插值算法

2016-02-19 21:36 8 1 收藏

今天图老师小编给大家精心推荐个牛顿和拉格朗日插值算法教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

【 tulaoshi.com - 编程语言 】

/*近日浏览文章时发现在这个网站上有好几篇问关于牛顿插值和拉格朗日插值的文章。本人正好写了这个代码,将它公布,希望对一些朋友有帮助。如程序中有什么问题请与我联系。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;//输出最终结果
      
  }
  

来源:https://www.tulaoshi.com/n/20160219/1626638.html

延伸阅读
标签: 服务器
TTL值最大值和默认值是多少   一、TTL的默认值是多少? 不同的操作系统,它的TTL值是不相同的。这里和大家谈谈一些常用的操作系统的默认TTL值,默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。域名的dns解析默认的TTL值一般是60。 二、操...
《最终幻想13》素材经验值加成算法 全部的素材各自有以下一种隐藏效果: 1.无效果 2.EXP BONUS+ 3.BONUS- 加成法为「EXP BONUS+ 素材」投入的累积数,不管素材的种类都会加算 EXP BONUS+ 素材 × 4 =BONUS×1.25 EXP BONUS+ 素材 × 8 =BONUS×1.5 EXP BONUS+ 素材 × 16 =BONUS×1.75 EXP BONUS+ 素材 × 20 =BONUS×2 ...
标签: 电脑入门
在WPS表格中当单元格公式计算结果为0时默认会显示0,用户可设置让单元格值为0时显示为空白而不显示0。 选择工具|选项菜单项,在选项对话框中选择视图选项卡,单击清除零值复选框,单击确定按钮返回。 此设置会令当前工作表中所有值为0的单元格全部显示为空白。以文本格式输入的0不会被隐藏。此设置只对当前工作表有效。
标签: Web开发
首先给扑克牌中每张牌设定一个编号,下面算法实现的编号规则如下: u 红桃按照从小到大依次为:1-13 u 方块按照从小到大依次为:14-26 u 黑桃按照从小到大依次为:27-39 u 梅花按照从小到大依次为:40-52 u 小王为53,大王为54 算法实现如下: u 首先按照以上编号规则初始化一个包含108个数字的数组 u 每次随机从该数组中抽取一个数字,...
在大碗中将红糖、蜂蜜、香草精和盐混合搅拌均匀 加入黄油后,用低火加热至糖浆完全融化 ...

经验教程

708

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部