How can I calculate 5 lions in a row?
4 ビュー (過去 30 日間)
古いコメントを表示
Question:A fair coin is tossed 10 times. What is the probability of getting exactly 5 lions in a row? ( 6 times in a row Don't count the number of taps or more.)
my code:
clear all
close all
clc
for i=0:1023
x=fliplr(de2bi(i));
coin(i+1,:)=[ zeros(1,10-length(x)) x ];
end
% =============================================
z=0;
yek=zeros(1,1024);
for i=1:1024
x=coin(i,:);
for j=1:10
if(x(:,j)==1)
z=z+1;
yek(1,i)=z;
end
end
z=0;
end
yek=yek';
y=zeros (253,1);
m=0;
for i=1:1024
if yek(i,:)>=5
y(m+1,1)=i;
m=m+1;
end
end
c=0;
q=0;
for i=y'
x=coin(i,:);
c=0;
n=0;
% ===============================
for j=1:9
if x(1,j)==1 && x(1,1+j)==1
c=c+1;
else c=0;
end
if c==4
n=4;
end
end
if n==4
q=q+1;
end
w(i,1)=c;
e(i,:)=x ;
end
my question:How can I extract 5 lions in a row through generated states?
0 件のコメント
採用された回答
Torsten
2022 年 10 月 13 日
編集済み: Torsten
2022 年 10 月 13 日
n = 1024;
S = 0:(n-1); % 2^10 possible sequences of coin tosses.
A = de2bi(S);
A = [zeros(n,1),A,zeros(n,1)];
nn = 0;
for i = 1:size(A,1)
idx = strfind(A(i,:),[0 1 1 1 1 1 0]);
if ~isempty(idx)
nn = nn + 1;
end
end
format long
fraction = nn/n
2 件のコメント
John D'Errico
2022 年 10 月 13 日
But there is no need to do a large simulation though, since the entire problem space contains only 1024 possible sequences, each of which is equally probable.
その他の回答 (2 件)
John D'Errico
2022 年 10 月 13 日
編集済み: John D'Errico
2022 年 10 月 13 日
I'm so used to coins having heads or tails though. ;-) I guess I can deal with lions.
Anyway, your code gets at the question at hand, but you can make it simpler.
S = 0:1023; % 2^10 possible sequences of coin tosses.
sequences = de2bi(S)
I dropped the semicolon so we could see the first few sequences. All you need now is to count the number of sequences where there were at least 5 tosses in a row.
Probably it is easiest here to just use a loop, despite the fact that it COULD be vectorized.
count5 = 0;
for i = 1:2^10
count5 = count5 + ~isempty(strfind(sequences(i,:),ones(1,5)));
end
count5
count5/2^10
Look carefully at the inner line of code there. It uses strfind to identify sequences that have a sub-sequence of length 5, that matches the string of interest. Since all you care about is that it finds a sub-sequence of length at least 5, this is adequate. Then the ~isempty call retiuurns true, when such a sequence was found.
2 件のコメント
John D'Errico
2022 年 10 月 13 日
編集済み: John D'Errico
2022 年 10 月 13 日
Oops. I missed the word exactly. But that is easy enough to fix. Appending a 0 at each end, and then searching for the subsequence [0 1 1 1 1 1 0] is the solution that I would use. Since I see Torsten does exactly that, he is correct.
Image Analyst
2022 年 10 月 14 日
Yet another way (Monte Carlo)
numExperiments = 100000
numTosses = 10
tosses = randi([0, 1], numExperiments, numTosses);
maxLength = zeros(numExperiments, 1);
% Find the lengths of each run of 1's
for k = 1 : numExperiments
if nnz(tosses(k, :)) == 0
continue;
else
props = regionprops(logical(tosses(k, :)), 'Area');
maxLength(k) = max([props.Area]);
end
end
fraction5 = sum(maxLength == 5) / numExperiments
fraction5 =
0.06296
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Monte Carlo Analysis についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!