2010-07-13 89 views
2

有谁知道Java的峰值拟合库吗?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,因为我没有足够的信誉,使新的标签......

编辑:我宁愿阿帕奇(或兼容)许可的代码...

回答

1

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

我不知道任何Java库,但我会寻找像非线性曲线拟合,非线性最小二乘法,Levenberg-Marquardt或者仅仅是Marquardt方法的术语。你也可以考虑自己编码。如果你有一个用于矩阵操作的库,它就像20-30行代码(参见Numerical Recipes)。

最后,在GPL上有我的program for peak detection and peak fitting(峰值意味着钟形曲线)。它包括一个库(libfityk)和基于SWIG的绑定到Python和Lua的这个库。有人报告也会生成Java绑定并使用Java中的libfityk。但说实话,这可能是一个矫枉过正的需求。