分享

插值与样条函数

 张岩峰 2011-09-06

首先了解数值逼近。

1、代数插值

在有目标函数的情况下,找一个插值函数与目标函数进行逼近,这个过程就是逼近的过程。原有的函数点叫插值节点。逼近的方法比较确定,设定一个逼近的方法,设得逼近的方程,将逼近点代入,求未知系数的值,那么逼近函数就有了。用目标函数与插值函数进行作差,这样就可以知道逼近的误差有多少,通过这个误差的值的变化趋势,我们可以了解到我们所设定的逼近方法是不是一个收敛的方法,如果是的话,这个插值的方法对于当前问题来说就是可行的。

最基本的插值方法就是线性插值,利用两个点之间的斜率信息就可以利用线性的方式把原来的插值节点进行插值。当然了,如果说是多个插值节点之间进行线性插值的话,结果自然是一个分段的函数。

而如果使用三个点之间的关系来进行插值的话,得到的结果就是抛物线插值,即二次插值。主要的二次插值方法有牛顿形式的插值,拉格郎日的形式,逐次线性插值的形式等。对于二次插值的方法进行扩展,我们就可以得到n次代数插值的方法。对于实际的应用来说,我们需要的是对于离散的数据的分析和处理,但是在数学理论中我们做的都是连续性的数据处理,所以在对于数学基本概念上的离散化理解就格外重要,于是引入了向前差分,向后差分,中心差分以及差商的概念。利用这些概念,我们可以把在连续数学论中的数学理论知识离散化到插值计算中,在后面样条插值算法中,这样的概念起到了最重要的作用。

需要特别说明的一种插值的方法就是Hermite插值方法,它是在满足了多项式插值所要求的对应插值节点的函数值相同的要求之外,进一步对于插值函数与目标函数对应的高次导数的值相等,这样就要求插值函数与目标函数在插值节点处的平滑程度要比较相像。至于方法就是借助台劳展开式,使用插值节点代入的方法求得未知参数,得到插值函数。最终插值的结果就是Hermite插值多项式。

2、样条函数

首先引入单位跳跃函数的定义,对于一个单位跳跃函数,不连续点叫做单位跳跃点,对于跳跃点的左边,函数值为1,右边的函数值为0,跳跃点本身取该点的两边极限值的平均,即1/2.利用这个概念我们可以定义下m次的半截单项式,并可得到它的移位运算,差分运算的性质。当我们有一个函数S(x),如果它在它定义区间的每一个子区间中都是k次的多项式,并在子区间的k-1阶以下导数连续,那么就称S(x)为该区域划分的k次多项样条函数,也就是说对于每一个子区间来说,都是由分段光滑的函数通过关键点联接而成了样条函数。这样的插值方法比代数插值更加平滑有效,而且在力学的角度上也有比较好的背景基础。

最基本的样条函数就要算是B样条函数了,它是基于磨光函数而形成的。磨光函数也就是把函数作一次不定积分,然后进行一次步长为h的对称差商运算,得到的结果就是一个磨光函数。h为磨光宽度,这样也就有了磨光算子的形式。利用磨光函数对于插值节点进行平滑处理,这样得到的结果就是一个基本的样条函数。如果使用k次的磨光函数的话,得到的插值样条函数就为k次B样条函数。由磨光函数的定义我们可以知道,当我们有了一系列的插值节点的时候,我们最基本的可以进行阶梯形的函数构建和折线的函数构建,不过很容易知道,折线函数是梯形函数的1次磨光结果,阶梯函数的k次磨光结果与折线函数的k-1次磨光结果是相同的。主要在应用的样条插值函数有二次样条插值函数与三次样条插值函数。区别在于插值的多项式次数不同,以及需要的待定参数与插值条件不同。由它们的插值条件都可知,它们插值方法都是唯一的,而且是可解的。与Hermite插值方法相对应存在三次的Hermite插值方法,主要是对于插值的余项及各阶导数的误差界进行分析。方法大概类似,只是在这里采用的也是样条插值的方法。

3、数值积分和数值微分

在有了插值算法之后,我们就可以得到一个不可知或不可积不可微的函数的逼近函数,一个这样的函数可以由几个分段的简单函数构成,于是通过这些函数段的分别微积分就可以逼近原始函数的积分,微分。

最简单的数值积分就是等距节点的求积。我们用两个点进行线性插值,得到的逼近函数进行积分来逼近初始函数的积分值,这样的方法叫做Newton-Cotes求积公式,利用三个点的抛物线逼近函数我们可以得到Simpson求积公式。利用4个点进行插值得到的公式为Cotes公式。当我们使用的逼近次数越高,那么我们得到的求积误差通常来讲就会更接近于实际的积分值。但是所要付出的计算代价就越大。而且从误差分析我们可以知道,当我们使用的积分区间越小的话,那么求和公司的截断误差就越小。这样我们就可以通过把一个积分区间进行n等分,然后利用低级次的方法进行求积,这样得到的结果就会更加精确。在以后的复化公式中会涉及到这个问题。

 

 

This oddly named thing is simply a line with tension. A set of X,Y coordinates can be used to make a polygon or poly-line. Usually the points are connected by straight-line segments. A Cardinal Spline takes the positions of the current point and,along with the previous and next points, averages out the positions using a tension value. This smoothes the line and makes a path that is gently curved through the points rather than zigzagging through them. Figure 1 shows a cardinal spline drawn through several points. The black dots are the nodes, the lines are the curves generated by several different representations of the line at different tensions.

The red line has zero tension. The Indigo line has a tension of 1. The others are something in-between.

Cardinal splines are just a subset of the hermite curves. They don't need the tangent points because they will be calculated from the control points. We'll lose some of the flexibility of the hermite curves, but as a tradeoff the curves will be much easier to use. The formula for the tangents for cardinal splines is:
Ti = tension * ( Pi+1 - Pi-1 )
tension is a constant which affects the tightness of the curve. Write yourself a program and play around with it. ( tension should be between 0 and 1, but this is not a must).

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xoyojank/archive/2010/05/19/5606533.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多