一个关于非线性插值的有关问题
一个关于非线性插值的问题
我需要在两个值之间进行抛物线插值,插值的程序如下,但是我不知道该怎么去使用,我很难读懂那个程序,所以现在我想问一下大家,不需要读懂那个程序,我该怎么去用那个程序呢?举个例子,比如有一个点的值是3000.0,有一个点的值是3515.0,现在我需要在这两点之间运用抛物线插值,请问我该如何使用下面的算法程序呢?(程序后面附有如何使用的例子,不过我还是看不懂,请大家能够详细讲一下,谢谢了)
int mulxyz(len,rh,aa)
{
int len,rh;
float aa[];
int i,j,k,m;
float nf,xr,mf,x,yy[4],y[RL]; /* RL:纪录道长度 */
void xyz();
nf=(float)rh/(float)len;
xr=1./nf;
for(k=1; k <=len; k++)
y[k]=aa[k-1];
m=0;
aa[m]=y[1];
nf=1;
y[0]=y[1];
y[len+1]=y[len];
y[len+2]=y[len];
for(k=0; k <rh; k++)
{
nf=nf+xr;
mf=nf-(int)nf;
j=(int)nf;
if(j> =len) break;
yy[0]=y[j-1];
yy[1]=y[j];
yy[2]=y[j+1];
yy[3]=y[j+2];
x=1.0+mf;
m++;
xyz(yy,x,&aa[m],2);
}
aa[++m]=y[len];
return(m+1);
}
void xyz(yy,x,y,kf)
float yy[4];
float x,*y;
int kf;
{
float a,b,xx;
b=yy[1]-yy[0];
a=2.0*yy[1]-yy[2]-yy[0];
if(kf==1) {
if(a!=0) x=0.5+b/a;
else x=1.0; }
*y=yy[0]+b*x-0.5*a*x*(x-1.0);
if(kf> =2)
{
b=yy[2]-yy[1];
a=2.0*yy[2]-yy[3]-yy[1];
xx=x-1.0;
xx=yy[1]+b*xx-0.5*a*xx*(xx-1.0);
*y=(*y+xx)*0.5;
}
}
例子:
if(len!=rh) j=mulxyz(len,rh,aa);
if(j!=rh) mulxyz(j,rh,aa);
------解决方案--------------------
也看的一头雾水,等高手来讲解了!呵呵,先顶一下了!
------解决方案--------------------
aa是一个float数组
len是取起始点在数组中的位置,int型
rh是终结点在数组中的位置,int型
------解决方案--------------------
数字计算方法是不是有?
我需要在两个值之间进行抛物线插值,插值的程序如下,但是我不知道该怎么去使用,我很难读懂那个程序,所以现在我想问一下大家,不需要读懂那个程序,我该怎么去用那个程序呢?举个例子,比如有一个点的值是3000.0,有一个点的值是3515.0,现在我需要在这两点之间运用抛物线插值,请问我该如何使用下面的算法程序呢?(程序后面附有如何使用的例子,不过我还是看不懂,请大家能够详细讲一下,谢谢了)
int mulxyz(len,rh,aa)
{
int len,rh;
float aa[];
int i,j,k,m;
float nf,xr,mf,x,yy[4],y[RL]; /* RL:纪录道长度 */
void xyz();
nf=(float)rh/(float)len;
xr=1./nf;
for(k=1; k <=len; k++)
y[k]=aa[k-1];
m=0;
aa[m]=y[1];
nf=1;
y[0]=y[1];
y[len+1]=y[len];
y[len+2]=y[len];
for(k=0; k <rh; k++)
{
nf=nf+xr;
mf=nf-(int)nf;
j=(int)nf;
if(j> =len) break;
yy[0]=y[j-1];
yy[1]=y[j];
yy[2]=y[j+1];
yy[3]=y[j+2];
x=1.0+mf;
m++;
xyz(yy,x,&aa[m],2);
}
aa[++m]=y[len];
return(m+1);
}
void xyz(yy,x,y,kf)
float yy[4];
float x,*y;
int kf;
{
float a,b,xx;
b=yy[1]-yy[0];
a=2.0*yy[1]-yy[2]-yy[0];
if(kf==1) {
if(a!=0) x=0.5+b/a;
else x=1.0; }
*y=yy[0]+b*x-0.5*a*x*(x-1.0);
if(kf> =2)
{
b=yy[2]-yy[1];
a=2.0*yy[2]-yy[3]-yy[1];
xx=x-1.0;
xx=yy[1]+b*xx-0.5*a*xx*(xx-1.0);
*y=(*y+xx)*0.5;
}
}
例子:
if(len!=rh) j=mulxyz(len,rh,aa);
if(j!=rh) mulxyz(j,rh,aa);
------解决方案--------------------
也看的一头雾水,等高手来讲解了!呵呵,先顶一下了!
------解决方案--------------------
aa是一个float数组
len是取起始点在数组中的位置,int型
rh是终结点在数组中的位置,int型
------解决方案--------------------
数字计算方法是不是有?