我有在运行时生成数据的算法。可以确保该值在一段时间内具有下降趋势,并且在理想条件下,它会像双曲线(或者至少具有双曲线形状)。基本的绘图图(x
轴是时间,y
轴是值)如下所示:
现在,我想预测一下,在运行期间经过n
个时间步长后,值将如何变化。我尝试使用来自org.apache.commons.math3
的线性或多项式回归,但是显然,由于曲线既不是线性的也不是多项式的,因此预测也不是很好。同样,两种预测都提供了没有下降趋势的曲线。
为解决这个问题,我尝试使用odinsbane's least squares,但是我无法提供正确的第一个参数假设,因此无法正确拟合曲线。
所以我的问题是:是否有任何kotlin / java库,可以在不提供第一个参数估计的情况下正确地拟合我的数据?
答案 0 :(得分:0)
我的最终解决方案是使用this,它是Levenberg–Marquardt
的求解器。
我将通用双曲线函数a + b/(x + c)
分解为a * c + a * x + b - y * c = xy
-因此:
setTargetValues
收到了x*y
数据setValues
提供了a * c + a * x + b - y * c
个值setDerivatives
提供了[c + x, 1, a - y]
个值这使我能够拟合“双曲线型”数据。