ガウス分布を表す値型があります。
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);
}
統計的に正しい、または少なくとも「合理的な」バージョンの+
オペレーターを定義するのを手伝ってくれる人はいますか?
代わりに区間演算を使用するようにコードを切り替えることができると思いますが、確率と統計の世界にとどまることを望んでいました。