[转] 如何用matlab生成服从混合高斯分布的随机数?
来源:互联网 发布:js获取tr的第一个td 编辑:程序博客网 时间:2024/06/08 10:05
如何用matlab生成服从混合高斯分布的随机数?
M=10; %产生M行N列的随机数矩阵
N=8;
miu1=1;%第一个分布的参数
sigma1=2;%第一个分布的参数
miu2=6;%第二个分布的参数
sigma2=1;%第二个分布的参数
R = 0.2*normrnd(miu1,sigma1,M,N)+0.8*normrnd(miu2,sigma2,M,N);
单点的概率全是0,那你取出来的随机数算什么?
若干个随机数要满足统计分布,是要按区间统计的
另外我不知道你要做什么就是了。
你如果想按一定的概率密度来产生随机数,你最好用反函数法之类的来弄。
比如产生一个x.^2分布的随机数,不过这些要归一化。
============================================
首先,我知道我的是错的了。如下图就可知
M=1000; %产生M行N列的随机数矩阵
N=1;
miu1=1;%第一个分布的参数
sigma1=2;%第一个分布的参数
miu2=6;%第二个分布的参数
sigma2=1;%第二个分布的参数
R = 0.2*normrnd(miu1,sigma1,M,N)+0.8*normrnd(miu2,sigma2,M,N);
x=-5:0.001:15;
y1=normpdf(x,miu1,sigma1);
y2=normpdf(x,miu2,sigma2);
subplot(2,2,1);
plot(x,y1);
subplot(2,2,2);
plot(x,y2);
subplot(2,2,3);
y3=0.2*y1+0.8*y2;
plot(x,y3);
subplot(2,2,4)
dx=0.5;
xx=-5:dx:15;
yy=hist(R,xx);
yy=yy/M/dx;
plot(x,y3);
hold on
bar(xx,yy)
=======================================
正确做法,我还没弄出来,继续中。。。。
============================================
_____________________新的尝试
下面的结果我觉得可能可以接受。
思路:基于反变换法
Matlab下面有
p=normpdf(x,miu,sigma)是求出x处的概率密度。
p=normcdf(x,miu,sigma)是求出X<x的累积概率密度(就是从负无穷大到x处的概率密度的积分)
我给定一个区间,这个区间外的概率我认为是0(这一点不够严谨,理论上应当是从负无穷到正无穷)
我这里取的是-10:15,其间我取了25000个点,求出这些点的累积概率值(两个的加权和y3),记这个为F(x),根据反变换法,
F(x)=u,其中u是一个0到1的均匀随机数。只要求出它的解x0,那么x0就满足所给定的概率密度分布。这里我用的是插值。用
(y3,x)来插值出u所在的位置
声明,这里有一些地方不够严谨,严谨应当用解析的方法来做反变换。
%%%%%下面是程序
M=1000; %产生M行N列的随机数矩阵
N=1;
miu1=1;%第一个分布的参数
sigma1=2;%第一个分布的参数
miu2=6;%第二个分布的参数
sigma2=1;%第二个分布的参数
x=-10:0.001:15;
y1=normpdf(x,miu1,sigma1);
y2=normpdf(x,miu2,sigma2);
y3=0.2*y1+0.8*y2;
y1=normcdf(x,miu1,sigma1);
y2=normcdf(x,miu2,sigma2);
y=0.2*y1+0.8*y2;
u=rand(N,M);
R=interp1(y,x,u,'linear');
dx=0.5;
xx=-10:dx:15;
yy=hist(R,xx);
yy=yy/M/dx;
bar(xx,yy)
hold on;
plot(x,y3,'r*')
- [转] 如何用matlab生成服从混合高斯分布的随机数?
- matlab生成二维服从高斯分布的数据
- matlab生成二维服从高斯分布的数据
- matlab生成两类服从高斯分布的数据 mvnrnd
- 生成两类服从高斯分布的数据
- 【MATLAB】高斯分布 均匀分布 以及其他分布 的随机数生成函数
- 生成高斯分布随机数的程序
- 生成服从正态分布的随机数
- 如何用R语言抽取出服从一般分布的样本
- 服从广义高斯分布样本的参数估计
- 使用rand()产生服从高斯/正态分布的随机数
- 如何用matlab以一定概率生成随机数
- C/C++生成高斯分布随机数
- 生成随机数(高斯分布)
- 生成服从二维正态分布的随机数
- 如何用C#生成不重复的随机数
- C++高斯分布随机数的产生
- 怎样产生标准分布或高斯分布的随机数?
- smarty 遍历数组之foreach,section实例
- ZOJ
- Qt静态库制作
- hdu1237(表达式求值)
- ubuntu rc.local 无效 解决方案(转)
- [转] 如何用matlab生成服从混合高斯分布的随机数?
- 截取字符串中的数字转为int
- 红黑树详细介绍
- 05.12 架构之ssh-key章节
- 简单的bat批处理脚本辅助卸载更新android app
- shell脚本截取字符串
- 链表带环问题1
- Python基础(二、代码调试方式dir,help,print函数,pycharm破解教程)
- 设计一个类不能被继承;只能在堆上创建对象;只能在栈上创建对象