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

如何正确调用生成100次掷骰子随机数的myRand函数?

解决调用myRand时的赋值不匹配错误

首先,咱们来搞清楚错误的根源:你的myRand函数已经一次性生成了100个骰子点数(返回的是100×1的向量),但在simulate函数里,你却在循环中试图把这100个值赋值给单个元素throw_dice(i),这就导致了元素数量不匹配的报错——毕竟一个位置放不下100个数据嘛!

而且你的simulate函数逻辑也绕远了:既然myRand已经帮你生成100次掷骰子的结果,根本不需要再写100次循环调用它。

修正后的simulate函数代码

function simulate()
    % 模拟掷骰子并计算偶数出现的概率点估计
    countEven = 0;
    % 直接调用myRand获取100个样本,无需循环
    throw_dice = myRand();
    
    % 统计偶数的数量:利用模运算判断是否为偶数,再求和
    even_mask = mod(throw_dice, 2) == 0;
    countEven = sum(even_mask);
    
    % 计算概率点估计量P
    P = countEven / length(throw_dice);
    fprintf('掷出偶数的概率点估计为:%.4f\n', P);
end

关键改动说明

  • 去掉多余循环:直接调用一次myRand()就能得到100个掷骰子结果,避免重复生成数据和赋值错误。
  • 高效统计偶数:用mod(throw_dice, 2) == 0生成逻辑掩码,再用sum()统计偶数的个数,比逐个判断更简洁高效。
  • 添加概率计算:按照点估计的逻辑,用偶数出现的次数除以总次数得到估计值,并打印结果。

额外优化建议(可选)

如果你希望myRand能灵活生成任意数量的样本,可以修改它为带参数的函数,比如:

function [result] = myRand(sample_size)
    % 生成指定大小的骰子点数样本
    X = [1 2 3 4 5 6];
    P = [1/6 1/6 1/6 1/6 1/6 1/6];
    % 如果没有传入参数,默认生成100个样本
    if nargin == 0
        sample_size = 100;
    end
    result = randsample(X, sample_size, true, P);
end

这样在simulate里可以根据需要调用myRand(100)或者其他数量,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:55:30