私は粒子のリストの加重を正規化したいと思います。これらの重みはパーティクルオブジェクトに属します。私はそれらを体重の合計で割って正規化しようとします。すべてのウェイトは倍精度で宣言されます。プログラムがリストの先頭で分割を開始するとき、値は正しいですが、2番目または3番目の除算の直後に、私は間違った結果を得ます。これは、演算後の重みの合計が1ではない結果をもたらします。すべきだ。誰もこの問題で私を助けることができますか?多分スレッドと関係がありますか? Thxは事前に..確率計算のための二重値の正規化
// normalizing weights
double weightsum = 0;
double check = 0;
List<ParticleRobot> temporalparticleSet = new List<ParticleRobot>();
for (int i = 0; i < particleSet.Count; i++)
{
weightsum = weightsum + this.particleSet[i].Weight;
}
Program.Weightsum = weightsum;
Console.WriteLine("Sum of unnormalized particleweights is " + weightsum);
foreach (ParticleRobot p in this.particleSet)
{
Program.Weight = p.Weight;
p.Weight = Program.Weight/Program.Weightsum;
Console.WriteLine("Updated Particleweight is now : " + p.Weight);
}
// checking that they sum up to 1
for (int i = 0; i < particleSet.Count; i++)
{
check = check + this.particleSet[i].Weight;
}
Console.WriteLine("Check: Sum of particles-weights is = " + check);
なぜあなたの地元の人を保存するためにプログラムタイプが必要ですか? Program.Weight = p.Weightは、並列処理が導入されたときに痛みの世界につながる可能性があります。 – Polity