gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:07:36 26 4
gpt4 key购买 nike

如何在 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com