我想正常化粒子列表中的权重。这些权重属于粒子对象。我试图通过将它们除以权重的总和来使它们正常化。所有的重量都在双打中声明。当程序在列表开始时开始分割时,该值是正确的,但在第二次或第三次分割后不久,我得到了错误的结果..其结果是操作后的权重之和不是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 2011-12-15 02:32:58