|
楼主 |
发表于 2005-1-19 23:02:54
|
显示全部楼层
//连分式等距插值
//x0-第一个节点x0
//h-等距节点的步长
//y-长度为n的数组,存放n个节点yi
//n-给定节点的个数
//t-存放指定插值点的值 x
double eepqs(double x0,double h,int n,double y[],double t)
{
int i,j,k,m,l;
double z,hh,xi,xj,b[8];
z=0.0;
if (n<1)
{
return(z);
}
if (n==1)
{
z=y[0];
return(z);
}
if (n<=8)
{
k=0;
m=n;
}
else if (t<(x0+4.0*h))
{
k=0;
m=8;
}
else if (t>(x0+(n-5)*h))
{
k=n-8;
m=8;
}
else
{
k=(int)((t-x0)/h)-3;
m=8;
}
b[0]=y[k];
for (i=2;i<=m;i++)
{
hh=y[i+k-1];
l=0;
for (j=1;j<=i-1;j++)
if (l==0)
{
if (fabs(hh-b[j-1])+1.0==1.0)
{
l=l+1;
}
else
{
xi=x0+(i+k-1)*h;
xj=x0+(j+k-1)*h;
hh=(xi-xj)/(hh-b[j-1]);
}
}
b[i-1]=hh;
if (l!=0)
{
b[i-1]=1.0e+35;
}
}
z=b[m-1];
for (i=m-1;i>=1;i--)
{
z=b[i-1]+(t-(x0+(i+k-1)*h))/z;
}
return(z);
} |
|