有没有人知道Java的任何peakfitting库?
我想给它一个数据数组,它告诉我峰值的位置。
例如,对于这些数据:
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-fitting
或peak-finding
,因为我没有足够的声誉制作新标记...
编辑:我更喜欢Apache(或兼容)许可代码......
答案 0 :(得分: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。但老实说,这可能对你的需求来说太过分了。
答案 1 :(得分:1)
不确定您是否已找到答案,但您当然可以使用Apache Commons Math http://commons.apache.org/math/index.html它有几种曲线拟合方法以及Levenberg-Marquardt库的实现。