我正在尝试编写一个函数来生成5 个伯努利试验的m个随机模拟。我创建了一个直方图,显示了m次模拟中成功次数的分布。
然后,我还需要绘制一条线,显示围绕理论平均成功次数的理论/归一化分布。
这是我现在的功能:
function x = generate_binomial_bernoulli(n,p,m)
% generate Bi(n, p) outcomes m times
emperical = zeros(1,m); % allocate array for m simulations
for i = 1:m % iterate over m simulations
successes = 0; % count the number of successful trials per simualtion (0-5)
for j = 1:n % iterate through the n trials
u = rand; % generate random nuumber from 0-1
if (u <= p) % if random number is <= p
successes++; % count it as a success
endif
end
emperical(i) = successes; % store the number of successful trials in this simulation
end
close all; % close any existing graphs
x_values = [0:n]; % array of x-axis values
hist(emperical, x_values, "facecolor", "r"); % plot empirical data
xlim([-0.5 (n + 0.5)]); % set x-axis to allow for histogram bar widths
hold on; % hold current graph
mean = n * p; % theoretical mean
norm = normpdf(x_values, mean, 1); % normalised y values
plot(x_values, norm, "color", "b"); % plot theoretical distribution
legend('Emprical', 'Theoretical');
end
当函数被调用为
generate_binomial_bernoulli(5, 0.2, 100)
我希望看到一个红色直方图显示 100 次模拟的结果(经验结果),然后是一个蓝线图,围绕 1 次成功的平均值进行归一化(理论结果)。
这是生成的图表:
经验结果正确显示,但理论图仅延伸到 y 轴上非常低的值的高度。
我的功能哪里出错了?