[程序源码] 分享一个拉格朗日插值算法

[复制链接]
1370|4
 楼主| 一路向北lm 发表于 2019-5-26 21:17 | 显示全部楼层 |阅读模式
函数原型
  1. float LagrangeInterpolationPolynomia(float x,int n,float a[],float b[])
  2. {
  3.         int k;
  4.         float t,y=0;
  5.         int j;
  6.         for (k = 0;k < n;k++)
  7.         {
  8.                 t = 1;
  9.                 for (j = 0;j < n;j++)
  10.                 {
  11.                         if (j != k)
  12.                         t = ((x - a[j])/(a[k]-a[j]))*t;
  13.                 }
  14.                 y = t * b[k]+y;
  15.                 //cout << y << endl;
  16.         }
  17.         return y;
  18. }


 楼主| 一路向北lm 发表于 2019-5-26 21:18 | 显示全部楼层
测试代码如下:
  1. #include <iostream>
  2. using namespace std;

  3. float LagrangeInterpolationPolynomia(float x,int n,float a[],float b[])
  4. {
  5.         int k;
  6.         float t,y=0;
  7.         int j;
  8.         for (k = 0;k < n;k++)
  9.         {
  10.                 t = 1;
  11.                 for (j = 0;j < n;j++)
  12.                 {
  13.                         if (j != k)
  14.                         t = ((x - a[j])/(a[k]-a[j]))*t;
  15.                 }
  16.                 y = t * b[k]+y;
  17.                 //cout << y << endl;
  18.         }
  19.         return y;
  20. }
  21. int main ()
  22. {
  23.         float t ,z;
  24.     float x[5] = {1.000, 2.000, 3.000, 4.000, 5.000};
  25.     float y[5] = {1277.0, 1208.0, 1016.0, 854.0, 515.0};
  26.         t =1000;
  27.         for(t;t>510;t--)
  28.         {
  29.           cout << "y="<< LagrangeInterpolationPolynomia(t,5,y,x)<<endl;
  30.         }
  31.          
  32.        
  33.        
  34.        
  35.        

  36.        
  37.         while(1);
  38. }





 楼主| 一路向北lm 发表于 2019-5-26 21:19 | 显示全部楼层
推测结果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
airwill 发表于 2019-6-7 19:31 | 显示全部楼层
拉格朗日插值法 数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。拉格朗日插值法最早被英国数学家爱德华·华林于1779年发现,不久后(1783年)由莱昂哈德·欧拉再次发现。1795年,拉格朗日在其著作《师范学校数学基础教程》中发表了这个插值方法,从此他的名字就和这个方法联系在一起。


中文名拉格朗日插值法外文名Lagrange Interpolation Polynomial领    域数值分析地    区法国时    代十八世纪作    者拉格朗日
目录



发现历程[url=]编辑[/url]
在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·路易斯·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。拉格朗日插值法最早被英国数学家爱德华·华林于1779年发现,不久后(1783年)由莱昂哈德·欧拉再次发现。1795年,拉格朗日在其著作《师范学校数学基础教程》中发表了这个插值方法,从此他的名字就和这个方法联系在一起。

定义[url=]编辑[/url]

概念
一般地,若已知
在互不相同 n+1 个点
处的函数值
( 即该函数过
这n+1个点),则可以考虑构造一个过这n+1 个点的、次数不超过n的多项式
,使其满足:



要估计任一点ξ,ξ≠xi,i=0,1,2,...,n,则可以用Pn(ξ)的值作为准确值f(ξ)的近似值,此方法叫做“插值法”。
称式(*)为插值条件(准则),含xi(i=0,1,...,n)的最小区间[a,b],其中a=min{x0,x1,...,xn},b=max{x0,x1,...,xn}。

定理
满足插值条件的、次数不超过n的多项式是存在而且是唯一的。

一般形式运用方法[url=]编辑[/url]
在平面上有
共n个点,现作一条函数
使其图像经过这n个点。

作法:设集合
是关于点
的角标的集合
,作n个多项式
。对于任意
,都有

使得



是n-1次多项式,且满足
并且

最后可得

形如上式的插值多项式
称为拉格朗日(Lagrange)插值多项式。

例如:当n=4时,上面的公式可简化为:


这是一个过4个点的唯一的三次多项式。 [1]

 楼主| 一路向北lm 发表于 2019-6-9 09:32 | 显示全部楼层
airwill 发表于 2019-6-7 19:31
拉格朗日插值法 在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插 ...

感谢补充
您需要登录后才可以回帖 登录 | 注册

本版积分规则

293

主题

3837

帖子

81

粉丝
快速回复 在线客服 返回列表 返回顶部