我希望你的建议:你能推荐一个允许你像实数一样添加/减去/乘/除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.
更新
我正在寻找的是Sam Savage在The Flaw of Averages中对“概率形状”实现代数的方法。视频Monte Carlo Simulation in Matlab解释了我想要的效果 - 一个用于对一系列输入分布执行数学运算的库。
更新
搜索以下内容将生成相应库的信息:
答案 0 :(得分:2)
@Risk Developer套件允许您从一组概率密度函数开始,然后对输入执行代数以获得一些输出,即P = A + B.
关键字on this page可用于查找其他竞争产品,例如尝试搜索:
用C ++或.NET等语言编写代码并不困难。蒙特卡罗部分可能只有大约50行代码:
答案 1 :(得分:1)
@Gravitas - 基于与@ user207442的交换,听起来你只想要一个对象进行抽象和减法的抽象。对于两个随机变量的乘积,肯定有一个封闭形式的解决方案,但它可能取决于分布。
C#炙手可热的新妹妹F#,让你做一些有趣的FP技术,它与C#无缝集成。你抽象出一个可以“求和”(卷积)或“乘法”(??)的“随机变量”类型的目标似乎是为a monad而尖叫。这是一个simple example。编辑:你需要在c#中重新发明mcmc吗?我们在学校使用winbugs ...这是winbugs使用的c ++库:http://darwin.eeb.uconn.edu/mcmc++/mcmc++.html。你可以将你的代码包裹在c ++周围而不是重新发明轮子(再次,看起来monad会在这里出现)吗?
答案 2 :(得分:0)
看一下Math.NET Numerics库。 Here是特定于概率分布支持的页面。