[問題] 從二維矩陣轉換出一個連續可微曲面

看板MATLAB作者 (shefiroth)時間11年前 (2014/02/18 22:10), 編輯推噓0(0010)
留言10則, 1人參與, 最新討論串1/1
Input: 一個二維矩陣 Output: 轉換出一個連續的曲面 f(x,y) 並可算出曲面上任意位置的梯度值▽f(x,y) 例如: z= [ 412 407 412 512 527 ; 162 90 162 266 290; 412 407 412 512 527; 458 453 458 557 572; 482 477 482 581 596 ] 轉換出f(x, y) f(2, 2) = 90 f(3, 4) = 512 以上兩點座標剛好是整數,所以算出的值應該會和矩陣值相同(或是相近) ▽f(3, 4) = (57.5, 145.5) 這值是用gradient function算出的值 f(3.5, 2.2) = ? ▽f(3.5, 2.2) = ? 目前有試過的function gradient: 可算出矩陣的梯度值,但輸出是以矩陣的方式,並非連續的, 無法算出非整數座標時的梯度值 fit: 可以計算曲面上的值,但不知如何得到梯度值 目前用過的fitType: linearinterp, nearestinterp 但各曲面連接的線段上可能不可微分 polynomial surfaces 用來逼近的話有很多點的值差距很大 版上大神們對於這問題是否能提供一些意見呢? 是否有特別的名詞來敘述這個問題? 目前我能想到的只有fitting,如果能有確定的名詞的話也比較好找方法 另外是否有其他版適合用來討論這問題呢? 連結是比較大的矩陣,並plot出fit的結果 https://drive.google.com/file/d/0B0zE4dfRjG4daFdXNi1lOEppUlk/edit?usp=sharing 拜託大家解惑了, 謝謝 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.48.61

02/19 11:53, , 1F
簡單的作法就是要求值就拿f來fit 要求梯度就拿▽f來fit
02/19 11:53, 1F

02/19 11:56, , 2F
也可以拿可微的形狀函數fit完再算梯度 你用多項式不準有可
02/19 11:56, 2F

02/19 11:57, , 3F
能是取太高階造成矩陣病態 也可以試試其他函數如rbf
02/19 11:57, 3F

02/19 11:58, , 4F
rbf的寫法可參考本板我的文章 #1BSNUEMd
02/19 11:58, 4F

02/19 12:05, , 5F
我試了一下用rbf fit的矩陣值和原矩陣誤差在1E-9左右
02/19 12:05, 5F
感謝ejialan大神的回應 我比較需要取得的是梯度的值,用▽f來fit的確是滿方便的。 看了一下rbf的介紹,有很多地方不懂。 如果我矩陣的是200x100,那我用rbf就需要先算出那40000個點的係數嗎? 我每次要計算任意一個座標的值,就需要先把40000個值加總起來。 這樣複雜度可能會太大了,因為我轉出的曲面會不斷的呼叫來取值。 另外rbf得到的曲面可以證明是可微的嗎? ※ 編輯: shefiroth26 來自: 140.112.48.61 (02/19 18:05) ※ 編輯: shefiroth26 來自: 140.112.48.61 (02/19 18:14)

02/20 10:45, , 6F
rbf的形狀函數是global所以矩陣太大可能就不適用 因為在求
02/20 10:45, 6F

02/20 10:47, , 7F
係數可能就會因為矩陣病態而無法計算 需要localize
02/20 10:47, 7F

02/20 10:49, , 8F
想法類似spline 另外rbf本來是用在多維資料的插值 後來被
02/20 10:49, 8F

02/20 10:52, , 9F
應用在求解PDE 可參考維基http://ppt.cc/sd~Y 所以可微性
02/20 10:52, 9F

02/20 10:52, , 10F
應該是沒有問題的
02/20 10:52, 10F
文章代碼(AID): #1J0sdCwr (MATLAB)
文章代碼(AID): #1J0sdCwr (MATLAB)