拉普拉斯平滑法解决python中的反问题

 收藏

我目前正在研究一个用python编写的反问题,其中使用观测到的GPS数据来推断地下的位移(例如地震和地震)。地下的位移可以在网格中离散化,描述该问题的方程式可以写成:

G(n*n) * S(n*1) =  U(n*1)    [1]

其中G是描述问题的模型矩阵,S是地球矢量下方的位移,U是表面观测矢量。在这种情况下,n是网格点的数量。

为了惩罚“非物理”解决方案,我们可以通过假设网格点中的位移通过拉普拉斯平滑矩阵类似于其邻近点来对反问题进行正则化。数学上,我们想要的是使位移的拉普拉斯最小化,使用矩阵可以写成:

F(nxn) * S(n*1) =  0(n*1) [2]

where F is the laplacian matrix, S is the displacements column vector and "0" is a zero column vector. n is the number of grid points used in the inversion. Both equations [1] and [2] can be optimized with methods such as scipy.optimize.nnls which is used in this script.

问题在于拉普拉斯矩阵的构建,我不确定应该如何开始构建它。是否有任何scipy或其他库方法可以实现我想要的?我已经在scipy中搜索了用于图像处理的拉普拉斯平滑方法,但是我不知道它们是否适用于这种特殊情况。另一个选择是为laplacian建立一个有限差分方法,但是我不确定应该如何开始创建它。

谢谢

回复
  • 蹦叉叉 回复

    Maybe NetworkX library in Python could be an option. Considering that the displacement beneath the earth can be discretized in a grid you can build a network G(N, E) where N is the number of nodes in your grid and E all possible edges connecting your nodes N.

    In each node and edge, you can apply a weight value (e.g.displacement measure). Moreover, NetworkX has a function related to the Laplacian Matrix calculation.