【发布时间】:2017-09-28 10:02:04
【问题描述】:
我花了几天时间试图让这个完全相同的代码在 java 中运行:How do I fit a sine curve to my data with pylab and numpy?
基于这个答案:Sine Wave Curve Fitting in Java,我已经开始整理这段代码:
public double sine_fit(double[] current_sample){
double[] half_cycle = Arrays.copyOfRange(current_sample, 175, 225);
double amp = 3*ArrayUtils.std(half_cycle)/Math.sqrt(2);
double freq = 0;
double phase = 0;
double[] guess = new double[]{amp, freq, phase};
HarmonicCurveFitter curveFit = new HarmonicCurveFitter(new LevenbergMarquardtOptimizer());
//curveFit.withStartPoint(guess);
for (int i=0; i < half_cycle.length; i++) {
curveFit.addObservedPoint(i, half_cycle[i]);
}
double[] vals = curveFit.fit();
System.out.println(vals);
}
它无法编译,也不是我想要的(即,与第一个链接中的内容完全相同)
非常感谢一些帮助。无法在 Java 中完成我在 Python 中只用几行代码就能完成的事情,这让我发疯了。
P.S.:长期 Python 编码员,新手 Java 程序员。
更新
基于@17slim 的回答:
double[] half_cycle = Arrays.copyOfRange(current_sample, 175, 225);
double amp = 3*ArrayUtils.std(half_cycle)/Math.sqrt(2);
double freq = 0;
double phase = 0;
double[] guess = new double[]{amp, freq, phase};
HarmonicCurveFitter curveFit = HarmonicCurveFitter.create();
curveFit.withStartPoint(guess);
List<WeightedObservedPoint> points = new ArrayList<WeightedObservedPoint>();
for (int i=0; i < half_cycle.length; i++) {
points.add(new WeightedObservedPoint(1.0, i, half_cycle[i]));
}
double[] vals = curveFit.fit(points);
for (double val: vals){
System.out.println(val);
}
【问题讨论】:
-
你得到什么错误?
-
- 无法解析方法
addObservedPoint- 类 org.apache.commons.math3.fitting.HarmonicCurveFitter 中的构造函数 HarmonicCurveFitter 不能应用于给定类型;必需:double[],int 找到:org.apache.commons.math3.fitting.leastsquares.LevenbergMarquardtOptimizer - 类 org.apache.commons.math3.fitting.AbstractCurveFitter 中的方法拟合不能应用于给定类型;必需:java.util.Collection找到:无参数 -
什么是 HarmonicCurveFitter?我似乎无法在任何地方找到参考
-
import org.apache.commons.math3.fitting.HarmonicCurveFitter;
标签: java least-squares trigonometry