matlab中如何产生N个随机数,和为定值M

matlab中如何产生9个随机数,和为定值M;并且M能由输入确定。能给个程序嘛?并且要求产生随机数大小的范围相同且能给出。如果生成八个随机数的话也许这八个数在各自的范围之... matlab中如何产生9个随机数,和为定值M;并且M能由输入确定。能给个程序嘛 ?
并且要求产生随机数大小的范围相同且能给出。

如果生成八个随机数的话也许这八个数在各自的范围之内但是加起来已经超过M值了。
展开
 我来答
游戏放松小助手
高粉答主

2020-05-10 · 我是游戏小达人,乐于助人
游戏放松小助手
采纳数:32 获赞数:76866

向TA提问 私信TA
展开全部

1、首先在电脑中,找到并打开MATLAB软件,二项分布随机数的产生。

2、接着输入二项分布随机数X~b(n,p),n为发生次数,p为发生概率,如下图所示。

3、然后输入泊松分布,参数为p,如下图所示。

4、接着输入指数分布,参数为λ,如下图所示。

5、最后正态分布,X~N(μ,δ^2),如下图所示,就完成了。

learneroner
高粉答主

推荐于2017-09-13 · 关注我不会让你失望
知道大有可为答主
回答量:1.1万
采纳率:91%
帮助的人:6444万
展开全部

实现方法:首先使用rand()函数生成N个随机数,假设此时N个随机数的和是S,那么将每个随机数变为原来的M/S倍,这样就实现N个随机数的和是定值M的效果了。关键代码如下:

A = rand(1,N); S = sum(A); B = A*M/S;

下面进行实例演示和详细讲解:产生9个和为定值10的随机数。

1、打开matlab软件,在命令窗口输入:A = rand(1,9),表示产生9个0~1之间的随机数,输出如下:

2、继续输入:S = sum(A);  B = A*10/S ,表示将每个随机数变为到原来的10/sum(A)倍,此时的数组B即为所求。输出结果如下:

3、为了验证一下得到的数组B的和是否为定值10,在命令窗口输入:sum(B),结果如下:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
frmluck
2010-09-18 · TA获得超过196个赞
知道小有建树答主
回答量:76
采纳率:0%
帮助的人:108万
展开全部
function [y_rand,sum_rand]=rand_baidu(M)
coe=M/sum(randperm(9));
y_rand=randperm(9)*coe;
rand_min=min(y_rand)
rand_max=max(y_rand)
sum_rand=sum(y_rand);
说明:randperm产生1:9 9个数的随机排列,根据你要求的和数M可以确定映射系数coe,实际上最后产生的随机数的范围也可以预测,取决于你的M。
本程序的缺点是,M确定以后9个数是确定的,但排列顺序每次不一样而已,和恒为M。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
歇洛克90
2010-09-18 · 超过16用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:43.2万
展开全部
话说,如果这9个数之和为给定值,那就起码满足了一条方程,那就不是9个“随机数”了。如果每个随机数的大小范围都相同的话,那就不一定能满足你要求的M值了。你的问题需要再表述清楚一点。比如说,用户给定M和随机数范围,那么函数要判断是否存在这样的“随机数”列。最简单的程序是,任意生成8个随机数,用M减去这8个之和。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
书宬
2010-09-18 · TA获得超过7849个赞
知道大有可为答主
回答量:2125
采纳率:75%
帮助的人:3298万
展开全部
M=300;
a=randint(1,9,[1 5]) % [1 10]为取值范围
M*a/(sum(a))
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式