【问题标题】:Function in MATLAB to draw samples from Uniform DistributionMATLAB中的函数从均匀分布中抽取样本
【发布时间】:2021-03-10 06:36:43
【问题描述】:

我想从 MATLAB 中的代码定义如下的均匀分布中随机抽取:-

pd1 = makedist('Uniform','lower',-0.0319,'upper',0.0319); % X1

在 MATLAB 中,通常的命令是 random(),但帮助文件告诉我它仅适用于高斯混合分布。那么它是否也可以扩展用于均匀分布,或者是否有任何其他函数可以显式地为蒙特卡洛模拟随机绘制。

【问题讨论】:

    标签: matlab random montecarlo probability-density uniform-distribution


    【解决方案1】:

    对于统一变量,可以使用random,如下:

    lower_limit = -0.0319;
    upper_limit = 0.0319;
    sz = [1 10];
    x = random('unif', lower_limit, upper_limit, sz);
    

    但这过于复杂,而且速度很慢:random 分析输入并调用unifrnd,然后再进行一些检查并最终调用rand。相反,您可以使用:

    lower_limit = -0.0319;
    upper_limit = 0.0319;
    sz = [1 10];
    x = lower_limit + (upper_limit-lower_limit)*rand(sz);
    

    一般来说,有三个级别的函数可用于创建(伪)随机数:

    • random 是一种用于生成随机数的通用接口。根据指定的输入,它调用适当的函数,例如 unifrnd 用于均匀分布,exprnd 用于指数分布,...
    • 每个发行版都有特定的函数,通常称为“···rnd”:unifrndexprndnormrnd、... 在内部,它们调用了一些接下来要描述的函数,并应用了一些转换以实现所需的分布。
    • 最低级别(内置)最快的函数是:rand 用于 (0,1) 上的连续均匀分布,randn 用于均值 0 和方差 1 的正态(高斯)分布,以及randi 用于均匀离散分布。

    【讨论】:

    • 但在这种情况下,我没有上限和下限,但我有pd1 的信息表明它是均匀分布的,那我该怎么办?这里pd1 只是我从以前的数据中获得的信息假设
    • 我现在明白你的意思了。这样就解决了我的问题。我可以使用 random()unifrnd() ,但有趣的是只有 random() 允许我使用概率分布。
    • 如果你只有pd1作为输入数据,你必须使用random:类似x = random(pd1.DistributionName, pd1.ParameterValues(1), pd1.ParameterValues(2), sz)
    猜你喜欢
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2012-10-11
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多