(안드로이드 상당히 그것의 통계 라이브러리에 제한 될 것으로 보인다 이후 수동이어야한다 기억). 다음
// Initialize analyzers
_optimizer = new LevenbergMarquardtOptimizer();
_fitter = new CurveFitter(_optimizer);
// Initialize the analysis results
_gaussians = new ArrayList<GaussianFunction>();
// Load the data into the gaussian fitter
for (int i = 0; i != data.length; i++)
_fitter.addObservedPoint(i, data[i]);
실제로 맞게 수행 :
내가 데이터를 준비하는 데 사용되는 코드는 같은 것을했다 당신은 당신의 데이터에 잡음이 언급
public void analyze() {
// Calculate Mean
double sum_yx = 0.0;
double sum_y = 0.0;
for (int i = 0; i != _data.length; i++) {
sum_yx += _data[i] * (i + 1);
sum_y += _data[i];
}
double mean = sum_yx/sum_y;
// Peform the gaussian fit
// If no guesses given, fit to the mean of the data
if (_guesses.size() == 0) {
double[] guess = new double[] { 0, 1, mean, 1 };
double ret[];
try {
ret = _fitter.fit(new ParametricGaussianFunction(), guess);
_gaussians.add(new GaussianFunction(ret[0], ret[1], ret[2],
ret[3]));
} catch (Exception e) {
e.printStackTrace();
}
}
// If guesses are given, fit to each one
else {
try {
for (double[] guess : _guesses) {
double ret[] = _fitter.fit(
new ParametricGaussianFunction(), guess);
_gaussians.add(new GaussianFunction(ret[0], ret[1], ret[2],
ret[3]));
}
} catch (Exception e) {
e.printStackTrace();
// _gaussian = null;
}
}
}
을; 추측을 포함 시켰습니다. Gaussian 분포를 가진 봉우리에 맞추어야했기 때문입니다. 초기 조건은 매우 정확해야합니다. 추측이 몇 픽셀 정도 벗어난 경우 피크가 아닌 전체 데이터 세트에 적합합니다. 나는 fallback/greater trend가 맞지 않는다면, 실패 할 것입니다.
GaussianFunction에는 각각 y 오프셋, 진폭, 중심 위치 및 시그마 인 암호 매개 변수 A, B, C 및 D가 있습니다.
안드로이드에 대한 한 가지 사실을 모르기 때문에이 패키지를 사용할 수 있는지 모르겠지만 관련 패키지를 찾는 동안이 질문을 발견했습니다. (또한 Java의 Matlab 응용 프로그램, 재미 없어). 아직 이해하지 못했다면이 방법이 도움이 될 것입니다. org.apache.commons.math3의 3.3 버전으로
이것은 주제와 관련이 없습니다. 그래서 프로그래밍 질문을위한 것이지 수학 질문이 아닙니다. [MathematicsSE] (http://math.stackexchange.com/)를 확인하십시오. –
하지만 그것은 프로그래밍 문제입니다, 하하. –