0

pdf正規分布の関数の 2 つの交点を見つける必要があります。

曲線のすべての点(x、y)を計算し、iy = pdf('normal', ix, mu, sd)2つの交点を持つ画面にプロットしました。
関数を試してみfzeroましたが、平均が機能せず、両方の曲線の標準偏差が異なるため、配列の長さが異なります。
ループの最も単純なロジック 2 を試しましたが、どちらも機能しませんでした。

たとえば、matlabの精度が24.000と24.001を考慮せず、ガウスからの結果の値には小数点以下15個の整数が含まれるため、matlabが同等性をチェックできなかったため、ブルートフォースアプローチは機能しませんでした。

4

3 に答える 3

6

解析が失敗した場合にのみ、数値メソッドにジャンプします。2 つの正規分布の交点を見つけることは、かなり単純な代数問題です。今は怠惰すぎて適切に行うことができませんが、Matlab は私のためにそれを行うことができます。

>> syms x sig1 sig2 mu1 mu2;
>> solve(1/sig1/sqrt(2*pi) * exp(-1/2*((x-mu1)/sig1)^2) == ...
         1/sig2/sqrt(2*pi) * exp(-1/2*((x-mu2)/sig2)^2), x)

ans =

 +(mu2*sig1^2 - mu1*sig2^2 + sig1*sig2*(2*sig2^2*log(sig2/sig1) - 2*sig1^2*log(sig2/sig1) - 2*mu1*mu2 + mu1^2 + mu2^2)^(1/2))/(sig1^2 - sig2^2)
 -(mu1*sig2^2 - mu2*sig1^2 + sig1*sig2*(2*sig2^2*log(sig2/sig1) - 2*sig1^2*log(sig2/sig1) - 2*mu1*mu2 + mu1^2 + mu2^2)^(1/2))/(sig1^2 - sig2^2)

ここでsig1, sig2、 は 1 番目と 2 番目の標準偏差、mu1, mu2はそれぞれ 1 番目と 2 番目の平均です。

于 2012-10-21T20:40:36.183 に答える
2

分析的なアプローチよりも数値的なアプローチを好む場合は、fzeronormpdf関数を使用できます。

x_intersect = fzero(@(x) normpdf(x, mu1, std1) - normpdf(x, mu2, std2), x0);

正規分布は正常に動作し、任意の 2 つの分布が交差する必要があるため、最初の推定はすべて機能するx0はずです。

于 2012-10-24T01:38:10.577 に答える
-3

これは受け入れられた回答であるため、回答を改善しようとしています(曲線の交差について、この関連する回答で美しく説明したEitan Tの完全な功績です)

交点 (px、py) を手動で見つける必要があります。

idx = find(y1 - y2 < eps, 1); %// Index of coordinate in array
px = x(idx);
py = y1(idx);

浮動小数点表現で 2 つの数値を比較しているので、代わりにy1 == y2許容誤差を設定する必要があることに注意してください。私はそれを eps として選びましたが、決めるのはあなた次第です。

この点の周りに円を描くには、その点を計算してプロットすることができますが、より良いアプローチは、拡大された円マーカーを使用して 1 つの点をプロットすることです (この提案は Jonas の功績によるものです)。

plot(px, py, 'ro', 'MarkerSize', 18)

このようにして、円の寸法はプロットの軸と縦横比の影響を受けません。

于 2012-10-21T19:12:08.357 に答える