基于移動最小二乘法的曲線曲面擬合(python語言實現)

1.移動最小二乘法

上篇論文采用最小二乘法來擬合曲線期升,如果離散數據量比較大,形狀復雜烙样,還需要分段擬合和平滑化,因此采用移動最小二乘法進行曲線擬合蕊肥,可以克服上面的缺點谒获,還具有一些優(yōu)點;
移動最小二乘法與傳統的最小二乘法相比壁却,有兩個比較大的改進:

( 1)擬合函數的建立不同批狱。這種方法建立擬合函數不是采用傳統的多項式或其它函數,而是由一個系數向量 a(x)和基函數 p(x)構成展东, 這里 a(x)不是常數赔硫,而是坐標 x 的函數倘屹。
( 2)引入緊支( Compact Support)概念衣式,認為點 x 處的值 y 只受 x
附近子域內節(jié)點影響,這個子域稱作點 x 的影響區(qū)域缰揪, 影響區(qū)域外的節(jié)點對 x的取值沒有影響砸王。在影響區(qū)域上定義一個權函數w(x)推盛, 如果權函數在整個區(qū)域取為常數, 就得到傳統的最小二乘法处硬。

參考自《基于移動最小二乘法的曲線曲面擬合-曾清紅》

2.擬合函數的建立

在擬合區(qū)域的一個局部子域上小槐, 擬合函數 f (x)表示為:


這里寫圖片描述

式中
這里寫圖片描述
為待求系數,它是坐標x的函數荷辕。
這里寫圖片描述
稱為基函數凿跳。它是一個k階完備的多項式,m是基函數的項數疮方,
這里寫圖片描述

對于一維問題 :
基函數可以為 p(x)=

二維問題可以為: 線性基 p(x)=[1.x.y]^T, m=3 二次基 p(x) =[1,x,y,x^2,xy,y^2]^T m=6

這是為在閱讀文獻時的疑惑控嗜,因為我解決的是一維問題,所以不需要二維的基函數骡显。
在移動最小二乘近似中, 系數 a_i(x) 是通過令近似函數 u(x) 在點 x 的鄰域 內各節(jié)點誤差的加權平方和為最小來確定的

這里寫圖片描述

這里寫圖片描述

式中 n 為點 x 的鄰域 內所包含的節(jié)點數., 稱為節(jié)點 處的權函數, 它在節(jié)點 xI 周圍的一個有限區(qū)域中大于零, 而在該區(qū)域外為零 . 權函數的定義表明, 只有在節(jié)點 xI 的影響域范圍內的節(jié)點才對該點的近似函數產生影響.

這里對支撐域進行說明:
如圖:


這里寫圖片描述

將整個x范圍劃分為若干個區(qū)域疆栏,每個區(qū)域包含若干個x點曾掂,那么并且規(guī)定其中一點為標準點,其他點為參考點壁顶。
參考點與標準點的距離作為權函數的參數珠洗。得出權重。

3.權函數

