You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab模拟抛硬币验证概率收敛时出现空图如何解决?

问题原因&修正方案

  • 绘图逻辑错误:你每次循环只调用plot(f(n-99))绘制单个数值,Matlab默认用实线绘图,孤立的单个点不会有任何显示;同时你没有开启hold on,每次执行plot都会清空上一次的绘图结果,循环结束后只剩下最后一个不可见的单点,自然显示为空图。
  • 计数逻辑和注释矛盾:注释里写了2代表反面,但是你判断temp == 1的时候就给反面计数加1,实际统计的是正面的出现频率。
  • 代码效率低:内层逐次生成随机数的循环可以用向量化操作替代,运行速度会提升很多。

修正后代码

start_n = 100         
maxn = 1000
f = zeros(1, maxn - start_n);
n_list = start_n:maxn-1;

for idx = 1:length(n_list)
    n = n_list(idx);
    % 向量化生成n次抛硬币结果,1代表正面,2代表反面
    temp = unidrnd(2, 1, n);
    % 统计反面(值为2)的出现频率
    numoftails = sum(temp == 2);
    f(idx) = numoftails / n;
end

% 一次性绘图,设置点样式+连线
plot(n_list, f, '-b.', 'MarkerSize', 2)
xlabel('抛硬币次数n')
ylabel('反面出现频率')
yline(0.5, 'r--', '理论概率') % 画出0.5的理论参考线

运行修改后的代码就可以看到随着n增大,频率逐渐收敛到0.5的效果,符合大数定律的结论。

内容的提问来源于stack exchange,提问作者Kostas Bitos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:15:01