Java中的非线性(双曲线)曲线拟合

问题描述 投票:0回答:1

我有在运行时生成数据的算法。保证该值在该时间内具有向下倾向,并且在理想条件下它将类似于双曲线(或者至少它具有双曲线形状)。基本绘制的图形(x轴是时间和y轴的值)看起来像这样:

value of algorithm over time

现在,我想预测,在运行时间n时间步之后,值将如何显示。我试图使用org.apache.commons.math3的线性或多项式回归,但显然,由于曲线不是线性的,也不是多项式的,因此预测不能很好。两个预测都提供没有向下趋势的曲线。

为了解决这个问题,我尝试使用odinsbane's least squares,但是我有麻烦提供正确的第一个参数假设,因此我无法正确拟合曲线。

所以我的问题是:是否有任何kotlin / java库,它可以在没有我提供第一个参数估计的情况下正确地拟合我的数据?

java optimization curve-fitting data-fitting
1个回答
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]

这使我能够拟合“类似双曲线”的数据。

© www.soinside.com 2019 - 2024. All rights reserved.