OpenCASCADE Interpolation – Lagrange

By admin in 天文学 on 2018年10月18日

OpenCASCADE Interpolation – Lagrange

eryar@163.com

Abstract. Power basis polynomial is the most simple polynomial
function. It also be called power series. OpenCASCADE provides basic
computation functions for polynomial functions, such as evaluate the
result for a given polynomial, Lagrange interpolation, Hermite
interpolation, .etc. The package named PLib, means Polynomial functions
Library. The paper focus on the Lagrange interpolation usage of PLib.

Key Words. OpenCASCADE, PLib, Interpolation, Lagrange, 插值

 

1.Introduction


穷级数是尖端数学之一个要部分,它是象征函数、研究函数性质与开展数值计算的同样种植工具。由高级数学中之无穷级数的定义可知,函数项级数吃简易而常见
的一律看似级数就是各类都是幂函数的函数项级数便所谓的幂级数(Power
Series)。因为幂级数的形式简单,易于掌握,且可以高速计算曲线上之触发以及各国阶导数,所以于几乎哪样子中常用幂级数来类表示曲线曲面。由于用函数展
开成幂级数是起格的,所有并无是装有的曲线曲面都得为此幂级数的基本上项式来逼。

对任穷级数概念比较陌生的读者可拿《高等数学》的书找出来翻翻看,重温一下大学之上。一打开做了笔记有点泛黄的旧书,就会见想起起青涩之校园时光。


时学《高等数学》的上感觉十分空虚难知晓,因为无法以舌战及履行联系起,看不到直观效果,有时也会见冒充出“学数学有啊用?”这种题材。当你碰到相关的
问题重新夺押国内的讲义时,觉得国内的读本写得还是杀细致用心的。现在获取信息已经颇有利了,如OpenCASCADE这个开源之库,其TKMath工具箱
可以视作是数值计算理论联系实践的一个有血有肉实例。结合OpenCASCADE的源码来针对系理论的读,效率会事半功倍。

正文对幂级数的定义做简单介绍,并结合源程序详细说明OpenCASCADE中的PLib包中关于幂级数几近项式的测算和Lagrange插值的用法。

2.Polynomial Evaluation


等数学的题中把幂级数的首要落于怎么样以其余的函数展开成幂级数,即用幂级数来逼函数,而并未介绍如何用数值的计来针对幂级数进行计算。在算法导论一书
[2]遇找到有关多项式的代表和计算的实现方式,给闹了多项式在数据结构上的象征方法与求值算法。对于一个幂级数多项式:

天文学 1

大抵 项式的代表来系数表示法和点值表示法。系数表示拟(Coefficient
Representation)就是拿多项式的系数组成一个向量来代表是差不多项式。对因此系数表示法表示的基本上项式的求值计算好应用Horner法则,也是
是老牌的秦九韶算法。此算法的落实代码在《The NURBS
Book》[3]相同书写中于有了,此处有些去,只受出OpenCASCADE中对幂级数多项式的计算的函数的施用。

void testPolynomialEvaluation(void)
{
    // evaluate 1 dimension polynmoial.
    Standard_Real aCoeff[3] = {2.0, 2.0, 3.0};

    Standard_Real aResult = 0.0;

    for (int i = 0; i < 3; ++i)
    {
        PLib::EvalPolynomial(i, 0, 2, 1, aCoeff[0], aResult);

        std::cout << "x=" << i << ", (2.0 + 2.0*x + 3.0*x^2): " << aResult << std::endl;
    }
}

从今上述代码可以观看,OpenCASCADE的PLib包吃针对大多项式的表示法是以的系数表示法。其系数分别吗:2.0,2.0,3.0,即意味着了幂级数:

天文学 2

当x=0, 1,2时测算结果如果下图所示:

天文学 3

Figure 2.1 Polynomial Evaluation

3.Polynomial Interpolation

差不多项式的插值问题是多项式求值的迎接问题。多项式求值问题几乎哪里意义就是是既了解曲线之表达式计算曲线上的触及;而插值问题是现已曲线上之组成部分触及来求通过这些点的曲线表达式。多项式插值中不过广大不过中心的题材是告平次于数不超n的代数多项式:

天文学 4

使

天文学 5

满足插值条件的大半项式称为函数f(x)在节点xi处的n次插值多项式。由插值条件能,插值多项式的系数满足线性方程组:

天文学 6

由线性代数可知,其系数行列式是n+1阶Vandermonde行列式,且:

天文学 7


