作者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
1F:→ ejialan:简单的作法就是要求值就拿f来fit 要求梯度就拿▽f来fit 02/19 11:53
2F:→ ejialan:也可以拿可微的形状函数fit完再算梯度 你用多项式不准有可 02/19 11:56
3F:→ ejialan:能是取太高阶造成矩阵病态 也可以试试其他函数如rbf 02/19 11:57
4F:→ ejialan:rbf的写法可参考本板我的文章 #1BSNUEMd 02/19 11:58
5F:→ 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)
6F:→ ejialan:rbf的形状函数是global所以矩阵太大可能就不适用 因为在求 02/20 10:45
7F:→ ejialan:系数可能就会因为矩阵病态而无法计算 需要localize 02/20 10:47
8F:→ ejialan:想法类似spline 另外rbf本来是用在多维资料的插值 後来被 02/20 10:49
10F:→ ejialan:应该是没有问题的 02/20 10:52