有限指数增长插值算法

时间:2018-12-05 09:52:25

标签: interpolation equation

我需要实现有限的指数增长插值。我在Wikipedia上找到了该公式:

B(t)=S-(S-B(0))*e^(-k*t)

我必须指出标记要创建的曲线的起点和终点的点: enter image description here

我只需要整数区间的曲线值,例如0,1,2,3,结束 因此,从我的角度来看,我需要解决上述k的方程,因为我已经给出了其他所有内容。

这个问题是方程式

B(END_X)=END_Y-(END_Y-START_Y)*e^(-k*END_X)

没有解决方案,因为它仅近似于所需的END_Y值,而从未达到该值。

我的问题是我将如何最有效地实现k的计算,而又不会遇到很多麻烦。将END_Y增加一点,使其超出实际所需的端点? (语言是C ++)

编辑://

END_Y-(END_Y-START_Y)*e^(-k*END_X)=END_Y+sgn(END_Y-START_Y)*G

其中G是一个接近参数。

2 个答案:

答案 0 :(得分:2)

指数增长对应于指数变化的函数。在这种情况下,通常在对数域中执行线性插值,或者在线性域中执行等效操作。

让我们调用(x 0 ,y 0 (x 1 ,y 1 第一点。插值包括为每个输入 x i

计算近似值 y i

对数域中的线性插值:

这将导致线性域:

最后一个指数对应于一个简单变量 t ,该变量以线性方式在0到1之间变化。这意味着该计算可以迭代执行,只需要调用pow()

答案 1 :(得分:1)

对于指数衰减插值

 y = A*exp(-k*x)  (1)

图片中显示的内容,您至少需要知道两个点(x0,y0),(x1,y1)。在这种情况下,您有

y0 = A*exp(-k*x0)
y1 = A*exp(-k*x1)

y0/y1 = exp(-k*x0)/exp(-k*x1) = exp(-k(x0-x1))

k = log(y0/y1)/(x1-x0). 

首先找到 k ,然后找到 A

 A = y0 / exp(-k*x0)

获得 k A 后,您可以在内部点找到 y(x)

(x0<x<x1)

按公式(1)