DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1558|回复: 1
打印 上一主题 下一主题

[待整理] 四点二次插值的单片机汇编程序实现

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-5 10:46:57 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
四点二次插值的单片机汇编程序实现

在微机化的仪器仪表控制软件中,特别是快速控制软件中,或因直接计算过于复杂,或因只有经验数据没有理论公式,常采用查表插值法计算某些数据。
    一般适合于插值法的函数是光滑性较好的函数。所谓“光滑性较好”是指以下两个方面:
    ◆连续且尽量高阶地可导:
    ◆其泰勒展开式中高次项的绝对值较小。
    采用多项式插值时,若提高多项式次数,除了增加计算量(在高速实时控制的程序中,计算速度是很重要的问题)外,从数学上看还有若干缺点,故实际应用中一般不用太高的次数。抛物线插值(三点二次插值)是常用的一种。
    提高精度的另一途径是增加节点密度。对于三点二次插值,节点密度若能提高二倍,则截断误差大约可以缩小到原来的1/8。但是这样一来数据表的容量也要加大二倍,因此在容量和精度间存在着矛盾。
    本文介绍一种“四点二次插值”算法,与普通三点=次插值相比,节点密度不变,计算量也差不多,但精度(最大误差限)大致相当于节点密度提高二倍的效果。
    四点二次插值的思想是:计算(xk,xk+1)区间的插值时,用(xk-1,xk,)的三点二次插值结果和(xk,xk+1)的三点二次插值结果相平均,作为最后结果。若采用等距节点,间距为h,根据这个思想,不难推出以下计算公式:
    与普通的三点二次插值法对比,可以看出计算量差不多(乘法次数相同,除以4可以用移位实现)。
    下面粗略分析其精度。
    二次插值误差余项应有三个零点,此法中xk和k+1是其两个零点。显然,如果第三个零点在x1和xk+1的中点处,则其精度和节点密度提高二倍后的三点二次插值法相同。
    设(xk-1,xk,xk+1)的三点二次插值误差余项为R1(x),(xk,xk+1xk+2)的三点二次插值误差余项为R2(x)则四点二次插值的误差余项为

    系数K(ξ1′,ξ2)反映中点xm处四点二次插值的误差,比原来三点二次插值的误差减小的程度。若f‘‘‘(x)是常数,则k(ξ1,ξ2)=0,因而R(xm)=0。也就是说,R(z)第三个零点在xm处,达到上文所述的效果。
    对于比较光滑的函数,f‘‘‘(x)在小区间内不会变化太大,故k(ξ1,ξ2)式中的分子绝对值应较小。若K(ξ1,ξ2)近于0,则R(xm)也近于0,R(x)的零点仍在xm附近,效果与上述接近。可以证明(限于篇幅.证明略),只要f‘‘‘(ξ1)与f‘‘‘(ξ)之比在O.5~2之间,则第三个零点必然在xk和xk+1之间。
    若K(ξ1,)绝对值较大即f‘‘‘(ξ2)与f‘‘‘(ξ2)之比距1较远),或,f‘‘‘(ξ1)与,f…(ξ2)反号,则零点不在中点附近,此时精度并没有明显提高,但不会比原来的情况差。这必然是K(ξ1,ξ2)式中的分母绝对值太小,也就是说,是处在,f‘‘‘(x)过零或近于零的区域。
    对于较光滑的函数,原三点二次插值法的截断误差大致正比于其三阶导数,因此三阶导数较大的区域也是精度最差的区域。f‘‘‘(x)过零或近于零的区域中,误差本来就远小于其它区域。综上所述,四点二次插值法与之相比,在三阶导数较大的区域,精度大致改进到相当于节点密度提高二倍后的三点二次插值法;在三阶导数近于0的区域,则不会比原来三点二次插值法差。从实用的角度,可以说已经实现了上文所说的效果。
    另外,还可以指出,这个算法中的v1、v2都是由数据表中相邻项的差值产生的,绝对值常常较小,故乘法常可以采用低精度乘。这一点在以较低档的微处理器构成的应用系统中是有实际意义的。如下面AVR单片机的程序中,结果是双字节精度,但其中乘法为单字节。
    下面将给出以MCS-96单片机汇编语言和AVR单片机汇编语言编写的程序实例。
    实例中,取间隔h为2的整数幂。这样,定点形式的自变量只要采用简单的移位,即可以得出整数的k和纯小数的“,作为下列程序的入口参数。在MCS一96单片机的程序中,k和u均取双字节;在AVR单片机的程序例中,k和u均取单字节,但结果为双字节。
    这是一个应用程序中用来查几种数据表的子程序。因为这些表都是增函数,故下面设计中认定“[v2×u′+v1]必为正”。表中相邻项的差,符合程序注释中的要求(特别是第二个例子vl、v2为单字节),否则程序需要适当调整。
    说明:以下y′、yO加、yl和y2即上文中的fxk-1),f(xk),f(xk+1)和f(xk+2)。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 11:14 , 耗时 0.102439 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表