我有在运行时生成数据的算法。保证该值在该时间内具有向下倾向,并且在理想条件下它将类似于双曲线(或者至少它具有双曲线形状)。基本绘制的图形(x
轴是时间和y
轴的值)看起来像这样:
现在,我想预测,在运行时间n
时间步之后,值将如何显示。我试图使用org.apache.commons.math3
的线性或多项式回归,但显然,由于曲线不是线性的,也不是多项式的,因此预测不能很好。两个预测都提供没有向下趋势的曲线。
为了解决这个问题,我尝试使用odinsbane's least squares,但是我有麻烦提供正确的第一个参数假设,因此我无法正确拟合曲线。
所以我的问题是:是否有任何kotlin / java库,它可以在没有我提供第一个参数估计的情况下正确地拟合我的数据?
我的最终解决方案是使用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]
值这使我能够拟合“类似双曲线”的数据。