我只是想知道,通过下面的代码,我将如何确定与所选随机变量之一相关的发生概率。例如,如果为 new_E11 选择一个特定变量,我如何知道它从正态分布中出现的概率?
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
谢谢
最佳答案
任何特定值的概率为零(嗯,实际上大约是 2^64 中的 1 部分...这就是有多少个不同的 float ,因为它们由 64 位二进制表示;并且它们的可能性并不相同,因此答案比这更复杂)。
更好的问题是“概率密度是多少” - 可以描述为极限
P(x - dx < X < x + dx)
----------------------
2 * dx
这实际上是“概率密度函数”或 PDF 的定义。在您的情况下,您使用的是具有平均 mu 和标准差 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)
其中 p
是从 -3
到 3
的标准正态分布的积分,或 0.9973
。因此,在您的情况下,上述公式会低估概率 0.27%
。
建议针对您的代码的一些风格建议。请考虑以下事项(为您的代码提供相同的结果):
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;
注意事项:
- “魔数(Magic Number)”有一个合理的名称,并且都位于代码顶部
- “限制内的随机数”的计算被归入一个单独的函数
- 使用
randn
而不是normrnd
(因此无需绑定(bind)统计工具箱许可证) - 计算“好数字”后计算缩放
- 重复的代码已被消除
- 从结构(和注释)中可以更明显地看出发生了什么
所有这些加起来就是“更好”的代码 - 从某种意义上说,它更容易调试和维护。当您在六个月后看到自己的代码时,您仍然可以阅读它......
关于matlab - 从正态分布中选择的随机变量出现的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074631/