如何在正态分布中分配成本
How to distribute a cost in a normal distribution
我找到了有关以编程方式获取生成法线的随机数的指南;但是,我需要展开一个数字,以使其反映正态分布(在尽可能短的计算时间内)。
例如,我有一件商品在 2050 年价值 500,000 美元,我想以 20 年的标准偏差将其分摊。这将导致第一个标准偏差(2030 年至 2070 年)下的区域具有 (68% * $500,000) 的成本。
我可以在我的代码中使用公式来实现这一点吗?我目前唯一能想到的方法是使用 Box Muller 随机生成器并循环遍历每一美元来生成分配,这肯定效率不高。
注意,正态分布下的总价值为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));
我找到了有关以编程方式获取生成法线的随机数的指南;但是,我需要展开一个数字,以使其反映正态分布(在尽可能短的计算时间内)。
例如,我有一件商品在 2050 年价值 500,000 美元,我想以 20 年的标准偏差将其分摊。这将导致第一个标准偏差(2030 年至 2070 年)下的区域具有 (68% * $500,000) 的成本。
我可以在我的代码中使用公式来实现这一点吗?我目前唯一能想到的方法是使用 Box Muller 随机生成器并循环遍历每一美元来生成分配,这肯定效率不高。
注意,正态分布下的总价值为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));