从正态分布中选择随机变量的概率

时间:2014-02-27 16:34:42

标签: matlab probability normal-distribution

我只是想知道,使用下面的代码,我如何确定与所选择的随机变量之一相关的发生概率。例如,如果为new_E11选择了特定变量,我如何从Normal分布中知道它的出现概率?

function [new_E11, new_E22] = elasticmodulusrng()

new_E11 = normrnd(136e9,9.067e9,[1 1]);

new_E22 = normrnd(8.9e9,2.373e9,[1 1]);

while new_E11<=136e9-3*9.067e9 && new_E11>=136e9+3*9.067e9
        new_E11 = normrnd(136e9,9.067e9,[1 1]);
end

while new_E11<=8.9e9-3*2.373e9 && new_E11>=8.9e9+3*2.373e9
        new_E22 = normrnd(8.9e9,2.373e9,[1 1]);
end

由于

1 个答案:

答案 0 :(得分:3)

任何特定值的概率为零(嗯,实际上大约是2 ^ 64中的1个部分......这是多少个不同的浮点数,因为它们由64位二进制表示;它们不太可能,所以答案比那更复杂。

更好的问题是“概率密度”是什么 - 可以被描述为

的极限
P(x - dx < X < x + dx)
----------------------
        2 * dx

这实际上是“概率密度函数”或PDF的定义。在您的情况下,您使用的是具有平均μ和标准差sigma的正态分布,然后

pdf(X) = exp(-(X-mu)*(X-mu) / (2 * sigma * sigma)) / (sqrt(2.0*pi) * sigma)

如果确实希望得到原始问题的答案,那么您将查看您感兴趣的值的X值的最小增量(尾数中的一个最低有效位)。将是你的delta X,然后你可以计算出实际的答案(警告 - 它不仅会很小,而且如果没有遇到重大的舍入错误就很难计算出来。这很难。)

进一步思考:

您测试值的限制在+ - 3 sigma范围内,并继续前进直到它。这意味着您通常会略微增加概率 - 因为您的值始终来自范围的特定部分(总概率小于1),您需要将PDF乘以(1/p)其中{{ 1}}是从p-33的标准正态分布的积分。因此,在您的情况下,上述公式会低估0.9973的概率。

建议为您的代码提供了几种风格建议。请考虑以下事项(为您的代码提供相同的结果):

0.27%

关于这一点的注意事项:

  1. “魔术数字”有一个合理的名称,并且都在代码的顶部
  2. 计算“限制范围内的随机数”被归为一个单独的函数
  3. 使用function [new_E11, new_E22] = elasticmodulusrng() % returns randomly distributed modulus % keeping the value within +- 3 standard deviations % identify the constants up front mean11 = 136e9; stdv11 = 9.067e9; mean22 = 8.9e9; stdv11 = 2.373e9; % compute the values new_E11 = normRandLimit(mean11, stdv11, [-3 3]); new_E22 = normRandLimit(mean22, stdv22, [-3 3]); function rr = normRandLimit(m, s, b) % helper function in the same file % returns a normally distributed random variate % with mean m, standard deviation s % within limits [mean + b(1)*s, mean + b(2)*s] while true rr = randn(1); % doesn't need statistics toolbox - scale later if( rr > b(1) && rr < b(2) ) break; % found acceptable value end end % now apply scaling: rr = rr * s + m; 而不是randn(因此无需占用统计工具箱许可证)
  4. 计算“好数字”后的计算比例
  5. 已删除重复代码
  6. 从结构(和评论)中发生的事情更为明显
  7. 所有这些都会增加“更好”的代码 - 从某种意义上说,它更容易调试,维护。当你在六个月内看到自己的代码时,你仍然可以阅读它......