网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 手机学院 | 邮件系统 | 网络安全 | 认证考试
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.C语言初学者入门讲座 第二讲 数据.
.用C++实现可重用的数学例程.
.C语言程序设计(第7章 结构体与共.
.监视剪贴板内容.
.C++对象布局及多态实现之带虚函数.
.Visual Basic使用技巧.
.vb.net中windows服务的创建.
.简单坦克大战.
.C语言入门之函数(1).
.Device Drivers(设备驱动程序).
.256色汉字显示程序.
.C语言递归.
.《c语言程序设计》第八章:枚举,位.
.(02)数据结构题解-线性表.
.定义函数对象.
.C语言库函数 (D类字母).
.如何在RichEdit中实现上标下标.
.C++/CLI思辨录之再谈继承.
.C++ Builder 初学问与答(六).
.WinHelp API命令方法.

牛顿和拉格朗日插值算法

发表日期:2008-3-8

/*近日浏览文章时发现在这个网站上有好几篇问关于牛顿插值和拉格朗日插值的文章。本人正好写了这个代码,将它公布,希望对一些朋友有帮助。如程序中有什么问题请与我联系。QQ:421404493 E-mail:wbaobao#zj.com*/ //编译平台:2000+vc6.0 //实验一
//作者:计算机科学与技术02级2班 宝宝 421404493
#include<stdio.h>
#include<stdlib.h>
#include<iostream.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次插值):";//获得插值次数
  cin>>n;
  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;
  //cout<<f(0,j)<<endl;
  y=y+yt;
 }
 return y;
}
float lagrange(float x,int count)
{
 float y=0.0;
 for(int k=0;k<count;k++)//这儿默认为count-1次插值
 {
  float p=1.0;//初始化p
  for(int j=0;j<count;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组:";//要求用户输入数据组数
  cin>>count;
  if(count<=20)
   break;//检查输入的是否合法
  system("cls");
 }
//获得各组数据
 for(int i=0;i<count;i++)
 {
      cout<<"请输入第"<<i+1<<"组x的值:";
      cin>>d[i].x;
      cout<<"请输入第"<<i+1<<"组y的值:";
      cin>>d[i].y;
   system("cls");
 }
 cout<<"请输入x的值:";//获得变量x的值
 cin>>x;
 while(1)
 {
  int choice=3;
  cout<<"请您选择使用哪种插值法计算:"<<endl;
  cout<<"              (0):退出"<<endl;

  cout<<"              (1):Lagrange"<<endl;
  cout<<"              (2):Newton"<<endl;
  cout<<"输入你的选择:";
  cin>>choice;//取得用户的选择项
  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;
 }
 cout<<x<<"    ,        "<<y<<endl;//输出最终结果
    
}

上一篇:C++计算四则表达式的模板 人气:2079
下一篇:VC++下用MSComm控件实现串口通讯 人气:4766
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 2009年新年快乐