24小时热门版块排行榜    

查看: 1927  |  回复: 8

ice_huya

金虫 (小有名气)

[求助] Matlab 按概率生成随机数的一个小问题 已有2人参与

问题如下:

已知A=[6 5 4 3 2 1], 各元素值对应的概率为P=[0.0049 0.0978 0.1559 0.2220 0.2617 0.1468]
想要生成n个(比如,n=100)服从上述概率的随机数。

通常的办法是用rand函数,但我的问题是,各个值的概率加起来并不是等于1,且概率并没有单调递增或递减,,而rand随机产生的是0~1之间的数,所以想请教大家,该怎么做?

先跪谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ice_huya

金虫 (小有名气)

好像知道了 是用r=a+(b-a)*rand 吗?

还有一个问题,这样生产的随机数,是大致符合给定的概率的分布,而不是严格服从概率吧?每一次重新生成就会变

那是不是越多越准确些呢?比如生产1000个比100个更符合概率分布?
2楼2016-11-18 04:30:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mygt_hit

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
ice_huya: 金币+10, 有帮助, 非常感谢回复!有启发!! 2016-11-18 22:31:43
这属于生成离散分布随机数的问题。不知道MATLAB是否有直接生成离散分布随机数的函数,但有一个变通的办法,将[0,1]区间划分为[0.0049 0.0978 0.1559 0.2220 0.2617 0.1468] 6个区间。用MATLAB生成【0,1】上的均匀随机数,落在哪个区间,就取哪个区间对应的整数(即[6,5,4,3,2,1]其中之一)。

第二个问题:MATLAB生成的是伪随机数,不过一般使用足够了。生成的随机样本越多,对概率分布的描述越好,或者说样本分布更加接近总体分布。
知其然,知其所以然。
3楼2016-11-18 14:54:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ChuYanWu

金虫 (正式写手)

function Ans = superRand
p = [0.0049 0.0978 0.1559 0.222 0.2617 0.1468];
pz = sum( p );
Num = round( 1000000*p./pz );
Top = sum( Num );
div = cumsum(Num);
Case = randi( Top );
n = find( sign( Case - div )== -1 );
Ans = n(1);

发自小木虫Android客户端
4楼2016-11-19 02:46:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ChuYanWu

金虫 (正式写手)

clear;clc
p = zeros(1,100000);
for i = 1:100000
    p(i) = superRand;
end
sum( p==1 )/length(p)

发自小木虫Android客户端
5楼2016-11-19 02:46:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ChuYanWu

金虫 (正式写手)

引用回帖:
4楼: Originally posted by ChuYanWu at 2016-11-19 02:46:15
function Ans = superRand
p = ;
pz = sum( p );
Num = round( 1000000*p./pz );
Top = sum( Num );
div = cumsum(Num);
Case = randi( Top );
n = find( sign( Case - div )== -1 );
Ans = n(1);
...

按概率产生随机数

发自小木虫Android客户端
6楼2016-11-19 02:46:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ChuYanWu

金虫 (正式写手)

引用回帖:
5楼: Originally posted by ChuYanWu at 2016-11-19 02:46:33
clear;clc
p = zeros(1,100000);
for i = 1:100000
    p(i) = superRand;
end
sum( p==1 )/length(p)

验证

发自小木虫Android客户端
7楼2016-11-19 02:47:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ice_huya

金虫 (小有名气)

引用回帖:
7楼: Originally posted by ChuYanWu at 2016-11-19 02:47:02
验证
...

非常感谢!虽然我还没完全搞懂,我会花时间再研究一下你的方法,谢谢!!!!

再回个贴应助一下呗? 想给你发金币表示感谢呢呀
8楼2016-11-19 23:30:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小圆盾

铜虫 (小有名气)

【答案】应助回帖

A = [6 5 4 3 2 1];
P = [0.0049 0.0978 0.1559 0.2220 0.2617 0.1468];
[p, I] = sort(P, 'ascend');
m = length(I);
B = A;
for i = 1:m
    A(i) = B(I(i));
end
n = 100;
p = p./sum(p);
for i = 1:n
r = rand;
if r < p(1)
x(i) = A(1);
elseif r < p(2)
x(i) = A(2);
elseif r < p(3)
x(i) = A(3);
elseif r < p(4)
x(i) = A(4);
elseif r < p(5)
x(i) = A(5);
else
x(i) = A(6);
end
end
x
9楼2016-12-19 10:47:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ice_huya 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 关于filecode,很负责任的告诉大家 +6 爱看书的可乐 2026-08-08 7/350 2026-08-08 22:13 by a_niu
[基金申请] 关于豆爷回答的JTJC与%2F数量 +5 yang182083 2026-08-06 7/350 2026-08-08 18:29 by zhanghaozhu
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 17:19 by oEVWOejN9taj
[论文投稿] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 16:47 by oEVWOejN9taj
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 16:22 by oEVWOejN9taj
[基金申请] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 16:19 by oEVWOejN9taj
[博后之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 16:02 by oEVWOejN9taj
[基金申请] 这样的filecode谁见过 +5 布布和一二 2026-08-08 8/400 2026-08-08 14:54 by archvillain
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 HEQlVqMTIA7d 2026-08-07 5/250 2026-08-08 14:27 by oEVWOejN9taj
[基金申请] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +4 KXLV3nuBVBY7 2026-08-07 5/250 2026-08-08 14:07 by oEVWOejN9taj
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 KXLV3nuBVBY7 2026-08-07 5/250 2026-08-08 14:07 by oEVWOejN9taj
[基金申请] 关于代码变化问题,想知道的进来 +11 且听虎啸 2026-08-07 14/700 2026-08-08 12:50 by 布布和一二
[基金申请] 基金中了 +14 laoda193707 2026-08-06 14/700 2026-08-08 00:23 by 实验小白ha
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 娱乐 +6 Tide man 2026-08-03 6/300 2026-08-07 22:40 by 铁帽子农民
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] filecode与中标关系的预测 +3 布布和一二 2026-08-07 3/150 2026-08-07 15:09 by gltch
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
信息提示
请填处理意见