use*_*812 4 interpolation non-uniform-distribution
如何在FORTRAN中实现二维插值,其中数据如下所示.x和y是两个坐标,z是取决于它们的值,x是均匀间隔的,但是y不是均匀间隔的,并且对应于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 -
.......
.......
Run Code Online (Sandbox Code Playgroud)
我将假设您已经按照您提供的格式将数据读入数组N x 3.我假设你提前不知道X间距是什么 - 你肯定不知道Y间距因为它的变化.因此,我建议采取以下策略:
我的FORTRAN有点生疏 - 希望这是一些帮助.
PS - 可能更简单的方法是使用X值已经均匀间隔的事实.这允许您进行更好的插值.看这张图:

找到解决这个问题的最快方法之前,我建议找到一个方法来解决这个问题.简而言之,我建议:
1)找到(x,y)点的Delaunay三角剖分.例如,执行此操作的Fortran代码位于GEOMPACK中.
2)在给定Delaunay三角剖分的情况下进行插值,找到包含要进行插值的点的三角形,然后基于该点相对于每个三角形顶点的位置插入z值.
(编辑)我忘记了方法的名称(如果我知道的话)但是,多亏了@Floris,在三角形中插值的好方法称为重心插值,它根据区域的比率找到插值在三个较小的三角形中,可以通过从大三角形内的点到三角形的每个角绘制线来分割大三角形.每个小三角形的面积可以使用Heron公式从三角形每边的长度找到.
如果需要提高速度,我认为它们主要是通过快速找到包含插值点的三角形来获得的,但是我想在选择要优化的代码位之前对一些测试运行进行分析.