Interpolation and Approximation
文章目錄
- 1. 參數(shù)選擇
- 1.1 The Uniformly Spaced Method
- 1.2 The Chord Length Method
- 1.3 The Centripetal Method
- 2. 節(jié)點(diǎn)向量生成
- 2.1 Knot Vector Generation
- 2.2 The Universal Method
- 3. 曲面的參數(shù)與節(jié)點(diǎn)向量
- 4. 線性方程組的求解
- 5. 曲線插值
- 6. 曲線逼近
- 7. 曲面插值
- 8. 曲面逼近
1. 參數(shù)選擇
參數(shù)選擇的目的是:對(duì)于給定數(shù)據(jù)點(diǎn)D0,D1,...,DnD_0,D_1,...,D_nD0?,D1?,...,Dn?,在曲線的定義域內(nèi)找到滿足條件Dk=C(tk),0<=k<=nD_k=C(t_k),0<=k<=nDk?=C(tk?),0<=k<=n的n+1n+1n+1個(gè)參數(shù)點(diǎn)。
參數(shù)的選擇會(huì)影響曲線的形狀,進(jìn)而影響曲線的參數(shù)化。
1.1 The Uniformly Spaced Method
區(qū)間為[0,1]時(shí):
區(qū)間為[a,b]時(shí):
當(dāng)數(shù)據(jù)點(diǎn)不是均勻分布時(shí),使用等間距參數(shù)可能會(huì)產(chǎn)生不規(guī)則的形狀,例如大凸起、尖峰和環(huán)路。
1.2 The Chord Length Method
如果一條插值曲線非常接近數(shù)據(jù)多邊形,則相鄰兩個(gè)數(shù)據(jù)點(diǎn)之間的曲線段長度將非常接近這兩個(gè)數(shù)據(jù)點(diǎn)的弦長,并且插值曲線的長度也將非常接近數(shù)據(jù)多邊形的總長度.
計(jì)算公式:
區(qū)間為[0,1]時(shí):
區(qū)間為[a,b]時(shí):
弦長方法通常來說表現(xiàn)不錯(cuò),但有時(shí)候,當(dāng)弦長較長時(shí),會(huì)導(dǎo)致曲線的凸出量較大,如下圖所示:
1.3 The Centripetal Method
向心法是弦長法的擴(kuò)展,相鄰點(diǎn)的距離通過∣Dk?Dk?1∣a|D_k-D_{k-1}|^a∣Dk??Dk?1?∣a衡量,其中a>0a>0a>0.
計(jì)算公式如下:
討論:
當(dāng)a=1a=1a=1時(shí),向心法退化為弦長法;
當(dāng)a<1a<1a<1時(shí),∣Dk?Dk?1∣a<∣Dk?Dk?1∣|D_k-D_{k-1}|^a<|D_k-D_{k-1}|∣Dk??Dk?1?∣a<∣Dk??Dk?1?∣,較長弦(即長度>1)對(duì)數(shù)據(jù)多邊形長度的影響減小,而較短弦(即長度<1)對(duì)數(shù)據(jù)多邊形長度的影響增加。由于這個(gè)特點(diǎn),向心法比弦長法更能處理尖峰。
效果圖如下:
但向心法也不一定效果比其他兩種方法好,如下圖所示,當(dāng)數(shù)據(jù)點(diǎn)分布較為對(duì)稱時(shí),向心法的效果不如等距法好:
2. 節(jié)點(diǎn)向量生成
2.1 Knot Vector Generation
得到一組參數(shù)后,就可以生成一個(gè)節(jié)點(diǎn)向量.
假設(shè)得到的n+1n+1n+1個(gè)參數(shù)分別為:t0,t1,...,tnt_0,t_1,...,t_nt0?,t1?,...,tn?,對(duì)于ppp次B樣條曲線,需要m+1m+1m+1個(gè)節(jié)點(diǎn),其中m=n+p+1m=n+p+1m=n+p+1. 如果曲線為Clamped,則u0=u1=...=up=0,um?p=um?p+1=...=um=1u_0=u_1=...=u_p=0,u_{m-p}=u_{m-p+1}=...=u_m=1u0?=u1?=...=up?=0,um?p?=um?p+1?=...=um?=1,剩余的n?pn-pn?p個(gè)節(jié)點(diǎn)可采用均勻分布或者其他方法。
均勻分布:
等間距的節(jié)點(diǎn)向量并不需要知道參數(shù)ttt,而且生成起來非常簡單。但是,不建議使用這種方法,因?yàn)槿绻麑⑵渑c弦長法一起用于全局插值,則線性方程組將是奇異的。
de Boor提出的參數(shù)平均法:
2.2 The Universal Method
在前面討論的方法中,都是先確定參數(shù),然后生成節(jié)點(diǎn)向量。
Choong-Gyoo Lim提出了一種用等間距節(jié)點(diǎn)來計(jì)算參數(shù)的通用方法。
計(jì)算方法如下:
首先定義均勻分布的節(jié)點(diǎn)向量:
由節(jié)點(diǎn)向量可以得到n+1個(gè)B樣條基函數(shù);
接下來選擇使每個(gè)基函數(shù)達(dá)到最大值時(shí),所對(duì)應(yīng)的點(diǎn)作為參數(shù)。
如下圖所示,黃色點(diǎn)即為選擇的參數(shù)點(diǎn):
3. 曲面的參數(shù)與節(jié)點(diǎn)向量
由e+1e+1e+1行,f+1f+1f+1列控制點(diǎn)定義的,次數(shù)為(p,q)的B樣條曲面如下:
假設(shè)存在m+1m+1m+1行,n+1n+1n+1列數(shù)據(jù)點(diǎn),DijD_{ij}Dij?,其中,0<=i<=m0<=i<=m0<=i<=m,0<=j<=n0<=j<=n0<=j<=n,從而uuu方向上需要m+1m+1m+1個(gè)參數(shù),s0,...,sms_0,...,s_ms0?,...,sm?,vvv方向上需要n+1n+1n+1個(gè)參數(shù),t0,...,tnt_0,...,t_nt0?,...,tn?,使得曲面上的點(diǎn)S(sc,td)S(s_c,t_d)S(sc?,td?)與數(shù)據(jù)點(diǎn)DcdD_{cd}Dcd?相對(duì)應(yīng)。
參數(shù)計(jì)算方法:
得到uuu方向的參數(shù)矩陣后,對(duì)每一行求平均,得到s0,s1,...,sms_0,s_1,...,s_ms0?,s1?,...,sm?.
得到vvv方向的參數(shù)矩陣后,對(duì)每一列求平均,得到t0,t1,...,tnt_0,t_1,...,t_nt0?,t1?,...,tn?.
算法如下:
接下來,
由參數(shù)值s0,s1,...,sms_0,s_1,...,s_ms0?,s1?,...,sm?和次數(shù)ppp,可以得到uuu方向上的節(jié)點(diǎn)向量UUU;
由參數(shù)值t0,t1,...,tnt_0,t_1,...,t_nt0?,t1?,...,tn?和次數(shù)qqq,可以得到vvv方向上的節(jié)點(diǎn)向量VVV.
4. 線性方程組的求解
假設(shè) nnn×nnn的系數(shù)矩陣AAA,nnn×hhh的常數(shù)項(xiàng)矩陣BBB,待求解的nnn×hhh矩陣XXX定義如下:
并且滿足如下關(guān)系:
LU分解:
將矩陣AAA分解為:A=L.UA=L.UA=L.U,其中LLL為下三角矩陣,UUU為上三角矩陣.
如圖所示:
代入原方程,可得:
B=(L.U).XB=(L.U).XB=(L.U).X
B=L.(U.X)B=L.(U.X)B=L.(U.X)
令Y=U.XY=U.XY=U.X,得,
B=L.YB=L.YB=L.Y
因而,方程B=A.XB=A.XB=A.X的求解可分為兩步:
正向代換:
B=L.YB=L.YB=L.Y
計(jì)算過程:
算法如下:
反向代換:
Y=U.XY=U.XY=U.X
計(jì)算過程:
算法如下:
5. 曲線插值
問題描述:給定一組n+1n+1n+1個(gè)數(shù)據(jù)點(diǎn)D0,D2,...,DnD_0,D_2,...,D_nD0?,D2?,...,Dn?和次數(shù)ppp,求一條由n+1n+1n+1個(gè)控制點(diǎn)定義的ppp次B樣條曲線,該曲線按給定順序通過所給的數(shù)據(jù)點(diǎn)。
求解:
假設(shè)數(shù)據(jù)點(diǎn)和控制點(diǎn)均為sss維空間中的點(diǎn),則有,
求解得到矩陣PPP后便可得到控制點(diǎn),從而得到所求的B樣條插值曲線。
算法:
一列一列求解PPP
插值效果圖:
注意:
如果節(jié)點(diǎn)是通過將連續(xù)ppp個(gè)參數(shù)求平均的方式獲得的,則矩陣NNN是正定的,并且有:當(dāng)∣i?k∣>=p|i-k|>=p∣i?k∣>=p時(shí),Ni,p(tk)=0N_{i,p}(t_k)=0Ni,p?(tk?)=0(de Boor,1978證明).這表明上述算法得到的線性方程組可以用高斯消元法求解。
參數(shù)和節(jié)點(diǎn)對(duì)所構(gòu)建曲線的影響:
如果弦長分布大致相同,那么所有四種參數(shù)選擇方法的性能應(yīng)該是相似的。此外,由于具有均勻節(jié)點(diǎn)的B樣條基函數(shù)的最大值分布非常均勻,因此通用方法的性能應(yīng)該與均勻方法相似。同樣,向心法的工作原理應(yīng)該類似于弦長法,因?yàn)榍罢呤呛笳叩难由臁H欢?#xff0c;當(dāng)弦長分布發(fā)生劇烈變化時(shí),情況并非總是如此。
如下圖所示:
參數(shù)和節(jié)點(diǎn)的關(guān)系:
與弦長法和向心法相比,通用法得到的參數(shù)和節(jié)點(diǎn)分布更均勻。此外,從向心法得到的參數(shù)和結(jié)使較短(resp,longer)的弦拉伸得更長(resp,short),因此分布更均勻。因此,用向心法得到的弦長曲線,在曲線上不會(huì)產(chǎn)生較大的晃動(dòng)。
次數(shù)的影響:
等間距法和通用法通常能很好地跟蹤較長的弦,但對(duì)于較短的弦則存在問題。因?yàn)閰?shù)的間距相等或幾乎相等,所以對(duì)于較短的弦,插值曲線必須拉伸得稍微長一點(diǎn)。結(jié)果,我們看到了峰和環(huán)。高次曲線會(huì)使這種情況變得更糟,因?yàn)楦唠A曲線提供了更多的自由度。
至于弦長法,上面的圖表明,對(duì)于較長的弦,尤其是后面或前面有許多短弦的弦,可能會(huì)出現(xiàn)大的凸起,因此,弦長法并不適用。階數(shù)對(duì)上述插值曲線的形狀沒有顯著影響。
由于向心法是弦長法的擴(kuò)展,它們具有相同的特點(diǎn)。然而,由于向心法具有使兩個(gè)相鄰參數(shù)之間的距離趨于均勻的趨勢(shì),它也具有均與法和通用法的特點(diǎn)。例如,生成的插值曲線緊跟長弦,當(dāng)階數(shù)增加時(shí),短弦可能會(huì)出現(xiàn)循環(huán)。事實(shí)上,上述結(jié)果表明向心法和通用法的計(jì)算結(jié)果是相似的。
插值的全局性:
改變單個(gè)數(shù)據(jù)點(diǎn)的位置會(huì)完全改變插值曲線的形狀
6. 曲線逼近
問題描述:
給定一組n+1n+1n+1個(gè)數(shù)據(jù)點(diǎn)D0,D2,...,DnD_0,D_2,...,D_nD0?,D2?,...,Dn?和次數(shù)ppp,控制點(diǎn)個(gè)數(shù)參數(shù)hhh,求一條由h+1h+1h+1個(gè)控制點(diǎn)定義的ppp次B樣條曲線,該曲線滿足以下兩個(gè)條件:
求解:
1.曲線模型:
2.最小二乘意義下的目標(biāo)函數(shù)推導(dǎo):
3.對(duì)單個(gè)控制點(diǎn)PgP_gPg?求導(dǎo):
令導(dǎo)數(shù)為0可得,
4.矩陣形式:
又由,
可得:
求解方程得到PPP,即可得到控制點(diǎn),從而得到所求曲線。
算法:
次數(shù)和控制點(diǎn)個(gè)數(shù)對(duì)所構(gòu)建曲線的影響:
低次曲線通常不能很好地逼近數(shù)據(jù)多邊形,次數(shù)越高的曲線產(chǎn)生的結(jié)果越好;同樣,控制點(diǎn)越多,逼近曲線的靈活性就越高。
但并不是曲線次數(shù)越高,控制點(diǎn)個(gè)數(shù)越多就好,因?yàn)槿直平话惚热植逯凳褂酶俚目刂泣c(diǎn)。如果控制點(diǎn)的個(gè)數(shù)等于數(shù)據(jù)點(diǎn)的個(gè)數(shù),全局逼近就變成了全局插值,就可以用全局插值了!至于次數(shù),只要生成的曲線能捕捉到數(shù)據(jù)多邊形的形狀即可。
逼近的全局性:
更改數(shù)據(jù)點(diǎn)的位置會(huì)導(dǎo)致整個(gè)曲線發(fā)生變化。
7. 曲面插值
問題描述:
給定一個(gè)由(m+1)×(n+1)(m+1)×(n+1)(m+1)×(n+1)個(gè)數(shù)據(jù)點(diǎn)Dij(0<=i<=m,0<=j<=n)D_{ij}(0<=i<=m,0<=j<=n)Dij?(0<=i<=m,0<=j<=n)組成的網(wǎng)格,次數(shù)(p,q)(p,q)(p,q),求一個(gè)由(m+1)×(n+1)(m+1)×(n+1)(m+1)×(n+1)控制點(diǎn)定義的,按給定順序經(jīng)過所有數(shù)據(jù)點(diǎn)的B樣條曲面。
推導(dǎo)過程:
控制點(diǎn)的求解分以下兩步:
算法如下:
由m+1m+1m+1行,n+1n+1n+1列的控制點(diǎn)矩陣PijP_{ij}Pij?,次數(shù)(p,q)(p,q)(p,q),節(jié)點(diǎn)向量U,VU,VU,V,可以得到所求的B樣條曲面。
插值效果圖:
插值的全局性:
由于插值曲面是通過m+n+2條全局曲線插值得到的,因此這種曲面插值是全局的。
8. 曲面逼近
問題描述:
給定一組(m+1)×(n+1)(m+1)×(n+1)(m+1)×(n+1)個(gè)數(shù)據(jù)點(diǎn)Dij(0<=i<=m,0<=j<=n)D_{ij}(0<=i<=m,0<=j<=n)Dij?(0<=i<=m,0<=j<=n),次數(shù)(p,q)(p,q)(p,q),且滿足m>e>=p>=1m>e>=p>=1m>e>=p>=1和n>f>=q>=1n>f>=q>=1n>f>=q>=1的eee和fff,找到由(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)控制點(diǎn)PijP_{ij}Pij?(0<=i<=e,0<=j<=f)(0<=i<=e,0<=j<=f)(0<=i<=e,0<=j<=f)定義的,次數(shù)為(p,q)(p,q)(p,q)的B樣條曲面,該曲面按給定的順序逼近于數(shù)據(jù)點(diǎn)網(wǎng)格。
求解:
uuu方向的m+1m+1m+1個(gè)參數(shù)分別為s0,s1,...,sms_0,s_1,...,s_ms0?,s1?,...,sm?,vvv方向上的n+1n+1n+1個(gè)參數(shù)分別為t0,t1,...,tnt_0,t_1,...,t_nt0?,t1?,...,tn?.
誤差函數(shù):
對(duì)每個(gè)控制點(diǎn)求偏微分:
從而可以得到(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)個(gè)非線性方程,求解非線性方程組非常耗時(shí)。
我們可以找到一個(gè)不使函數(shù)fff最小化的合理的解,而不是尋求最優(yōu)解。
方法:
采用和曲面插值類似的方法,控制點(diǎn)的求解分為以下兩步:
算法如下:
由計(jì)算得到的(e+1)×(f+1)(e+1)×(f+1)(e+1)×(f+1)控制點(diǎn)矩陣PijP_{ij}Pij?,次數(shù)(p,q)(p,q)(p,q),節(jié)點(diǎn)向量UUU,VVV,可以得到給定數(shù)據(jù)點(diǎn)的近似B樣條曲面.
效果圖如下:
盡管該算法不是最小化函數(shù)fff,不是一個(gè)最優(yōu)算法,它仍適合于許多應(yīng)用。
總結(jié)
以上是生活随笔為你收集整理的Interpolation and Approximation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [题解]ADS11 Approximat
- 下一篇: 基于SpringBoot框架的网上购物商