lisp抛物线插值_抛物线插值
#include<stdio.h>
#include<math.h>
#define m 10
void main()
{
int i,n;
float x[m],y[m],xgiven,yresult,yresult10,yresult20,yresult30,yresult11,yresult21,yresult31;
printf("\n<抛物线插值法>\n");
printf("请输入已知点个数(少于%d个):\n",m);
scanf("%d",&n);
printf("\n请输入已知坐标点:\n");
for(i=0;i<n;i++)
{
printf("\n点(%d)=",i);
scanf("%f%f",&x[i],&y[i]);
}
printf("\n请输入求解坐标点:");
scanf("%f",&xgiven);
if(xgiven<x[0]||xgiven>x[n-1])
printf("越界\n");
else
{
for(i=1;i<n-1;i++)
{
if(xgiven<=x[i])
{
if(i=1)
break;
else if(fabs(xgiven-x[i-1])<=fabs(x[i]-xgiven))
{
i=i-1;
break;
}
}
}
if(x[n-2]<xgiven&&xgiven<=x[n-1])
i=n-2;
yresult10=y[i-1]*(xgiven-x[i])*(xgiven-x[i+1]);
yresult11=(x[i-1]-x[i])*(x[i-1]-x[i+1]);
yresult20=y[i]*(xgiven-x[i-1])*(xgiven-x[i+1]);
yresult21=(x[i]-x[i-1])*(x[i]-x[i+1]);
yresult30=y[i+1]*(xgiven-x[i-1])*(xgiven-x[i]);
yresult31=(x[i+1]-x[i-1])*(x[i+1]-x[i]);
yresult=yresult10/yresult11+yresult20/yresult21+yresult30/yresult31;
printf("xgiven=%f,yresult=%f\n",xgiven,yresult);
}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