为插值的接触是殊之触及,所以行列式V不为0,即线性方程组有唯一排。这吗是算法导论一开中如此说“从某种意义上说,多项式的系数表示拟以及点值表示法是等价
的,即用点值形式表示的基本上项式都对准许唯一一个系数形式的差不多项式”的理论依据。即插值多项式的唯一性。这里不仅指出了插值多项式存在的唯性,而且也供了同样
种解法,即透过免去线性方程组来确定系数。根据是思路,给闹对上面已经掌握系数求值的差不多项式进行插值,代码如下所示:

void testPolynomialInterpolation(void)
{
    // given three points: (0, 2), (1, 7), (2, 18) to interpolate a polynomial 
    math_Matrix A(1, 3, 1, 3, 0.0);
    math_Vector B(1, 3);
    math_Vector X(1, 3);

    A(1, 1) = 1.0; A(1, 2) = 0.0; A(1, 3) = 0.0; B(1) = 2.0;
    A(2, 1) = 1.0; A(2, 2) = 1.0; A(2, 3) = 1.0; B(2) = 7.0;
    A(3, 1) = 1.0; A(3, 2) = 2.0; A(3, 3) = 4.0; B(3) = 18.0;

    // solve functions: Ax = B
    math_Gauss aSolver(A);
    aSolver.Solve(B, X);

    if (aSolver.IsDone())
    {
        std::cout << X << std::endl;
    }
}

既知道多项式通过三只点(0, 2),(1, 7),(2,
18),求通过这三个点的差不多项式表达式。根据插值条件列出线性方程组如下:

天文学 8

拿系数a0,a1,a2扣押成线性方程组的待求变量,使用类math_Gauss来对线性方程组进行求解,计算结果如下所示:

天文学 9

Figure 3.1 Polynomial Interpolation Result

鉴于臻图克,对线性方程组的求解结果跟达节点的系数对应。

4.Lagrange Interpolation

每当
《计算办法》、《数值逼近》等题中观看Lagrange的名字,就悟出《高等数学》书中诸多跟之有关的定律、定义等,如:Lagrange中值定理、
Lagrange型余项、条件极值的Lagrange乘数法等等。在网上检索了下Lagrange,原来他也是OpenCASCADE的源的人数:法国
人。Joseph-Louis
Lagrange,法国名数学家、物理学家。1736年1月25日生于意大利且麻利,1813年4月10日卒于法国巴黎。他在数学、力学和天文学三只拟科
领域都发历史性的奉献,其中非以数学方面的得最为突出。以下图片来源网易公开课《数学传奇》:从笛卡尔暨庞加莱—法国数学的人文风俗,公开课网址:http://open.163.com/special/cuvocw/shuxuechuanqi.html

天文学 10

天文学 11

天文学 12

怎优雅浪漫之法国人的数学大师层出不穷吧?因为她俩最好精彩之总人口在就学数学。数学都变为法国总人口传统文化中尽精美的均等有了。

天文学 13

数 学也是华夏习俗文化之一律有些,中国先数学得为不少:《周髀算经》;
《九章算术》(三国时时刘徽著); 祖冲之; 算盘。天文学:天象观察记录,
发明观测仪器:圭表;浑仪;简仪;高表;仰仪,制定历法(农历)。想想后来干什么没有好的进化,原因或是科举制度造成的,考试的情节偏文。

Lagrange
父亲是法国陆军骑兵里之等同叫军官,后由经商失败,家道衰落。据Lagrange本人回忆,如果幼年时时家境殷实,他吧不怕不见面发作数学研究了。经历了砸后
没被于反而的总人口深就会再度怪,像《红楼梦》的作者曹雪芹。严重跑题了,回到Lagrange插值问题上来。从Lagrange中值定理的证实和
Lagrange乘数法求极值的计受得以视Lagrange有个特点,那就是是喜引入辅助函数来化解问题,可以观看Lagrange是十分精明的。对
多项式插值也非异,通过结构了一个Lagrange插值基函数来简化多项式的插值,如下公式为Lagrange插值基函数:

天文学 14设:

天文学 15

虽然Lagrange插值基函数可以象征也简单之款型:

天文学 16

虽n次多项式

天文学 17

满足插值条件。OpenCASCADE的PLib包吃呢供了Lagrange插值的函数来拓展多项式插值计算。其用法的代码如下所示:

