当前位置:  开发笔记 > 编程语言 > 正文

如何计算两个正态分布的总和

如何解决《如何计算两个正态分布的总和》经验,为你挑选了1个好方法。

我有一个代表高斯分布的值类型:

struct Gauss {
    double mean;
    double variance;
}

我想在一系列这些值上执行积分:

Gauss eulerIntegrate(double dt, Gauss iv, Gauss[] values) {
    Gauss r = iv;
    foreach (Gauss v in values) {
        r += v*dt;
    }
    return r;
}

我的问题是如何为这些正态分布实现添加.

标量(dt)的乘法似乎很简单.但这并不简单!感谢FOOSHNICK的帮助:

public static Gauss operator * (Gauss g, double d) {
    return new Gauss(g.mean * d, g.variance * d * d);
}

但是,除了我之外.我想我可以添加手段; 这是导致我麻烦的差异.这些定义中的任何一个对我来说都是"合乎逻辑的".

public static Gauss operator + (Gauss a, Gauss b) {
    double mean = a.mean + b.mean;
    // Is it this? (Yes, it is!)
    return new Gauss(mean, a.variance + b.variance);        
    // Or this? (nope)
    //return new Gauss(mean, Math.Max(a.variance, b.variance));
    // Or how about this? (nope)
    //return new Gauss(mean, (a.variance + b.variance)/2);
}

任何人都可以帮助定义一个统计上正确的 - 或者至少是"合理的" - 版本的+运算符吗?

我想我可以将代码切换为使用区间运算,但我希望保持在概率和统计数据的世界.



1> David Norman..:

两个正态分布的总和本身就是一个正态分布:

N(mean1,variance1)+ N(mean2,variance2)~N(mean1 + mean2,variance1 + variance2)

这一切都在维基百科页面上.

请注意,这些确实是差异而不是标准偏差.

// X + Y
public static Gauss operator + (Gauss a, Gauss b) {
    //NOTE: this is valid if X,Y are independent normal random variables
    return new Gauss(a.mean + b.mean, a.variance + b.variance);
}

// X*b
public static Gauss operator * (Gauss a, double b) {
    return new Gauss(a.mean*b, a.variance*b*b);
}

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有