2016-03-24 9 views
0

私は、2項の試行の成功の関数として棒グラフを作成しています。私は私の図では、予想されるYの値を取得していますが、ここでは0から10 にまたがる最後のxの値は、私のコードです:最後の値だけでなく、完全なx軸を棒グラフでプロットする方法

close all; clc; 

p = 0.2; 
figure; 

for j = 1:500 

    for i = 1:10 
     a = rand(); 
     success = fix(a*10); 
     y = nchoosek(10,success)*(p^success)*(1-p)^(10-success); 
     bar(success,y); 
     hold on; 
    end 

end 
+1

結果。結果を配列で収集し、すべての結果とともに 'bar'を1回だけ呼び出すことをお勧めします。 – Hoki

+0

しかし、あなたは5000本の小さなバーをプロットしています。各バーには何がありますか?それぞれの特定の「成功」の合計「y」値の「合計」? –

答えて

0

半分間違っていると、いくつかの完全に間違っていくつかのものがあります。

最も大きな間違いは、反復ごとに1つの棒をプロットしていることです。あなたのコードは、50000本のバーを1つずつ重ねて表示されます。また、あなたのコードは本当にベクトル化することができます。今

p = 0.2; 
figure; 

% create lots of random numbers 
a = rand(10000,1); 
success = fix(a*10); 

% nchoosek doesnt allow vectors , so lets loop 
for ii=1:length(success) 
    nch=nchoosek(10,success(ii)); 
end 
% compute y 
y = nch.*(p.^success).*(1-p).^(10-success); 

、あなたは、10種類のsuccess値に対するyがたくさんあります。私の推測では、同じsuccessの値に対応するすべての値を合計したいと考えています。そのために、accumarray関数がMATLABで作成されました。

ybar=accumarray(success+1,y); 
% plot ybar for the unique values of success! 
bar(unique(success),ybar); 

あなたがループ内から `bar`を呼び出している

enter image description here

+0

私はあなたが言っていることを理解していますが、P = 0.2なので、成功= 2のときに最高の結果を期待します。 – Maguzi

+0

@Maguziあなたは理論的に何をしているのか全く分かりません。私はあなたのコードを修正しました。あなたのマイグレーションはあなたの 'y'の式に誤りがあります。 –

+0

@Maguziの' y'式 - 'nchosek'は小さな' success'が大きいほど大きな値を与えます。残りの方程式は、smalleの「成功」がもたらすより大きな価値を与えるでしょう。これは、より大きい値は常に「成功」​​が小さいときになることを意味します –