最近项目需要将matlab代码移到手机上去,matlab代码非常简单的函数,在C#中没有对应的函数,比如正态发生器,上网找了很多,最后发现一种方法不错,而且挺高效,代码如下:
class NormalDistribution
{
public double Mu { get; set; }
public double Sigma { get; set; }
private Random rand;
public double NextDouble()
{
double u1 = rand.NextDouble(); //these are uniform(0,1) random doubles
double u2 = rand.NextDouble();
double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2); //random normal(0,1)
double randNormal = Mu + Sigma * randStdNormal; //random normal(mean,stdDev^2)
return randNormal;
}
public NormalDistribution()
{
rand = new Random((int)DateTime.UtcNow.Ticks);
}
}