我有一个表示高斯分布的值类型:
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);
}
任何人都可以帮助定义一个统计上正确的 - 或者至少是“合理的” -+
运营商版本吗?
我想我可以将代码切换为使用区间算术,但我希望留在概率和统计的世界中。