我有一堆不均匀采样(1-D)数据,以x和y值的形式,我想取laplacian值。是否有一种简单的方法可以在矮胖/枕木中做到这一点?
我正在考虑采取梯度梯度,但这难道不会引入伪影,即使是在均匀抽样的数据?例如,给定数据0,0,0,4,8,8,8和一维laplace算子1,-2,1,laplacian将是0,0,4,0,-4,0,0,但是使用梯度梯度将产生0,1,2,0,-2,-1,0。
发布于 2013-08-12 23:38:00
计算均匀网格的[1, -2, 1]算子的一种方法是用前向差分格式计算第一个导数,用反向差分格式计算第二个导数,反之亦然,因为两者得到的结果是相同的。因此,对于不均匀网格,一个很好的选择是,两种方法都这样做,然后将结果平均化。
假设我们正在查看一个网格点,它位于前一个网格点之前的hb,以及下一个网格点后面的hf:
--+----+----+---
x-hb x x+hb 如果我没有搞砸我的代数,您在x的拉普拉斯( Laplacian )计算的平均值将是:
(f(x+hf)*(1+hb/hf) + f(x)(2+hb/hf+hf/hb) + f(x-hb)(1+hf/hb)) / (2*hf*hb)您可以在一维数组上计算这个值,执行:
def laplacian(x, y):
x = np.asarray(x)
y = np.asarray(y)
hb = x[1:-1] - x[:-2]
hf = x[2:] - x[1:-1]
y_hb = y[:-2]
y_hf = y[2:]
hb_hf = hb / hf
hf_hb = hf / hb
return (y_hf*(1+hb_hf) - y[1:-1]*(2+hb_hf+hf_hb) +
y_hb*(1+hf_hb)) / 2 / hb / hf
>>> laplacian(range(7), [0,0,0,4,8,8,8])
array([ 0., 4., 0., -4., 0.])https://stackoverflow.com/questions/18197008
复制相似问题