| 查看: 1660 | 回复: 8 | |||||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||||
[求助]
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之间的数,所以想请教大家,该怎么做? 先跪谢! |
» 猜你喜欢
情人节自我反思:在爱情中有过遗憾吗?
已经有6人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有3人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有3人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有3人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有3人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有3人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有4人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有4人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有4人回复
售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急
已经有4人回复
mygt_hit
专家顾问 (职业作家)
-

专家经验: +362 - 应助: 438 (硕士)
- 贵宾: 0.019
- 金币: 19571.1
- 散金: 5130
- 红花: 135
- 沙发: 3
- 帖子: 4938
- 在线: 990.5小时
- 虫号: 1489764
- 注册: 2011-11-13
- 性别: GG
- 专业: 结构工程
- 管辖: 土木建筑
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
ice_huya: 金币+10, ★有帮助, 非常感谢回复!有启发!! 2016-11-18 22:31:43
感谢参与,应助指数 +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
2楼2016-11-18 04:30:24
ChuYanWu
金虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 1235.8
- 散金: 113
- 帖子: 453
- 在线: 45.2小时
- 虫号: 4004466
- 注册: 2015-08-03
- 性别: GG
- 专业: 光谱技术
|
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
ChuYanWu
金虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 1235.8
- 散金: 113
- 帖子: 453
- 在线: 45.2小时
- 虫号: 4004466
- 注册: 2015-08-03
- 性别: GG
- 专业: 光谱技术
|
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













回复此楼
10