【发布时间】:2014-03-16 13:05:22
【问题描述】:
当我运行蒙特卡罗模拟时,我只想从正态分布的尾部([-5sigma,-3sigma] 和 [3sigma,5sigma])进行采样,因此我想到了拒绝采样。然而,我正在努力在 Matlab 中实现这一点。到目前为止,我一直在使用类似于下面代码的东西(我知道这不是拒绝采样),但是拒绝采样会是解决这个问题的更好方法吗?
function [new_E11] = elasticmodulusrng()
new_E11 = normrnd(136e9,9.067e9,[1 1]);
while new_E11>=136e9-3*9.067e9 && new_E11<=136e9+3*9.067e9
new_E11 = normrnd(136e9,9.067e9,[1 1]);
end
谢谢
编辑:在答案中使用代码
【问题讨论】:
-
下面的代码是拒绝抽样,只针对不同的条件。顺便说一句:避免使用幻数。将常量(
136e9和9.067e9)分配给变量,这使得代码更易于阅读和维护。 -
@Daniel 谢谢。有没有办法增加从尾部选择数字的概率,而不是纯粹拒绝不是来自尾部的样本?
-
@user131983 我认为没有理由这样做。至少不是一件容易的事。
-
你的分布的 cdf 是已知的,
normcdf在 [-5sigma,-3sigma] 和 [3sigma,5sigma] 之间的部分归一化为 1 的整数。符号工具箱可用吗?跨度> -
@Daniel 是的,我认为这是个好主意。标准化尾部,使其面积等于 1。不幸的是,我没有符号工具箱。