權函數在移動最小二乘法中起著非常重要的作用若专。移動最小二乘法中的權函數 w(x-x_I)應該具有緊支性许蓖,也就是權函數在 x
的一個子域內不等于零, 在這個子域之外全為零调衰, 這個子域稱為權函數的支持域(即 x 的影響區(qū)域)膊爪。一般選擇圓形作為權函數的支持域(見圖其半徑記為 s_{max}。 由于權函數的緊支性嚎莉,只有這些包含在影響區(qū)域內的數據點對點 x 的取值有影響權函數 w(x-x_I)應該是非負的米酬,并且隨著||x - x_i||^2 的增加單調遞減。權函數還應具有一定的光滑性趋箩,因為擬合函數會繼承權函數的連續(xù)性:如果權函數w(x-x_I)是 C1 階連續(xù)的赃额,則擬合函數也是 C1 階連續(xù)的。常用的權函數是樣條函數

這里寫圖片描述

4

3 法方程的推導
對于任意函數 h(x) 和 g(x), 引入記號:

這里寫圖片描述

那么:
公式4可以寫為:
這里寫圖片描述

寫成矩陣形式:
這里寫圖片描述

由上面的法方程, 解得 a(x).
然后求解得出A(x),B(x) 求解得出(x)
這里寫圖片描述

4.擬合流程
這里寫圖片描述

這里說明一下為什么要網格化阁簸,網格化主要是選取標準點爬早,并以標準點來劃分支撐域,確定支撐域半徑和支撐域內的節(jié)點
x启妹。
我仍然以上篇最小二乘法的數據點為例筛严,通過代碼編寫移動最小二乘法的方法:

#主題部分
X=np.arange(-0.9,0.9,0.05)
# 數據點x個數
M=len(x)
# 基函數個數
N=2
p=np.zeros((M,2))
Y=[]
for XX in X:
    w = np.zeros((M,1))
    d=0.1 # 影響區(qū)域的半徑
    for i in range(0,M):
        w[i]=W_fun(d, x[i], XX)
        p[i][0]=1
        p[i][1]=x[i]
    A=fun_A(x,w,p)
    B=fun_B(y,w,p)
    a=np.linalg.solve(A,B)
    Y.append(a[0]+a[1]*XX)


----------


#其他函數部分
# 權函數
def W_fun(d,x,X):
    s=abs(x-X)/d
    if (s<=0.5):
        return (2/3)-4*s**2+4*s**3
    elif(s<=1):
        return (4/3)-4*s+4*s**2-(4/3)*s**3
    else:
        return 0
# 權函數記號(pm,pn)的計算
def pm_pn(w,x,p,m,n):
    # x為數據點,w為支撐域的權重饶米,M為數據點個數 p1,p2為傳入的數值
    pmn=0
    M=len(x)
    # i代表數據點,m n代表(pm,pn)的下標
    for i in range(M):
        pmn=pmn+w[i]*p[i][m]*p[i][n]
    return float(pmn)
# B矩陣的建立
def fun_B(u,w,p):
    pumI=0
    M=len(u) #數據點個數
    m=p.shape[1] # 基函數個數
    B=[]
    for j in range(m):
        for i in range(M):
            pumI=pumI+w[i]*p[i][j]*u[i]
        B.append(float(pumI))
    return B
 # A矩陣的建立
def fun_A(x,w,p):
    M=len(x)函數
    m=p.shape[1]
    A=[]
    for mm in range(m):
        matA=[]
        for nn in range(m):
            pmn=pm_pn(w,x,p,mm,nn)
            matA.append(pmn)
        A.append(matA)
    return A

結果

5.結果


這里寫圖片描述

綠色為移動最小二乘法桨啃,紅色為最小二乘法。


這里寫圖片描述

參考文獻:
1基于移動最小二乘法的曲線曲面擬合-曾清紅
2移動最小二乘法在多功能傳感器數據重構中的應用-劉丹
3 移動最小二乘法(MLS)曲線曲面擬合C++代碼實現
https://blog.csdn.net/liumangmao1314/article/details/54179526

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末檬输,一起剝皮案震驚了整個濱河市照瘾,隨后出現的幾起案子,更是在濱河造成了極大的恐慌丧慈,老刑警劉巖析命,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異逃默,居然都是意外死亡鹃愤,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門完域,熙熙樓的掌柜王于貴愁眉苦臉地迎上來软吐,“玉大人,你說我怎么就攤上這事吟税“及遥” “怎么了姿现?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肖抱。 經常有香客問我备典,道長,這世上最難降的妖魔是什么虐沥? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任熊经,我火速辦了婚禮,結果婚禮上欲险,老公的妹妹穿的比我還像新娘。我一直安慰自己匹涮,他們只是感情好天试,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著然低,像睡著了一般喜每。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雳攘,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天带兜,我揣著相機與錄音,去河邊找鬼吨灭。 笑死刚照,一個胖子當著我的面吹牛,可吹牛的內容都是我干的喧兄。 我是一名探鬼主播无畔,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吠冤!你這毒婦竟也來了浑彰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拯辙,失蹤者是張志新(化名)和其女友劉穎郭变,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體涯保,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡诉濒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了遭赂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片循诉。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撇他,靈堂內的尸體忽然破棺而出茄猫,到底是詐尸還是另有隱情狈蚤,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布划纽,位于F島的核電站脆侮,受9級特大地震影響,放射性物質發(fā)生泄漏勇劣。R本人自食惡果不足惜靖避,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望比默。 院中可真熱鬧幻捏,春花似錦、人聲如沸命咐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醋奠。三九已至榛臼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窜司,已是汗流浹背沛善。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塞祈,地道東北人金刁。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像织咧,于是被迫代替她去往敵國和親胀葱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容