如何添加和减去像实数一样的概率分布?

Con*_*ngo 9 .net c# probability

我想你的建议:你能推荐一个库,它允许你像实数一样加/减/乘/除PDF(概率密度函数)吗?

在幕后,它必须做一个蒙特卡罗来完成结果,所以我可能更喜欢快速有效的东西,可以利用系统中的任何GPU.

更新:

这是我正在寻找的那种C#代码:

  var a = new Normal(0.0, 1.0); // Creates a PDF with mean=0, std. dev=1.0.
  var b = new Normal(0.0, 2.0); // Creates a PDF with mean=0, std. dev=2.0.
  var x = a + b; // Creates a PDF which is the sum of a and b.
                 // i.e. perform a Monte Carlo by taking thousands of samples 
                 // of a and b to construct the resultant PDF.
Run Code Online (Sandbox Code Playgroud)

更新:

我正在寻找的是一种在Sam Savage的The Flaw of Averages中实现"概率形状"代数的方法.Matlab中的视频蒙特卡罗模拟解释了我想要的效果 - 一个库在一系列输入分布上执行数学运算.

更新:

搜索以下内容将生成相应库的信息:

  • "蒙特卡洛图书馆"
  • "monte carlo C++"
  • "monte carlo Matlab"
  • "monte carlo .NET"

Con*_*ngo 2

@Risk开发工具包允许您从一组概率密度函数开始,然后对输入执行代数以获得一些输出,即 P = A + B。

此页面上的关键字可用于查找其他竞争产品,例如尝试搜索:

  • 《蒙特卡罗模拟模型C++》
  • 《蒙特卡罗模拟模型.NET》
  • “风险分析工具包”
  • “分配拟合能力”。

使用 C++ 或 .NET 等语言对其进行编码并不那么困难。蒙特卡罗部分大概只有大约 50 行代码:

  • 阅读 Sam Savage 的《平均值的缺陷》,了解如何在“概率形状”上使用代数。
  • 有一些生成“概率形状”的方法,可以通过从某些采样数据引导,或从预先确定的概率密度函数,或通过使用Math.NET 概率库
  • 从输入概率形状中抽取 10000 个样本。
  • 对样本进行代数运算,即 +、-、/、* 等,以获得 1000 个输出。您还可以形成一个概率树,它在输入上暗示“与”、“或”等。
  • 通过将结果放入 100 个离散的“桶”中,将这 10000 个输出组合成一个新的“概率形状”。
  • 现在我们有了一个新的“概率形状”,我​​们可以将其用作新概率树的输入,或者执行积分以获得面积,在给定某个阈值的情况下将其转换回硬概率数。
  • Matlab 中的蒙特卡洛模拟视频比我更好地解释了整个过程。