Soru sorMontyHall problemi
derebeyi tarafından 5 yıl önce soruldu

Herkese iyi günler dilerim
Yapmak istediğim deneyin açıklama videosunu aşağıya ekledim : 
https://www.youtube.com/watch?v=vZzFjyjJUt8
Bu deneyi oluştururken kullandığım kodları sorunun en altına ekliyorum.
Benim kodumda her tekrarda kazanma olasılğını hesaplamak yerine bana çıktı olarak genel olasılığı veriyor. Bunun yerine 100000 tekrar yaptırmak ve her tekrarda bulduğum olasılıkları bir vektöre aktarmak istiyorum. Ve bunun yanında olasılık tekrar grafiğini çizmek istiyorum.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function montyHall(kapiSayisi,tekrarSayisi)

assert(kapiSayisi > 2);

function num = randInt(n)
num = floor( n*rand()+1 );
end

%The first column will tallie wins, the second losses
kapiyiDegis = [0 0];
ayniKapi = [0 0];

for i = (1:tekrarSayisi)

secilebilirKapi = (1:kapiSayisi); %Preallocate the available doors
arabaKapi = randInt(kapiSayisi); %Define the winning door
ilkSecim = randInt(kapiSayisi); %The player picks his initial choice

secilebilirKapi(ilkSecim) = []; %Remove the players choice from the available doors

%Pick the door to open from the available doors
acKapi = secilebilirKapi(randperm(numel(secilebilirKapi))); %Sort the available doors randomly
acKapi(acKapi == arabaKapi) = []; %Make sure Monty doesn't open the winning door
acKapi = acKapi(randInt(numel(acKapi))); %Choose a random door to open

secilebilirKapi(secilebilirKapi==acKapi) = []; %Remove the open door from the available doors
secilebilirKapi(end+1) = ilkSecim; %Put the player's original choice back into the pool of available doors
secilebilirKapi = sort(secilebilirKapi);

yeniSecim = secilebilirKapi(randInt(numel(secilebilirKapi))); %Pick one of the available doors

if yeniSecim == ilkSecim
switch yeniSecim == arabaKapi
case true
ayniKapi(1) = ayniKapi(1) + 1;
case false
ayniKapi(2) = ayniKapi(2) + 1;
otherwise
error 'ERROR'
end
else
switch yeniSecim == arabaKapi
case true
kapiyiDegis(1) = kapiyiDegis(1) + 1;
case false
kapiyiDegis(2) = kapiyiDegis(2) + 1;
otherwise
error 'ERROR'
end
end
end

disp(sprintf('İlk seçim değiştirilirse kazanma yüzdedi: %f%%\nİlk seçimde kalınırsa kazanma yüzdesi: %f%%\n', [kapiyiDegis(1)/sum(kapiyiDegis),ayniKapi(1)/sum(ayniKapi)] * 100));

end
 
 

4 Cevap
Caglar Yönetici tarafından 5 yıl önce cevaplandı

Sorunuzu doğru anladıysam buldugunuz sonuclar zaten kapiyiDegis ve ayniKapi'da kaydediliyor. Fonksiyondan bunları da çıktı verebilirsiniz. Çıktı'dan kastettiğim, değişken olarak. Yani disp ile yazı değil. tekrarSayisi'ne 100000 vermeniz de zaten 100000 tekrar yapmasını sağlayacak.
function [kapiyiDegis, ayniKapi] = montyHall(kapiSayisi,tekrarSayisi)

derebeyi tarafından 5 yıl önce cevaplandı

Hocam geç gördüm kusuruma bakmayın.
c) Simülasyonunuzu 1 kereden başlayarak 100000 kereye kadar tekrarlayarak ilk seçtiğiniz kutudan ödülü kazanma olasılığını ve seçiminizi değiştirdiğinizde ödülü kazanma olasılığını her tekrar sayısı için hesaplayınız.
d) Hesapladığınız tüm değerleri bir vektöre atınız. Vektörün 100000 tane farklı olasılık değerinden oluşacağını unutmayınız 
Benim yapmamı istenen iki madde bunlar fakat sizin dediğiniz gibi ekrana bastıramıyorum kapiyiDegis ve ayniKapi degerlerini. Bunu nasıl yapacağım hakkında bilgi verir misiniz ? 

Caglar Yönetici tarafından 5 yıl önce cevaplandı

Yani, ilk seçtiğimiz kapidan ödülü kazanma olasılığı her zaman 1 / kapi_sayisi olacaktır. Kapı değiştiğinde kazanma olasılığı ise 1 / (kapi_sayisi – 1 ) olacaktır. Sanırım c'de, sizin kodun yaptığı şeyi tarif etmeye çalışmış zaten.
Ama siz d'de istendiği gib, her değeri hafızada tutmuyorsunuz. Sadece toplamları hafızada tutuyorsunuz. Bir de siz, rastgele bir kapı seçtirip kazandı mı kaybetti mi diye bakıyorsunuz. Oysa ödev sadece olasılık hesabı istemiş gibi görünüyor. 
d şıkkını anlamakta zorlandım. c şıkkında her tekrar için olasılık hesabı istemiş, o zaman her tekrar için iki sonuç bulmuş oluruz. ama sonra "100000 değer içeren bir vektör" olacak demiş. yani her tekrardan sadece tek bir sonuç çıkacak? ayrıca zaten her tekrarda olasılık değişmez, cunku kazanma olasılıgı sadece kapı sayısına baglı.
belki de aslında sızın yaptıgınız gıbı, gercekten rastgele bir kapı sectırmenızı ve onun sonuclarını kaydetmenızı ıstedi. 
ozetle ben aslında monty hall'ı da onceden bilmeme ragmen soruyu anlayamadıgım ıcın su an daha fazla ilerleyemiyorum. 

Caglar Yönetici tarafından 5 yıl önce cevaplandı

c şıkkında her tekrar için iki olasılık hesabı istemiş*