void testLagrangeInterpolation(void)
{
    // given three points: (0,2), (1,7), (2,18) to interpolate a polynomial
    Standard_Real aValues[3] = {2.0, 7.0, 18.0};
    Standard_Real aParameters[3] = {0.0, 1.0, 2.0};
    Standard_Real aResult = 0.0;

    // this do not output the coeff of the interpolate polynomial
    PLib::EvalLagrange(1.5, 0, 2, 1, aValues[0], aParameters[0], aResult);

    std::cout << "Result: " << aResult << std::endl;
}

脚对PLib::EvalLagrange()函数的7只参数进行说明:

Parameter

待根据Lagrange插值多项式求值的参数

DerivativeRequest

插值多项式导数次数

Degree

插值多项式的次数

Dimension

插值多项式的维次

Values

插值多项式的值

Parameters

插值多项式的参数

Results

参数Parameter在Lagrange插值多项式中的值

上述代码计算的凡这样一个题材,已知f(0)=2; f(1)=7,
f(2)=18,求f(1.5)的临近似值。计算结果而下图所示:

天文学 18

Figure 4.1 Lagrange Interpolation Result

由于上图能够,经过Lagrange抛物插值得到的结果跟一直计算得到的结果符合。为了重新好的验证OpenCASCADE中PLib包的Lagrange插值的打算,下面将《计算办法》[6]中Lagrange插值部分中之例题进行计算来收尾计算结果进行比较。已领略天文学 19

独家用线性插值和抛物插值求天文学 20的贴近似值。相关测算代码如下所示:

// sqrt(100)=10, sqrt(121)=11, sqrt(144)=12, evaluate sqrt(115) value.
Standard_Real aSqrtValues[3] = {10.0, 11.0, 12.0};
Standard_Real aSqrtParameters[3] = {100.0, 121.0, 144.0};

// linear interpolation
PLib::EvalLagrange(115.0, 0, 1, 1, aSqrtValues[0], aSqrtParameters[0], aResult);
std::cout << "Linear Interpolate Result: " << aResult << std::endl;

// Parabolic Interpolation
PLib::EvalLagrange(115.0, 0, 2, 1, aSqrtValues[0], aSqrtParameters[0], aResult);
std::cout << "Parabolic Interpolate Result: " << aResult << std::endl;

测算结果如下所示:

天文学 21

Figure 4.2 Linear Interpolate and Parabolic Interpolate Result

拿达到图4.2之结果以及书中之乘除结果进行对比发现,下面的结果吧《计算方法》书被的结果:

天文学 22

PLib中Lagrange插值结果准确,天文学精度比高。

自点的结果来拘禁,Lagrange插值方法较直接解线性方程组的艺术而简明,且Lagrange插值法比解线性方程组的实现而简单好多,只用一个函数即可。

5.Conclusion

经以最简易的多项式进行求值,及用求解线性方程组的主意插值和Lagrange插值多项式,来读曲线拟合中求于高“插值”,因为那个要求曲线严格经过插值点。曲线拟合中之逼就从未这要求,只是要求曲线以及插值点之间的容差尽量小。

经过行使OpenCASCADE的PLib包中的函数,可以窥见对幂级数的基本上项式的意味法一般会用系数表示拟,且还见面使便捷的Horner法则,也是秦九韶算法。


接根据定义来插值幂次多项式时,可以采用Gauss消元法来求解线性方程组。这种措施计算工作量特别,而Lagrange插值法结构紧凑,便于编程实现,且
代码相对简单。通过对《计算办法》书中例题的计算,来验证PLib::EvalLagrange()函数的用法及计算结果。

6.References

  1. 同济大学数学教研室. 高等数学. 高等教育出版社. 1996

  2. 同济大学利用数学系. 线性代数. 高等教育出版社. 2003

  3. Thomas H. Cormen. Introduction to Algorithms. The MIT Press. 2001

  4. Les Piegl, Wayne Tiller. The NURBS Book. Springer-Verlag. 1995

  5. Shing Liu. Polynomial Library in OpenCASCADE. 2013

http://www.cppblog.com/eryar/archive/2013/05/08/200118.html

  1. 爱大义,沈云宝,李有法. 计算方法. 浙江大学出版社. 2002

  2. 蒋尔雄,赵风光,苏仰锋. 数值逼近. 复旦大学出版社. 2012

  3. 王仁宏,李崇君,朱春钢. 计算几哪里教程. 科学出版社. 2008

  4. 蔡天新. 数学传奇.
    http://open.163.com/special/cuvocw/shuxuechuanqi.html

  5. 是出版社名词室. 新汉英数学词汇. 科学出版社. 2004

 

PDF Version: OpenCASCADE Interpolation –
Lagrange

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2018 亚洲必赢手机官网 版权所有