数值分析插值算法源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
float f(float x) //计算ex的值
{
return (exp(x));
}
float g(float x) //计算根号x的值
{
return (pow(x,0.5));
}
void linerity () //线性插值
{
float px,x;
float x0,x1;
printf("请输入x0,x1的值\n");
scanf("%f,%f",&x0,&x1);
printf("请输入x的值: ");
scanf("%f",&x);
px=(x-x1)/(x0-x1)*f(x0)+(x-x0)/(x1-x0)*f(x1);
printf("f(%f)=%f \n",x,px);
}
void second () //二次插值
{
float x0,x1,x2,x,px;
x0=0;
x1=0.5;
x2=2;
printf("请输入x的值:");
scanf("%f",&x);
px=((x-x1)*(x-x2))/((x0-x1)*(x0-x2))*f(x0)+((x-x0)*(x-x2))/((x1-x0)*(x1-x2))*f(x1)+((x-x0)* (x-x1))/((x2-x0)*(x2-x1))*f(x2);
printf("f(%f)=%f\n",x,px);
}
void Hermite () //Hermite插值
{
int i,k,n=2;
int flag1=0;
printf("Hermite插值多项式H5(x)=");
for(i=0;i<=n;i++)
{
int flag=0;
flag1++;
if(flag1==1)
{
printf("y%d[1-2(x-x%d)*(",i,i);
}
else
{
printf("+y%d[1-2(x-x%d)*(",i,i);
}
for(k=0;k<=n;k++)
{
if(k!=i)
{
flag++;
if(flag==1)
{
printf("(1/x%d-x%d)",i,k);
}
else
{
printf("+(1/x%d-x%d)",i,k);
}
}
}
printf(")]*(");
for(k=0;k<=n;k++)
{
if(i!=k)
{
printf("[(x-x%d)/(x%d-x%d)]2",i,k,i);
}
}
printf(")");
}
printf("\n");
}
void sectionl () //分段线性插值
{
float x[5]={2.0,2.1,2.2,2.3,2.4};
float y;
printf("请输入y:");
scanf("%f",&y);
if(y>=2.0&&y<2.1)
{
float px;
px=((y-x[1])/(x[0]-x[1]))*g (x[0])+((y-x[0])/(x[1]-x[0]))*g (x[1]);
printf("f(%f)=%f\n",y,px);
}
else if(y>=2.1&&y<2.2)
{
float px;
px=((y-x[2])/(x[1]-x[2]))*g (x[1])+((y-x[1])/(x[2]-x[1]))*g (x[2]);
printf("f(%f)=%f\n",y,px);
}
else if(y>=2.2&&y<2.3)
{
float px;
px=((y-x[3])/(x[2]-x[3]))*g (x[2])+((y-x[2])/(x[3]-x[2]))*g (x[3]);
printf("f(%f)=%f\n",y,px);
}
else if(y>=2.3&&y<2.4)
{
float px;
px=((y-x[4])/(x[3]-x[4]))*g (x[3])+((y-x[3])/(x[4]-x[3]))*g (x[4]);
printf("f(%f)=%f\n",y,px);
}
else if(y>2.4) printf("**********ERROR!******************\n"); }
void sectionp ()
{
int i;
float a[5]={2.0,2.1,2.2,2.3,2.4};
float x,y;
printf("input the data: x?\n");
scanf("%f",&x);