我找到了有条理地获取生成正常的随机数的指南;但是,我需要展开一个数字,以便它反映正态分布(在最少的计算时间内)。
例如,我有一个项目,在2050年花费了50万美元,我希望以20年的标准偏差进行传播。这将导致第一个标准差(2030年至2070年)之下的面积具有(68%* $ 500,000)的成本。
我可以在我的代码中使用一个公式来实现这个目标吗?我现在能想到的唯一方法是使用Box Muller随机生成器并循环每一美元以生成分布,这绝对不是有效的。
答案 0 :(得分:1)
请注意,正态分布下的总值为1.因此,您只需要找出曲线在特定时间范围内累积的百分比,然后乘以总成本。
而不是正态分布,您需要正常的CDF(累积密度函数)(here it is in C#)。
因此,总结一下:要查找给定年份的成本,您可以找到这些年份的标准化值,将它们插入CDF函数,然后乘以总成本:
start = (start_year-0.5-median)/stddev;
end = (end_year+0.5-median)/stddev;
cost = total_cost*(Phi(end)-Phi(start));