北太天元學(xué)習(xí)6-補(bǔ)充例子-美女的硬幣的實(shí)驗(yàn)

%北太天元模擬美女的硬幣的游戲
%一位陌生美女主動(dòng)過(guò)來(lái)和你搭訕,并要求和你一起玩?zhèn)€游戲。
%美女提議:“讓我們各自亮出硬幣的一面,或正或反。
%如果我們都是正面,那么我給你3元,如果我們都是反面,我給你1元,
%剩下的情況你給我2元就可以了?!?/strong>
% 紳士采用的策略是以概率p出硬幣的正面,
% 美女采用的策略是以概率q出硬幣的正面
% 美女紳士一共玩了N 輪
% 第i輪的收益會(huì)存儲(chǔ)在mei(i)中
% 我們可以用 sum(mei)/N 計(jì)算收益的平均值
N = 10000;
%美女收益
mei = zeros(N,1);
% 紳士出正的概率 p
p = 0.5;
% 美女出正的概率 q
q = 3/8;
% 是否使用向量運(yùn)算(區(qū)別于通過(guò)for循環(huán)對(duì)向量的每一個(gè)分量操作)
use_vec = false;? % true 或者false
%%向量化操作,速度更快,但是需要仔細(xì)解釋
if(use_vec)
?? ?sp? = rand(N,1) < p;
?? ?mp? = rand(N,1) < q;
?? ?mei = (-3)* sum( (sp.*mp)) ... % 兩人同時(shí)出正面
?? ??? ??? ??? ?+ 2 * sum( (1-sp) .* mp )? ... %紳士出反面,美女出反面
?? ??? ??? ??? ?+ 2 * sum( sp .* (1-mp) ) ...
?? ??? ??? ??? ?+ (-1) * sum( (1-sp) .* (1-mp) );
end
%% for 循環(huán)代碼,雖然更慢,但是似乎更好懂。
if(~use_vec)
?? ?for i = 1:N
?? ??? ?shen_zheng = rand < p;
?? ??? ?mei_zheng? = rand < q;
?? ??? ?mei(i) = -3 * (? shen_zheng && mei_zheng)? ...
?? ??? ??? ??? ??? ??? ? -1 * (? ~shen_zheng && ~mei_zheng) ...
?? ??? ??? ??? ??? ??? ? +2 * ( shen_zheng && ~mei_zheng) ...
?? ??? ??? ??? ??? ??? ? +2 * ( ~shen_zheng && mei_zheng);
?? ?end
end
收益的平均值 = sum(mei)/N