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