使用图层的一维速度模型的数据结构和算法?

时间:2019-06-27 08:44:57

标签: algorithm modeling

这是针对我正在创建的地球物理分析程序。我已经拥有执行所有这些操作的代码,但是我正在寻找灵感和想法(良好的数据结构和算法)

我要建模的东西:

  • 速度与深度(z)的关系
  • 该模型由多层(<10)构建
    • 每层都可以通过从最顶层的0到最底层的n的索引进行访问。
  • 每一层的速度都是深度的线性函数(第k层的梯度a_k和轴截距b_k)
  • 每一层都有顶部和底部的深度(z_k-1和z_k)
  • 模型已完成,各层之间没有空间。直接位于两层之间的点属于下层

要求:

  • 获取模型内任意深度的速度。该操作将完成大约1k到10k倍,因此应该对其进行优化。
  • 通过层索引访问层的顶部和底部深度,梯度和截距

到目前为止我所拥有的:
我有工作的Python代码,其中每个层都保存为numpy数组,其值分别为z_k(底部深度),z_k-1(顶部深度),a_k(速度梯度)和b_k(轴截距)。为了在特定深度评估模型,我获得了层索引(,使用该索引获取层的参数,并将其传递给评估线速度梯度的函数。

1 个答案:

答案 0 :(得分:1)

因此,您具有分段线性相关性,其中块的z坐标末端不规则,并希望在给定的z处获得函数值。

请注意,对10个片段使用二进制搜索是没有意义的(3-4轮BS可能比9个简单比较慢)。

但是您的深度查询精度是多少?请注意,您还可以存储1米分辨率和1毫米分辨率的表格-只有10 ^ 7个条目可提供O(1)访问任何预先计算的速度值

对于有限数量的零件,可以制作长公式(涉及整数除法),但结果可能会更慢。

带有边界点2和4.5的任意三段式折线的示例:

f = f0 + 0.2*int(z/2.0)*(z-2.0) + 0.03*int(z/4.5)*(z-4.5)