文档视界 最新最全的文档下载
当前位置:文档视界 › 函数插值

函数插值

函数插值
函数插值

#include

#include

int n;

double X[20],Y[20];//全局变量double f(double s)

{

double w;

w=1.0/(1.0+25*s*s);

return w;

}

//求原函数值

double Lagrange(double t) {

double y=0.0;//初始化y

int k,j;

for(k=0;k

{

double p=1.0;//初始化p

for(j=0;j

if(k!=j)//判断是否为同一个数{p=p*(t-X[j])/(X[k]-X[j]);} y=y+p*Y[k];//求和

}

return y;

}

//求插值结果

double fenduan(double z)

{

int a;

double m=0.0;

for(a=0;a

{

if(X[a]<=z&&z<=X[a+1])//确定x所在区间

{m=(Y[a]*(z-X[a+1])/(X[a]-X[a+1]))+(Y[a+1]*(z-X[a])/(X[a+1]-X[a]));} }

return m;

}

//求分段线性插值

void main()

{

cout<

int i;

double h;

double fenduan(double z);

double Lagrange(double t);

double f(double s);//申明要调用函数

cout<<"输入n节点个数(n>=2):";

cin>>n;

h=2.0/(n-1);//求步长

X[0]=-1.0;

for(i=0;X[i]<=1.0&&i<=19;i++)

{

Y[i]=1.0/(1.0+25*X[i]*X[i]);

X[i+1]=X[i]+h;

cout<

}//求得插值节点

int choose;

cout<

cout<>choose;

switch(choose)

{

case 1: cout<

break;

case 2: cout<

break;

default:cout<<"错误输入!"<

break;

}

double x[20];

for(i=0;i<20;i++)

{

cout<<"请输入x的值(-1.0<=x<=+1.0):";

cin>>x[i];//获得变量x的值

switch(choose)

{

case 1:

cout<<"插值结果:"<

case 2:

cout<<"插值结果:"<

default:

cout<<"请退出重新选择插值方法!"<

break;

}

}

}

相关文档