如何用matlab生成服从混合高斯分布的随机数
rand(x)
可调用matlab内部函数,格式为u=randn(N)
或者u=randn(M,N),前者为N维向量,后者为M*N矩阵,
这种调用方式产生的随机序列均值为零,方差为1
例如:R
=
normrnd(Mu,
Sigma,
m,
n)
%产生服从N(Mu,
Sigma^2)
分布的m行n列的随机数组R
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内部函数,格式为u=randn(n)
或者u=randn(m,n),前者为n维向量,后者为m*n矩阵,
这种调用方式产生的随机序列均值为零,方差为1
例如:r
=
normrnd(mu,
sigma,
m,
n)
%产生服从n(mu,
sigma^2)
分布的m行n列的随机数组r
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
评论
0
0
0
加载更多
matlab 高斯(Gaussian)拟合
新建一个函数,代码如下:function [fitresult, gof] = createFit(x, y)[xData, yData] = prepareCurveData( x, y); % Set up fittype and options.ft = fittype( 'gauss1' );opts = fitoptions( 'Method', 'NonlinearLeastSquares' );opts.Display = 'Off';opts.Lower = [-Inf ...
如何用matlab生成高斯分布随机数
可调用matlab内部函数,格式为u=randn(N)或者u=randn(M,N),前者为N维向量,后者为M*N矩阵,这种调用方式产生的随机序列均值为零,方差为1 例如:R = normrnd(Mu,Sigma,m,n)产生服从N(Mu,Sigma^2)分布的m行n列的随机数组R
请问如何用Matlab实现双高斯函数拟合?
可以用matlab自带的cftool工具箱,很好用。首先在command window里敲入cftool,然后输入你想要拟合的向量和对应的x坐标,生成数据;然后通过fitting按钮,选择你生成的数据,选择任意你想要的拟合方式,就可以进行拟合了。
怎样用matlab拟合一组符合高斯分布的数据,得出完整的高斯函数表达式...
使用matlab中的拟合工具箱吧,很简单的。在command windows下输入cftool进入拟合工具箱,Data中输入你的数据,然后使用Fitting进行拟合,里面可以选择Gaussian,这样可以得出完整的高斯函数表达式。
Matlab 高斯-赛德尔迭代法怎么用呢?(关键是怎么调用它,附代码)_百度...
在这个例子中,我们使用x0=zeros(50,1)作为初始猜测向量,tol=0.001作为容许误差,maxit=1000作为最大迭代次数,具体调用为x=gseid(A,b,zeros(50,1),0.001,1000)。通过上述步骤,我们便可以利用Matlab实现高斯-赛德尔迭代法求解线性方程组。这种方法适用于大型稀疏矩阵,可以有效提高计算效率。值得...
在Matlab中,如何产生区间在[-90 90]之间,满足高斯分布的随机数?_百 ...
matlab用randn生成(-inf,inf)区间内的标准高斯分布(μ = 0,σ = 1)的随机数,而且,一般来说,这样生成的随机数不会超出区间[-3,3],因为随机数在区间[-3,3]的概率为99.8%。那么在[-90,90]之间的概率呢?我没有算,想来应该会超过0.99999 所以你直接用randn生成随机数,不必担心会超出[-...
怎么用matlab生成两个独立高斯随机变量,求大神!!!
高斯随机变量就是服从正态分布的变量。对于一般变量而言,独立性与不相关性是不等价的,即相互独立的随机变量一定不相关, 但反过来不一定成立。但是对于高斯随机变量来说,独立性与不相关性是等价的,而不相关性是通过协方差来判定的。如果协方差为0,则不相关。所以高斯随机变量的独立性只要计算下协方差...
GMM高斯混合模型的EM算法参数估计matlab仿真
GMM假设所有数据点都是由未知参数的高斯分布混合生成的。除了分类,GMM还可以用于聚类,例如将一组数据点划分为多个聚类。GMM在查找未明确定义的集群方面表现出色,并对异常值具有较好的稳健性,使其成为一种灵活且强大的聚类工具。4. GMM的组成结构 GMM由两个主要部分构成:均值向量(μ)和协方差矩阵(...
matlab如何产生服从高斯分布的随机整数
用均匀分布就可以采样给定pdf的随机数了。另外这个似乎叫高斯混合模型。。
求助Matlab进行高斯拟合
可用:lsqcurvefit or nlinfit 进行拟合。格式为:b=lsqcurvefit(fx,b,x,y);b=nlinfit(x,y,fx,b);其中圆括号内的fx为拟合函数,以你的问题,可表示为:fx=@(b,x)b(1)*exp(-((x-b(2)).\/b(3)).^2);圆括号中的b为初值,其中的b(2)最好能给出峰值对应的x值为好。等式左侧的b为...