牛顿和拉格朗日插值算法

2016-02-19 21:36 21 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;//输出最终结果
      
  }
  

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

延伸阅读
挪威旅行攻略   说到挪威,大家首先想到的可能就是冰雪世界了,由于靠近北极气温自然非常低,如果你喜欢冰雪世界的话挪威自然是个好地方。 先说说松娜峡湾吧。距挪威第二大城市卑尔根不远的松娜峡湾(SOGNEFJORD )全长204公里,深1300米,号称世界上最长,最深的峡弯,被称为峡湾之冠。它包括奥兰峡湾(AURLANDSFJORD)和奈罗峡湾(NAROYFJ...
怎样和朗姆酒才健康?推荐朗姆酒的简单喝法 随着时代的发展,朗姆酒在东方国家也受到了很多人的喜爱。不过,你知道朗姆酒怎么喝最佳吗?在这里,为大家支支招,介绍几种朗姆酒的简单喝法,快来一起学两招吧。 朗姆酒的特点 朗姆酒是微黄、褐色的液体,具有细致、甜润的口感,芬芳馥郁的酒精香味。朗姆酒是否陈年并不重要...
在这一篇中我将和大家讲述铅笔画算法和木雕算法和它们的实现。为什么我要把这两个算法放在一起说呢,因为这两个算法是非常相似的。首先要说一下人的眼睛对于图像的观察,人的眼睛对于灰度(亮度)的敏感要远远大于对色彩的敏感,而人的眼睛对于暖色调和冷色调的敏感有要远大于对一般色彩的敏感度。 经过大量的测试,人们得到了一个经验...
标签: 服务器
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 ...

经验教程

821

收藏

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