単一の1Dガウス分布を直接近似することは、非線形近似の問題です。既製の実装は、ここ、またはここ、または2Dの場合はここ、またはここ(統計ツールボックスがある場合)にあります(Googleについて聞いたことがありますか?:)
とにかく、もっと簡単な解決策があるかもしれません。y
データがガウス関数によって適切に記述され、範囲全体に適度に分散されていることが確実にわかっている場合x
は、問題を線形化できます(これらは方程式であり、ステートメントではありません)。
y = 1/(σ·√(2π)) · exp( -½ ( (x-μ)/σ )² )
ln y = ln( 1/(σ·√(2π)) ) - ½ ( (x-μ)/σ )²
= Px² + Qx + R
ここで置換
P = -1/(2σ²)
Q = +2μ/(2σ²)
R = ln( 1/(σ·√(2π)) ) - ½(μ/σ)²
作ったことがある。ここで、線形システムを次のように解きますAx=b
(これらはMatlabステートメントです)。
% design matrix for least squares fit
xdata = xdata(:);
A = [xdata.^2, xdata, ones(size(xdata))];
% log of your data
b = log(y(:));
% least-squares solution for x
x = A\b;
x
この方法で見つけたベクトルは等しくなります
x == [P Q R]
次に、平均μと標準偏差σを見つけるためにリバースエンジニアリングする必要があります。
mu = -x(2)/x(1)/2;
sigma = sqrt( -1/2/x(1) );
クロスチェックできるもの(わずかなx(3) == R
違いがあるはずです)。