牛顿和拉格朗日插值算法

王朝other·作者佚名  2008-06-01
宽屏版  字体: |||超大  

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有