楼主: icebird_rong
8152 9

关于正态随机数及布朗运动的一些问题 [推广有奖]

  • 1关注
  • 0粉丝

硕士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
18 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
954 点
帖子
163
精华
0
在线时间
71 小时
注册时间
2006-1-5
最后登录
2017-6-6

楼主
icebird_rong 发表于 2011-2-9 00:23:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在我需要自己编一个能生成正态随机数的函数。
目前也是对MATLAB初学阶段,一些问题困扰着我,请高手指点一下。
就我目前的理解,根据蒙特卡罗,随机数的生成应该是采取几个步骤:
1、找到相应的密度函数
2、根据密度函数找到相应的原函数
3、求出原函数的反函数,再用matlab描述出,即得所需随机数。

但就正态分布而言,其密度是已知的,但是其原函数及其反函数是很难求出的,那么如何编写生成正态随机数的函数呢?

再者,金融里经常假设股票是服从几何布朗运动,其价格服从对数正态分布,
为维纳过程(即标准布朗运动),那么可以认定它是数值范围在[0,1]内的正态分布吗?或者说,用matlab实现时,它能用标准的正态分布随机数表示吗?

希望有人能指点一下,先谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:布朗运动 随机数 matlab实现 MATLAB 对数正态分布 布朗 运动 随机数

沙发
gnipgnop 发表于 2011-2-9 01:43:36
(1) 正态随机数
If I were you I would try like below:
  • Use rand() to generate uniformly distributed pseudorandom numbers in  [0,1]
  • Then use norminv() to get the normal pseudorandom numbers - Is this what you need?
(2) 布朗运动
为什么不可以用标准的正态分布随机数表示呢?可以的,但它的数值范围不是在[0,1]而是任意实数,对吧。
已有 1 人评分学术水平 热心指数 收起 理由
icebird_rong + 1 + 1 非常感谢

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

藤椅
liuxin9023 发表于 2011-2-9 09:09:33
关键在于所有的概率分布取值在0-1之间,所以只要找到0-1之间的均匀分布 其他的就都很号计算了

板凳
icebird_rong 发表于 2011-2-9 17:32:53
如果布朗运动用标准的正态分布,就可以将其均值与方差固定,不用求解。如果不能用正态分布表示,我目前还没找到相关的文献来说明,在金融价格中的这种布朗运动的均值方差如何决定,一般是按嗓音来处理。

对于正态随机数的生成,我不太理解。
gnipgnop 的意思是,先生成均匀分布的随机数,再norminv() 函数生成正态随机数吗?

我现在的思路是,先生成halton这样的低差异随机数,再由halton序列生成正态随机数。halton序列我已经得到了。但是正态随机数的生成存在一定的问题。

我对norminv() 函数不态熟悉,大概查了一下它的用法:
x=NORMINV(probability,mean,standard_dev)  其中:
Probability   正态分布的概率值。
Mean   分布的算术平均值。
Standard_dev   分布的标准偏差。
x返回指定平均值和标准偏差的正态累积分布函数的反函数。
按照随机数生成的原理,结果应该是正态分布数  
但是在这里面,均值=0,方差=1,但其概率值该如何得到?特别是如果用这个函数那么我的halton序列就没有用了,算法优势也就得不到体现了。

能否给我一个生成正态分布随机数的源程序?

报纸
icebird_rong 发表于 2011-2-10 00:03:14
刚看到一些关于正态随机数的生成,说是用中心极限定理实现。具体似乎是:
(1)从计算机中产生U(0,1)均匀分布的随机数30个(当然,也可以是任意个,m越大越好,主要是符合中心极限定理的条件),记为u1,u2,...,u30;由于E(ui)=1/2,D(ui)=1/12(i=1,2,...,30)根据中心极限定理,可以认为近似服从均值为Σ=ui(其中i=1,2,...,30)近似服从均值为1/2*30=15,方差为1/12*30=2.5的正态分布。
(2)计算:v=(u1+u2+...+u30-15)/(2.5)1/2,由中心极限定理,它可以看作是来自标准正态分布N(0,1)的一个随机数;
(3)变换:x=μ+σv,由正态分布的性质可知,它可以看作是来自正态分布N(μ,σ*σ)的一个随机数。
但在第一步里:E(ui)=1/2,D(ui)=1/12(i=1,2,...,30)是如何得到的? 而且这个过程似乎是由30个均匀分布的随机数生成一个标准正态随机数吧?那这样,前期的均匀随机数得生成太多了吧。
那不能由n个均匀分布的随机数生成n个标准正态随机数吗?

地板
icebird_rong 发表于 2011-2-10 00:39:15
3# liuxin9023

看到版主你也有研究过正态随机数的生成原理,不晓得你对我上面的描述认同否。还有能提供生成正态随机数的原代友不能?谢谢!

7
fuwf120 发表于 2011-3-4 00:26:55
高惠璇  《统计计算》上讲了生成随机变量的方法 可参考

8
Xaero 发表于 2011-3-4 13:41:55
icebird_rong 发表于 2011-2-10 00:03
刚看到一些关于正态随机数的生成,说是用中心极限定理实现。具体似乎是:
(1)从计算机中产生U(0,1)均匀分布的随机数30个(当然,也可以是任意个,m越大越好,主要是符合中心极限定理的条件),记为u1,u2,...,u30;由于E(ui)=1/2,D(ui)=1/12(i=1,2,...,30)根据中心极限定理,可以认为近似服从均值为Σ=ui(其中i=1,2,...,30)近似服从均值为1/2*30=15,方差为1/12*30=2.5的正态分布。
(2)计算:v=(u1+u2+...+u30-15)/(2.5)1/2,由中心极限定理,它可以看作是来自标准正态分布N(0,1)的一个随机数;
(3)变换:x=μ+σv,由正态分布的性质可知,它可以看作是来自正态分布N(μ,σ*σ)的一个随机数。
但在第一步里:E(ui)=1/2,D(ui)=1/12(i=1,2,...,30)是如何得到的? 而且这个过程似乎是由30个均匀分布的随机数生成一个标准正态随机数吧?那这样,前期的均匀随机数得生成太多了吧。
那不能由n个均匀分布的随机数生成n个标准正态随机数吗?
曾经确实是用12个(或者更多一些)的均匀分布随机数来生成标准正太随机数,不过现在Matlab里面用更efficient的方法。
详细内容参考:

http://www.mathworks.com/moler/random.pdf
十年一觉扬州梦。
智不足以Academy,才尚不够Industry,[情无力于Life]。

9
pengyuangwbz 发表于 2011-3-10 17:11:43
》》》》》》》》》》》》》》》》》》》

10
tangyz_hust 发表于 2012-2-17 16:38:04
7楼讲的是对的!在该书35页有产生正态分布的算法:
(1)先产生两个相互独立的均匀分布u1,u2~u(0,1);
(2)使用如下的Box-Muller变换,便可产生两个相互独立的标准正态分布x1,x2~N(0,1)
         x1=sqrt(-2*ln(u1))*cos(2*pi*u2);
         x2=sqrt(-2*ln(u1))*sin(2*pi*u2);

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 04:17