我正在用 FORTRAN 77 编写一个模拟,其中我需要从一些实验数据中获取一个参数值。数据来自互联网数据库,所以我提前下载了它,但是没有简单的数学模型可以用来提供连续尺度的值——我只有离散的数据点。但是,对于 x 轴上的任何值,我都需要知道这个参数,而不仅仅是我从数据库中获得的离散值。
为简化起见,您可以说我知道 的f(x)
所有整数值的值x
,并且需要一种方法来找到f(x)
任何实际x
值(永远不会超出我所知道的最小或最大x
)。
我的想法是获取数据并进行线性插值,以便能够获取参数值;在伪代码中:
double xd = largest_data_x_lower_than(x)
double slope = (f(xd+dx)-f(xd))/dx // dx is the distance between two x values
double xtra = x-xd
double fofx = f(xd)+slope*xtra
为了实现这一点,我需要对数据点进行某种查找。我可以xd
通过从数据库中获取所有整数的值来轻松查找x
,这样xd = int(x)
和dx = 1
,但我仍然不知道如何实现查找f(xd)
。
什么是实现这一点的好方法?
在一次模拟运行期间,该值将被获取 10^7 到 10^9 次,因此性能至关重要。换句话说,每次我需要一个值时都从 IO 读取f(xd)
不是一种选择。
我目前有一个文本文件中的数据点,每行有一对(制表符分隔)x,f(x)
,所以对于一个解决方案的奖励点,它还提供了一种将数据从那里获取到任何需要的形状的平滑方式。