如何在FORTRAN中实现二维插值,其中数据如下所示。 x和y是两个坐标,z是取决于它们的值 x均匀间隔,但y不均匀间隔,y的最大值 对应于x的均匀值继续增加。 不会失去太多准确性 -
由于 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 -
.......
.......
答案 0 :(得分:7)
我假设您已经按照您提供的格式将数据读入数组N x 3。我假设你提前不知道X间距是什么 - 你肯定不知道Y间距因为它的变化。因此,我建议采用以下策略:
我的FORTRAN有点生疏 - 希望这是一些帮助。
PS - 可能更简单的方法是使用X值已经均匀间隔的事实。这允许您进行更好的插值。看到这张图片:
答案 1 :(得分:6)
在找到解决此问题的最快方法之前,我建议找到 方法来解决问题。简而言之,我建议:
1)找到(x,y)点的Delaunay三角剖分。例如,执行此操作的Fortran代码位于GEOMPACK。
2)在给定Delaunay三角剖分的情况下进行插值,找到包含要进行插值的点的三角形,然后根据点相对于每个三角形顶点的位置插值z值。
(编辑)我忘记了方法的名称(如果我知道的话)但是,多亏了@Floris,在三角形中插值的好方法叫做barycentric interpolation,它找到基于插值的值关于三个较小三角形中的区域的比率,通过从大三角形内的点到三角形的每个角绘制线,可以将大三角形分割成三角形。可以使用Heron's formula从三角形每边的长度找到每个小三角形的面积。
如果需要提高速度,我认为它们主要是通过找到包含插值点的三角形的快速方法获得的,但我想在选择要优化的代码位之前分析一些测试运行。