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

如何在Octave中以直方图展示矩阵中整数的出现频率?

解决Octave中负二项分布直方图整数对齐问题

你的核心问题是Octave默认的hist()函数会自动划分不等宽的bins,无法匹配整数型的抛掷次数数据。要让直方图每个整数对应宽度为1的bin且精准对齐,只需手动指定bins的范围,让每个bin恰好包含一个整数的取值区间。

修改步骤:

  1. 计算数据的最小和最大值,生成覆盖所有整数的bins数组,每个bin的区间为[k-0.5, k+0.5)(k为整数),确保每个整数被单独统计。
  2. 将hist(B)替换为指定bins的调用。
  3. 修正ylabel表述(原"Percentage of Sucess"不符合你要展示的次数统计需求)。

修改后的完整代码:

A = zeros(1,100);
headsCounter = 0;
success = 4;
tries = 0;
ii = 2;
largestTries = 0;

while(ii <= length(A))
  while (headsCounter < success)
    X = rand;
    if(X > 0.5)
      headsCounter = headsCounter + 1;
    end
    tries = tries + 1;
  end
  A(ii) = tries;
  if(A(ii-1) < tries)
    largestTries = tries;
  end

  headsCounter = 0;
  tries = 0;
  ii = ii+1;
end

B = A(2:length(A));
% 手动生成对齐整数的bins
bins = min(B)-0.5 : 1 : max(B)+0.5;
hist(B, bins);

xlabel("Number of Tosses");
ylabel("Number of Experiments"); % 改为次数统计,匹配你的示例需求
title("Negative Binomial Distribution (4 Heads Required)");

额外优化建议:

你提到for循环报错,Octave的for循环标准语法为for ii=1:length(A),可以替换while循环让代码更简洁:

A = zeros(1,100);
success = 4;
for ii=1:length(A)
  headsCounter = 0;
  tries = 0;
  while (headsCounter < success)
    X = rand;
    if(X > 0.5)
      headsCounter = headsCounter + 1;
    end
    tries = tries + 1;
  end
  A(ii) = tries;
end
B = A;

内容的提问来源于stack exchange,提问作者Nicholas Nelson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:26:01