【发布时间】:2010-09-30 03:32:36
【问题描述】:
我有一个表示高斯分布的值类型:
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);
}
谁能帮助定义+ 运算符的统计上正确或至少“合理”的版本?
我想我可以将代码切换为使用区间算术,但我希望留在概率和统计的世界中。
【问题讨论】:
标签: algorithm language-agnostic statistics algebra