matlab面试问题,一道面试题的matlab模拟代码

一个国家所有的家庭都喜欢男孩,如果生了女孩孩,就继续生,直到有一个男孩了为止,问最后这个国家男女比例会出现什么变化?

可以用matlab模拟验证,代码如下:

1.由于要进行抽样决定生男生女,所以首先需要定义一个抽样函数

——————————————————————————————————

function sampNum = samp(number, prob, n)

% 用一定的概率抽取一系列序号(有放回抽样)

% sampNum = samp(number, prob, n)

% number为一列序号,prob为相应的抽取概率(和不需要归一化),n为抽取序列的长度

% 如果prob=[],则为等概率抽样

% sampNum为抽取的序号数组

% 检查参数

number = number(:);

prob = prob(:);

numLen = length(number);

if isempty(prob)

prob =

ones(numLen, 1);

end

if numLen ~= length(prob)

error('the

size of prob is wrong')

end

% 抽取

sampNum = zeros(1, n);

randomDot = unifrnd(0, sum(prob), 1, n);

dividPoint = cumsum(prob);

for j = 1 : n

d =

randomDot(j) - dividPoint;

m = find(d

> 0);

sampNum(j) =

number( length(m) + 1 );

end

end

————————————————————————————————————

这个抽样函数的目的是进行随机抽样,可以保存在当前路径中。

2.然后在命令窗口中输入:

——————————————————————————————————————

numFamily =

1000; %设定模拟家庭的数量

bNum = zeros(1,

numFamily); %预先定义数组,保存每个家庭的男孩女孩数量

gNum = zeros(1, numFamily);

for i = 1 :

numFamily %开始模拟

boy = 0;

girl = 0;

while boy == 0

sampNum = samp([1 2], [], 1); %等概率抽样,抽到1生男孩,抽到2生女孩

if sampNum == 1

boy = boy + 1;

else

girl = girl + 1;

end

end

bNum(i) = boy;

gNum(i) = girl;

end

ratio = sum(bNum)/sum(gNum)

——————————————————————————————————————————

我模拟了1000个家庭,结果男女比例为0.99,意外么?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值