interpolation - 二维插值不规则网格fortran

标签 interpolation non-uniform-distribution

如何在 FORTRAN 中实现二维插值,其中数据如下所示。
x 和 y 是两个坐标,z 是依赖于它们的值
x 间隔均匀但 y 不均匀间隔且 y 的最大值
对应于 x 的统一值不断增加。
在不损失太多准确性的情况下-

  • 基于给定的 x 获得 z 值的最简单方法是什么
    你呢?
  • 基于 a 获得 z 值的最快方法是什么?
    给定 x 和 y?

  • 谢谢
    SM
    x    y    z
    -----------
    0   0     -
    0   0.014 -
    0   0.02  -
    
    .....
    ....
    
    0.1 0     -
    0.1 0.02  -
    0.1 0.03  - 
    
    .......
    .....
    
    1.0  0     -
    1.0  0.05  -
    1.0  0.08  -
    
    .......
    .......
    

    最佳答案

    我将假设您已经按照您提供的格式将数据读入 N x 3 数组。我假设您事先不知道 X 间距是什么 - 您绝对不知道 Y 间距随着它的变化而变化。因此,我会推荐以下策略:

  • 计算 X 间距:从第一行开始,遍历 X 元素,直到您看到值发生变化。您现在知道 XSTART 和 XSTEP - 稍后您将需要它们。
  • 在数组中对值 X 进行二分搜索,直到找到值 XFOUND,使得 XFOUND < X < XFOUND + XSTART
  • 假设您指向“列表中的某个位置”,您会找到相应的 Y 值 - 根据它是否大于或小于您需要的值,您可以向上或向下移动数组,直到找到第一个条目 < Y。相应的值为 X11、Y11、Z11。数组中的下一行是 X12、Y12 和 Z12。
  • 在进行插值之前,您还需要两个点 - 重复此过程,寻找“X 的下一个较大值”。这会给你 XYZ21 和 XYZ22
  • 现在可以考虑计算插值后的 Z 值。通常有不同的技术,具有不同的精度:
  • "最近的邻居":找到最近的点,并使用它的 Z 值(最简单,最不准确)
  • “线性插值”:找到三个最近的点,并根据相对距离对值进行线性插值
  • “高阶估计”:为此,您通常需要创建网格点的完整连接映射,因此您可以进行样条插值并获得平滑插值,该插值通常在网格点之间的点处更准确(假设样本描述的函数实际上是一个平滑函数!)

  • 我的 FORTRAN 有点生疏 - 希望这是一些帮助。

    PS - 可能更简单的方法是利用 X 值已经均匀分布的事实。这使您可以进行更好的插值。看这张图:

    关于interpolation - 二维插值不规则网格fortran,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478551/

    相关文章:

    c++ - 与 C++ 中的 numpy.random.choice 等效的函数

    python - 给定比例的随机非均匀分布

    security - 为什么采用哈希模的加盐哈希会导致非常不均匀的分布?

    r - ApproxNA 在大型栅格堆栈中产生不同且不正确的结果

    关于边缘 NaN 的 Matlab "interp2"问题

    python - pandas DataFrame 的插值

    python - 使用行和列值插入缺失值

    python - 如何在通过将 txt 文件加载到 scipy 程序形成的图上的特定间隔内插入点?

    c++ - 用特定分布的非均匀屏幕点填充 vector