3

ベクトルがあります。これを x と呼びます。これには、平均から計算した非常に小さな数値が含まれています。x の対数変換、たとえば y=10*log10(x) を、平均を求めるときに計算された ± 2 標準偏差に等しいエラーバーと共にプロットしたいと思います。

これを行うには、次のコードを使用しています。

figure
errorbar(lengths, 10*log10(x), ...
    10*log10(x-2*std_x), 10*log10(x+2*std_x), 'o')

私の問題は、 x には非常に小さな値が含まれているため、 x-2*std_x は通常負の数であり、負の数の対数を取得できないことです。

それで、私の質問は、線形領域の標準偏差を差し引いて負の数が得られるときに、対数領域にエラーバーをプロットするにはどうすればよいかということだと思います. +-はできません

4

3 に答える 3

2

実際、あなたはerrorbar間違って呼んでいます。あなたは電話するべきです

figure
errorbar(lengths, 10*log10(x),10*log10(2*std_x), 'o')

std_xが小さすぎてこれが機能しない場合は、 からまでのerrorbar垂直線をプロットして、 の独自のバージョンを作成できます。10*log10(x-2*std_x)10*log10(x+2*std_x)

于 2010-12-10T05:41:11.733 に答える
2

2 つのエラー構成で errorbar を使用し、y 軸を対数に変更します。

eps = 1E-4;  %whatever you consider to be a very small fraction
ebl = min(2*std_x, x*(1-eps));
ebu = 2*std_x;
errorbar(lengths, x, ebl, ebu, 'o');
set(gca, 'YScale', 'log');

を使用して手動で yaxis 範囲を調整することをお勧めします。ylim

于 2010-12-10T17:23:36.973 に答える
1

これらの値を小さいがログ可能な値 (たとえば、40 dB 低い) に置き換えることができます。

minb = x-2*std_x;
mask = (minb <= 0);
minb(mask) = x/1e4;
... use 10*log10(minb) instead

または、いくつかの最小値にしきい値を設定します。

K = min(x) / 1e4; % so that K is 40 db below the smallest x
... use 10*log10(max(K, x-2*std_x)) instead.

または類似のもの。

編集してコメントとさらなる考えを要約します。

エラーバーがある理由を考えるべきでしょう。通常、エラーバーは、信頼/確率の尺度を示す傾向があります (たとえば、x% の時間で、値は指定された範囲内にあります)。この場合、量の対数が取られ、量が非負の分布から引き出される可能性があります。その場合、平均 +/- K * std_deviation ではない境界を使用して境界を示す方がおそらくより正確です。

累積分布関数 F(x) の単峰性分布を仮定すると、「適切な」境界 (つまり、特定の確率で最小) は、おそらく次のようになります。

F'(x1) = F'(x2)、F(x2) - F(x1) = desired_probability、および x1 <= モード <= x2。

これは、対称分布の平均 +/- K std_deviation ですが、前述のように、厳密に正の分布の場合は、おそらく別の処理が必要です。

于 2010-12-09T01:02:53.860 に答える