python 中反问题的拉普拉斯平滑

Laplacian smoothing for inverse problem in python

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

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

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

为了惩罚 "non-physical" 解,我们可以通过拉普拉斯平滑矩阵假设网格点中的位移与其相邻点的位移相似,从而对逆问题进行正则化。在数学上,我们想要的是最小化位移的拉普拉斯算子,使用矩阵可以写成:

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

其中 F 是拉普拉斯矩阵,S 是位移列向量,“0”是零列向量。 n 是反演中使用的网格点数。等式 [1] 和 [2] 都可以使用此脚本中使用的 scipy.optimize.nnls 等方法进行优化。

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

谢谢

也许 NetworkX Python 中的库是一个选项。考虑到地球下方的位移可以在网格中离散化,您可以构建网络 G(N, E),其中 N 是网格中的节点数,E 是连接节点 N 的所有可能边。

在每个节点和边上,您可以应用一个权重值(e.g.displacement 度量)。 此外,NetworkX 具有与 Laplacian Matrix calculation.

相关的功能