<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 物聯(lián)網(wǎng)與傳感器 > 四點二次插值的單片機匯編程序?qū)崿F(xiàn)

          四點二次插值的單片機匯編程序?qū)崿F(xiàn)

          ——
          作者:郝立中 時間:2007-11-14 來源:單片機及嵌入式系統(tǒng)應(yīng)用 收藏

              在微機化的儀器儀表控制軟件中,特別是快速控制軟件中,或因直接計算過于復(fù)雜,或因只有經(jīng)驗數(shù)據(jù)沒有理論公式,常采用查表插值法計算某些數(shù)據(jù)。

              一般適合于插值法的函數(shù)是光滑性較好的函數(shù)。所謂“光滑性較好”是指以下兩個方面:

              ◆連續(xù)且盡量高階地可導(dǎo):

              ◆其泰勒展開式中高次項的絕對值較小。

              采用多項式插值時,若提高多項式次數(shù),除了增加計算量(在高速實時控制的程序中,計算速度是很重要的問題)外,從數(shù)學(xué)上看還有若干缺點,故實際應(yīng)用中一般不用太高的次數(shù)。拋物線插值(三點二次插值)是常用的一種。

              提高精度的另一途徑是增加節(jié)點密度。對于三點二次插值,節(jié)點密度若能提高二倍,則截斷誤差大約可以縮小到原來的1/8。但是這樣一來數(shù)據(jù)表的容量也要加大二倍,因此在容量和精度間存在著矛盾。

              本文介紹一種“四點二次插值”算法,與普通三點=次插值相比,節(jié)點密度不變,計算量也差不多,但精度(最大誤差限)大致相當(dāng)于節(jié)點密度提高二倍的效果。

              四點二次插值的思想是:計算(xk,xk+1)區(qū)間的插值時,用(xk-1,xk,)的三點二次插值結(jié)果和(xk,xk+1)的三點二次插值結(jié)果相平均,作為最后結(jié)果。若采用等距節(jié)點,間距為h,根據(jù)這個思想,不難推出以下計算公式:

              與普通的三點二次插值法對比,可以看出計算量差不多(乘法次數(shù)相同,除以4可以用移位實現(xiàn))。

              下面粗略分析其精度。

              二次插值誤差余項應(yīng)有三個零點,此法中xk和k+1是其兩個零點。顯然,如果第三個零點在x1和xk+1的中點處,則其精度和節(jié)點密度提高二倍后的三點二次插值法相同。

              設(shè)(xk-1,xk,xk+1)的三點二次插值誤差余項為R1(x),(xk,xk+1xk+2)的三點二次插值誤差余項為R2(x)則四點二次插值的誤差余項為

              系數(shù)K(ξ1′,ξ2)反映中點xm處四點二次插值的誤差,比原來三點二次插值的誤差減小的程度。若f'''(x)是常數(shù),則k(ξ1,ξ2)=0,因而R(xm)=0。也就是說,R(z)第三個零點在xm處,達(dá)到上文所述的效果。

              對于比較光滑的函數(shù),f'''(x)在小區(qū)間內(nèi)不會變化太大,故k(ξ1,ξ2)式中的分子絕對值應(yīng)較小。若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較遠(yuǎn)),或,f'''(ξ1)與,f…(ξ2)反號,則零點不在中點附近,此時精度并沒有明顯提高,但不會比原來的情況差。這必然是K(ξ1,ξ2)式中的分母絕對值太小,也就是說,是處在,f'''(x)過零或近于零的區(qū)域。

              對于較光滑的函數(shù),原三點二次插值法的截斷誤差大致正比于其三階導(dǎo)數(shù),因此三階導(dǎo)數(shù)較大的區(qū)域也是精度最差的區(qū)域。f'''(x)過零或近于零的區(qū)域中,誤差本來就遠(yuǎn)小于其它區(qū)域。綜上所述,四點二次插值法與之相比,在三階導(dǎo)數(shù)較大的區(qū)域,精度大致改進(jìn)到相當(dāng)于節(jié)點密度提高二倍后的三點二次插值法;在三階導(dǎo)數(shù)近于0的區(qū)域,則不會比原來三點二次插值法差。從實用的角度,可以說已經(jīng)實現(xiàn)了上文所說的效果。

              另外,還可以指出,這個算法中的v1、v2都是由數(shù)據(jù)表中相鄰項的差值產(chǎn)生的,絕對值常常較小,故乘法常可以采用低精度乘。這一點在以較低檔的微處理器構(gòu)成的應(yīng)用系統(tǒng)中是有實際意義的。如下面AVR的程序中,結(jié)果是雙字節(jié)精度,但其中乘法為單字節(jié)。

              下面將給出以MCS-96匯編語言和AVR匯編語言編寫的程序?qū)嵗?BR>
              實例中,取間隔h為2的整數(shù)冪。這樣,定點形式的自變量只要采用簡單的移位,即可以得出整數(shù)的k和純小數(shù)的“,作為下列程序的入口參數(shù)。在MCS一96單片機的程序中,k和u均取雙字節(jié);在AVR單片機的程序例中,k和u均取單字節(jié),但結(jié)果為雙字節(jié)。

              這是一個應(yīng)用程序中用來查幾種數(shù)據(jù)表的子程序。因為這些表都是增函數(shù),故下面設(shè)計中認(rèn)定“[v2



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();