作者shefiroth26 (shefiroth)
看板MATLAB
標題[問題] 從二維矩陣轉換出一個連續可微曲面
時間Tue Feb 18 22:10:17 2014
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
→ ejialan:簡單的作法就是要求值就拿f來fit 要求梯度就拿▽f來fit 02/19 11:53
→ ejialan:也可以拿可微的形狀函數fit完再算梯度 你用多項式不準有可 02/19 11:56
→ ejialan:能是取太高階造成矩陣病態 也可以試試其他函數如rbf 02/19 11:57
→ ejialan:rbf的寫法可參考本板我的文章 #1BSNUEMd 02/19 11:58
→ ejialan:我試了一下用rbf fit的矩陣值和原矩陣誤差在1E-9左右 02/19 12:05
感謝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)
→ ejialan:rbf的形狀函數是global所以矩陣太大可能就不適用 因為在求 02/20 10:45
→ ejialan:係數可能就會因為矩陣病態而無法計算 需要localize 02/20 10:47
→ ejialan:想法類似spline 另外rbf本來是用在多維資料的插值 後來被 02/20 10:49
→ ejialan:應該是沒有問題的 02/20 10:52