2

有谁知道Java的任何峰值拟合库?

我想给它一个数据数组,它告诉我峰值的位置。

例如对于这个数据:

x, y
-5, 0.875333026
-4, 0.885868909
-3, 0.895851362
-2, 0.903971085
-1, 0.908274124
0, 0.907117054
1, 0.901894046
2, 0.894918547
3, 0.887651936
4, 0.880114302
5, 0.872150014

它会说峰值在(大约)-0.75

我可能只想适合一个高斯,或者一个分裂的高斯......

.

我已将其标记为curve-fitting、不peak-fittingpeak-finding因为我没有足够的声誉来制作新标签...

编辑:我更喜欢 Apache(或兼容的)许可代码......

4

2 回答 2

1

您想通过最小二乘拟合确定峰值的位置吗?我认为最流行的方法是 Levenberg-Marquardt 算法。

我不知道任何 Java 库,但我会搜索以下术语:非线性曲线拟合、非线性最小二乘法、Levenberg-Marquardt 或只是 Marquardt 方法。您也可以考虑自己编写代码。如果您有一个用于矩阵操作的库,它就像 20-30 行代码(请参阅数字食谱)。

最后,还有我在 GPL 上的峰值检测和峰值拟合程序(峰值表示钟形曲线)。它包括一个库 (libfityk) 和基于 SWIG 的 Python 和 Lua 库绑定。有人报告说还生成 Java 绑定并使用来自 Java 的 libfityk。但老实说,这可能对您的需求有点过头了。

于 2010-07-14T12:23:10.053 回答
1

不确定您是否找到了答案,但您当然可以使用 Apache Commons Math http://commons.apache.org/math/index.html 它有几个曲线拟合方法和一个实现Levenberg-Marquardt 图书馆。

于 2011-01-17T21:47:45.010 回答