2016-03-30 3 views
1

hereの関数を使用してヒストグラムのスムージングを計算しました。私が理解するところでは、下の画像の点0.5にマークされた点は、ヒストグラムの導関数がゼロに等しいところ、すなわち平滑化曲線が下降するとビンと交差する点である。ヒストグラムを視覚化せずに(計算によって)この点を自動的または数値計算する方法はありますか? enter image description hereヒストグラム上のポイントがデリバティブがゼロの場合はどうすれば計算できますか?

+2

「ヒストグラムの導関数」は、「0.4」付近でゼロです。 '0.5 'の近くで起こるのは、ヒストグラム*自体がゼロになることです。大きな違い。 –

+0

ありがとう@AndrasDeak。ヒストグラムを視覚化せずにデータからポイント0.5を計算する方法はありますか? – Tee

答えて

1

例からすべてのプロットコマンドを削除することができます。

y = [randn(1,5001), randn(1,2001)+6]; 

[heights,centers] = hist(y); 
n = length(centers); 
w = centers(2)-centers(1); 
t = linspace(centers(1)-w/2,centers(end)+w/2,n+1); 

dt = diff(t); 
Fvals = cumsum([0,heights.*dt]); 
F = spline(t, [0, Fvals, 0]); 

DF = fnder(F); % computes its first derivative 

、どのようにあなたがDFのため、実際のデータポイントを得るのです:それはつまるところ何 は、次のでしょうか? manual page for fnpltを読むと、変数に代入するとデータポイントが生成され、プロットは生成されません。データは> 0、どこ符号変化です

pts = fnplt(DF); 

今はちょうどチェック:

pts(2, find(diff(pts(1,:) > 0) == -1) + 1) 

はのは、それを離れてみましょう:

pts(1,:) > 0 

はスプラインがある1との論理ベクトルを作成します。それ以外は0より大きい。

連続した要素の違いを計算します。 pts(1,:)が1から0に変わるとき、これは-1になります。 findを使用すると、これらの遷移の位置がわかります。最後に、記号の変更後にスプラインの位置を取得するために1を追加します。

+0

あなたの解説の最後の行ではっきりしていません。同じデータを使って解を計算しても、私の質問からヒストグラムイメージにマークされた視覚化結果と同じ答えは得られません。 – Tee

関連する問題