Matlab生成满足任意分布数据实例演示 您所在的位置:网站首页 matlab怎么求期望 Matlab生成满足任意分布数据实例演示

Matlab生成满足任意分布数据实例演示

#Matlab生成满足任意分布数据实例演示| 来源: 网络整理| 查看: 265

Matlab生成任意分布数据实例演示

在实际是工作中经常会遇到类似概率分布的问题。概率问题经常会涉及到随机数分布问题,过冷水就遇到了如何生成满足如下分布数据的问题。

image.png

数据范围在2~20之间,但是生成的数据要满足如图所示的概率密度泛函,在一般问题中我们经常遇到的生成平均数据使用rand()函数就可以生成0~1区间的随机数据然后对数据进行处理就可以得到满足任意区间的数据,生成满足正态分布的随机也有现成函数randn() 函数可调用,如图所示的问题 how do?,本期过冷水就详细的给大家讲一讲如何Matlab生成满足任意概率密度的分布函。

均匀分布

matlab的rand指令可以帮助我们生成0-1均匀分布的数据,这样,如果我们想要[a,b]的分布数据,只需要a (b-a)*rand就可以。需要注意的是rand函数有其内置的平均值和标准差

A=rand(1000000,1);muA=mean(A)sigmaA = std(A)muA = 0.5000sigmaA =0.2887

如果想要生成指定均值和方差的随机数该如何实现?其实在已知均匀分布的期望和方差条件下是可以反求均匀分布的区间的。均匀分布的期望和方差和随机数区间存在以下关系

image.png

如果想生成均值E=0;S=1的随机数,可以利用上述公式反推出image.png;

B=2*sqrt(3)*rand(10000000,1)-sqrt(3);muB=mean(B)sigmaB = std(B)muB =3.8898e-04sigmaB =1.0000

均值和方差满足预期,掌握了均匀分数数据生成后,可以做生成在约束条件的下均匀分布,在二维空间绘制半径为r的圆内均匀分布数据点

angle=rand(1,1000)*2*pi; %(0,2*pi)之间均匀分布数据点r=sqrt(rand(1,1000));%(0,1)之间r^2均匀分布数据点x=r.*cos(angle);y=r.*sin(angle);figure1 = figure;colormap(gray);axes1 = axes('Parent',figure1,'units','normalized','position',[0 0 1 1]);uistack(axes1,'down')image(blackboard,'Parent',axes1,'CDataMapping','scaled')set(axes1,'handlevisibility','off','visible','off');axes2 = axes('Parent',figure1);hold(axes2,'on');plot(x,y,'MarkerFaceColor',[1 0 0],'Marker','o','LineStyle','none','Color',[1 0 0]);box(axes2,'on');axis(axes2,'equal');axis(axes2,'off');hold(axes2,'off');set(axes2,'FontName','Times New Roman','FontSize',12,'FontWeight','bold','LineWidth',3,'Color','none');set(axes2,'Color','none','LineWidth',6,'TickLength',[0.01 0.005],'XColor',[1 0 1],'YColor',[1 0 1],'ZColor',[1 0 1]);

image.png

同理可绘制半径为r的三维球内均匀分布数据点

angle1=rand(1,1000)*2*pi;angle2=acos(rand(1,1000)*2-1);r=power(rand(1,1000),1/3);x=r.*cos(angle1).*sin(angle2);y=r.*sin(angle1).*sin(angle2);z=r.*cos(angle2);figure1 = figure;colormap(gray);axes1 = axes('Parent',figure1,'units','normalized','position',[0 0 1 1]);uistack(axes1,'down')image(blackboard,'Parent',axes1,'CDataMapping','scaled')set(axes1,'handlevisibility','off','visible','off');axes2 = axes('Parent',figure1);hold(axes2,'on');plot3(x,y,z,'MarkerFaceColor',[1 0 0],'Marker','o','LineStyle','none','Color',[1 0 0]);view( axes2,[15 30])box(axes2,'on');axis(axes2,'square');hold(axes2,'off');box(axes2,'on')set(axes2,'Color','none','LineWidth',6,'TickLength',[0.01 0.005],'XColor',[1 0 1],'YColor',[1 0 1],'ZColor',[1 0 1]);

image.png

Interesting! 在指定范围生成数据是非常实用的技能,其实如果能够构造出合适的约束条件,图形将会更加多样化。

正态分布

上述案例是给出了约束条件下的均匀分布,那么如何给出在约束条件下的非均匀分布?正态分布是非均匀分布中具有代表性的案例,正态分布实际可以直接调用randn()函数,为了比较清楚看正态分布生成随机数的特点,以二维圆为案例来看一下正态分布数据。

angle=rand(1,1000)*2*pi; %(0,2*pi)之间均匀分布数据点r=sqrt(normrnd(0.3,0.13,[1,1000]));%(0,1)之间r^2均匀分布数据点x=r.*cos(angle);y=r.*sin(angle);figure1 = figure;axes1 = axes('Parent',figure1);hold(axes1,'on');plot(x,y,'MarkerFaceColor',[1 0 0],'Marker','o','LineStyle','none','Color',[1 0 0]);box(axes1,'on');axis(axes1,'square');hold(axes1,'off');set(axes1,'FontName','Times New Roman','FontSize',12,'FontWeight','bold','LineWidth',3);

image.png

从图像上我们生成了一圆层厚度不一致的随机数,已经实现了满足约束条件下的非随机分布只要在往前轴一步看如何生成特地的非随机分布

任意随机分布数据生成

可以采用Monte Carlo 方法采用随机约束的方法来生成随机数。

1:选定生成数据范围[a,b],并在此范围生成服从均匀分布数据xi;

2:生成服从均匀分布的数据y.y的取值范围为概率密度分布范围;

3:若y < f ( x )保留x,否则舍去。保留的x即为生成的数据,否则舍去。这一步就是对利用Y值对x进行甄选

实践代码

fun=@(x)(0.2089.*exp(-((x-9.985)./0.7535).^2)   0.*exp(-((x 1.593)./0.0846).^2) 0.1223.*exp(-((x-3.874)./0.585).^2) -0.1669.*exp(-((x 0.1669)./0.6609).^2)-0.02173.*exp(-((x-9.238)./0.5248).^2) -0.09805.*exp(-((x-8.219)./0.9768).^2) 0.1764.*exp(-((x-7.735)./1.995).^2)   0.07335.*exp(-((x-11.83)./2.733).^2))xmin=2.6;xmax=20;num=2000;  %数据数量n=1;data1=zeros(1,num);while n


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有