数值分析插值算法源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

if(x

{i=1;goto loop;}

if(x>a[4])

{i=4;goto loop;}

i=1;

相关文档
最新文档