问题:

如何用matlab生成N个随机非负整数,使其和为M?


代码:

只需一行:

f = @(M,N)diff([0,sort(randperm(M+N-1,N-1)),M+N])-1;

解释:

不妨考虑 “N个非负整数(和为定值 M) + 离散均匀分布” 的具体情形,这一问题 “求解M个相同球放入N个不同盒子的放法” 的问题有很大的关联,解决该问题有个著名的办法 —— 隔板法,搞懂了这种内在关联,就不难理解下面的代码,它实现的是 “生成N个和为定值M的均匀分布非负整数”

验证:

M = 100; N = 20;
sum(f(M,N)) == M
在这里插入图片描述


原文链接: matlab如何随机生成N(已知)个整数且他们之和为一个定值M

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