扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
问题补充,因字数限制,挪到这
创新互联从2013年创立,先为芜湖等服务建站,芜湖等地企业,进行企业商务咨询服务。为芜湖企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
1.拉格朗日插值简介:
对给定的n个插值节点x1,x2,…,xn,及其对应的函数值y1=f(x1), y2=f(x2),…, yn=f(xn);使用拉格朗日插值公式,计算在x点处的对应的函数值f(x);
2.一维拉格朗日插值c语言程序:
Int lagrange(x0, y0, n, x, y)
Float xo[], yo[], x;
Int n;
Float *y
{
Int i, j;
Float p;
*y=0;
If (n1)
{
For(i=0;in;i++)
{
P=1;
For(j=1;jn;j++)
{
If(i!=J)
P=p*(x-x0[j]/x0[i]-x0[j]);
}
*y=*y+p*y0[i];
Return(0);
}
Else
Return(-1);
}
3.例题。已知函数如下表所示,求x=0.472处的函数值:
X 0.46 0.47 0.48 0.49
Y 0.484655 0.4903745 0.502750 0.511668
计算这个问题的c语言程序如下:
#minclude stdio
#includeMnath.h
Main()
{
Float x0[4]={ 0.46, 0.47,0.48,0.49};
Float y0[4]={ 0.484655 ,0.4903745 ,0.502750 ,0.511668};
Float x, y;
Int n, rtn;
N=4;
X=0.472;
Rth=lagrange(x0,y0,n,x,y);
If(rtn=0)
{
Prinf(“Y(0.472)=:%f\n”,y);
}
Else
{
Prinf(“n must be larger than 1.\n”);
}
}
计算结果:Y(0.472)=:0.495553
4.问题补充
我的问题与上面的例子类似,计算三维空间一点(x,y,z)对应的函数值(Vx,Vy,Vz).不同的是自变量(point_coordinate.txt)为三维空间散乱点(不是正方体的顶点),因变量(point_data.txt)为矢量(向量 )。插值算法比较多,常数法,拉格朗日插值,埃特金插值,三阶样条插值等。最简单的就是常数法,查找离目标点(x,y,z)距离最近的已知自变量(Xi,Yi,Zi),把该点的函数值赋给目标点做函数值,求高手帮忙写写。
#include stdio.h
double Lerp(double x0,double y0,double x1,double y1,double x)
{
double dy = y1 - y0;
if(dy == 0){
printf("除0错误!\n");
return 0;
}
return x * (x1 - x0) / dy;
}
int main()
{
double x0,x1,y1,y0,x,y;
printf("Inptu x0 y0 x1 y1 x:");
scanf("%lf %lf %lf %lf %lf",x0,y0,x1,y1,x);
y = Lerp(x0,y0,x1,y1,x);
printf("y = %lf\n",y);
return 0;
}
程序代码如下。
希望能帮助到你!
牛顿插值法
#includestdio.h
#includemath.h
#define
n
4
void
difference(float
*x,float
*y,int
n)
{
float
*f;
int
k,i;
f=(float
*)malloc(n*sizeof(float));
for(k=1;k=n;k
)
{
f[0]=y[k];
for(i=0;ik;i
)
f[i
1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{
int
i;
float
varx=0.895,b;
float
x[n
1]={0.4,0.55,0.65,0.8,0.9};
float
y[n
1]={0.41075,0.57815,0.69675,0.88811,1.02652};
difference(x,(float
*
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流