插值法:
直线公式:
假设有某个二次多项式函数,已知它在三个点上的取值为:
要求的值。
首先写出每个拉格朗日基本多项式:
然后应用拉格朗日插值法,就可以得到的表达式(为函数的插值函数):
此时代入数值就可以求出所需之值:。
C算法:
引用 :实验二:Lagrange拉格朗日插值法之C语言代码 - Chen_dSir的博客 - CSDN博客 https://blog.csdn.net/Chen_dSir/article/details/70236987
ypedef struct stPoint
{
double x;
double y;
} Point
#define Dots_N 5
Point Dots[Dots_N];
/*n 为插入的点的个数,tmp为拉格朗日基函数,x为要插入的点,lagrange为插值运算后返回的值。*/
double f32Lagrange_LineSert(Point *points,u8 n,double x)
{
u8 i ,j;
double tmp,lagrange=0;//这个x是你将要计算的f(x)插值点,tmp是拉格朗日基函数,larange是根据拉格朗日函数得出f(x)的值
for(i=0;i<=n;i++)
{
for(j=0,tmp=1;j<=n;j++)
{
if(j!=i) //去掉xi与xj相等的情况,范德蒙行列式下标就是j!=k,相等分母为0就没意义了
{
tmp=tmp*(x-points[j].x)/(points[i].x-points[j].x);//这个就是套公式tmp是拉格朗日基函数
}
}
lagrange=lagrange+tmp*points[i].y; //最后计算基函数*y,全部加起来,就是该x项的拉格朗日函数了
}
return lagrange;
}