有没有更快的方法来计算期望值?
Is there a faster way to calculate the expected value?
所以对于我的概率 class,我的教授就作业问题提出了以下问题:
一枚公平的硬币被抛掷 10,000 次。让 X 对应于正面数量和反面数量之间的差异。使用 MATLAB,计算 X 的期望值。
这是我为了回答问题而写的:
N = 10000;
i =0;
r=1/2;
Q=nchoosek(N,(X+N)/2);
X=(1,N);
for i=-N:N
P=Q*r.^(X+N)/2*(1-r)^(N-(X+N)/2) % probability_mass_function
E=sum(abs(X).*P); % expected value
end
但是,有没有更快更快捷的方法来计算这个期望值呢?任何帮助将不胜感激。谢谢
您可以将所有测试结果放在一行中的单个矩阵中,然后计算每个测试的 X,然后对 X 取平均值:
clear
TAIL=0; HEAD=1;
NumTests=121;
NumRollsPerTest=10*1000;
AllTestsRolls= rand(NumTests,NumRollsPerTest)>0.5 ; %head when rand>0.5
XperTest=sum(AllTestsRolls==HEAD,2)-sum(AllTestsRolls==TAIL,2);%every row is test so calc per test
ExpectedX=sum(XperTest)/length(XperTest)
所以对于我的概率 class,我的教授就作业问题提出了以下问题:
一枚公平的硬币被抛掷 10,000 次。让 X 对应于正面数量和反面数量之间的差异。使用 MATLAB,计算 X 的期望值。
这是我为了回答问题而写的:
N = 10000;
i =0;
r=1/2;
Q=nchoosek(N,(X+N)/2);
X=(1,N);
for i=-N:N
P=Q*r.^(X+N)/2*(1-r)^(N-(X+N)/2) % probability_mass_function
E=sum(abs(X).*P); % expected value
end
但是,有没有更快更快捷的方法来计算这个期望值呢?任何帮助将不胜感激。谢谢
您可以将所有测试结果放在一行中的单个矩阵中,然后计算每个测试的 X,然后对 X 取平均值:
clear
TAIL=0; HEAD=1;
NumTests=121;
NumRollsPerTest=10*1000;
AllTestsRolls= rand(NumTests,NumRollsPerTest)>0.5 ; %head when rand>0.5
XperTest=sum(AllTestsRolls==HEAD,2)-sum(AllTestsRolls==TAIL,2);%every row is test so calc per test
ExpectedX=sum(XperTest)/length(XperTest)