matlab随机模拟,各种概率论中的离,连续的函数 典型分布函数 以及利用随机模拟的方法进行积分运算,随机打乱数组,蒙特卡洛方法

1.

(1)随机数的产生

A=rand(m,n);                      %生成m´n随机数矩阵,每个元素的选

                                 取服从[0,1]上的平均分布

B=randn(m,n);                  %生成m´n随机数矩阵,每个元素的选

                                 取服从标准正态分布

 

C=randi(nmax,m,n);           %生成m´n随机数矩阵,每个元素是1和

                                  nmax之间的随机选取的正整数

D=randi([a,b],m,n);           %m´n随机数矩阵,每个元素是[a,b]

                                上的随机选取的正整数

  1. 一般的随机数产生函数 random

函数使用方法

           y=random(‘name’,A,m,n)          %单参数分布的随机数数组产生

           y=random(‘name’,A,B,m,n)      %双参数分布的随机数数组产生

常用的几种分布的随机数产生

 

     分        布

name

参数A

参数B

正态分布

Norm 或normal

mu

sdeta

泊松分布

Poiss或poisson

llanbuda

 

连续均匀分布

unif

a

b

离散均匀分布

unid

N

 

t分布

t

n(自由度个数)

 

c2分布

chi2

n(自由度个数)

 

F分布

F

n1(自由度个数)

 

n2(分母自由度个数)

 

 

 

 

 

 

  1. 验证随机性

s=zeros(1,10);

for k=1:100000

    s=s+rand(1,10);

end

s/100000

结果:ans =

 

    0.5002    0.5003    0.4993    0.4988       0.4999    0.4990    0.5005    0.4991       0.4999    0.4995

  1. 随机模拟求解问题:

(1)例4:求圆的面积

x=rand(10000,10000);

y=rand(10000,10000);

z=x.^2+y.^2;

m=find(z<=1);

s=4*length(m)/(10000*10000)*1   (后面这个1是矩形面积)

10000*10000个x和y然后符合条件的数目除以总数目

都是[0,1]上的点所以要乘4

这是半径为1的圆的面积

半径为3的此时就要用到

D=randi([a,b],m,n);

此时要乘的矩形面积为9

 x=random('unif',0,3,10000,10000);

>> y=random('unif',0,3,10000,10000);

>> n=find(x.^2+y.^2<=9);

>> s=4*length(n)/(10000*10000)*9

 

(2)例5:利用蒙特卡洛方法计算积分   

考虑二重积分

图片放不出来臆测吧

 

设   WÍ[a,b]´[c,d],0£f(x,y)£M

在区域[a,b]´[c,d]´[0,M]上选取N个随机数,如果落在区域

                            0=<z<=f(x,y)      (x,y)ÎW

中的点数为S,则

图片放不出来臆测吧

二重积分几何意义f(x,y)是一个高度信息只要我的随机点的代入高度函数后小于等于标准就在他之内就可以算体积占比再乘以总体积即可求出大致积分值,一开始就是算一个比例一般就选[0,1]

 

x=rand(1,1000000);

y=rand(1,1000000);

z=rand(1,1000000);

idx1=find(x.^2+y.^2<1);

idx2=find(z(idx1)<=sqrt(1- …

x(idx1).^2-y(idx1).^2));

V=4*length(idx2)/length(idx1)*pi/4;

disp(V);

% avoid cplx number calculation.

4.向量的随机打乱

S=randperm(n)     %把1至n这n个数随机打乱次序得到的序列   

练习:将向量

x=[1 3 6 4 7 10  2 4 3 6 40 12 2 2 7 3 7 12 13 15 8 7 6 12 2 2 4 6 3 1 ]

随机打乱

x=[1 2 3;4 5 6 ];

%i的末端为行数

for i=1:2

a=randperm(length(x));

x(i,:)=x(i,a);

disp(x);

end

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值