C#正常随机数

J.H*_*rix 24 c# random algorithm math statistics

我想创建一个接受的函数Double mean,Double deviation并返回一个正态分布的随机数.

示例:如果我传入5.00作为平均值而2.00作为偏差,68%的时间我会得到一个介于3.00和7.00之间的数字

我的统计数据有点弱...... 任何人都知道我应该如何处理这个问题?我的实现将是C#2.0,但只要数学函数是标准的,就可以用您选择的语言回答.

我想可能实际上就是我在寻找的东西.任何帮助将此转换为代码?

在此先感谢您的帮助.

Joh*_*ook 21

请参阅此CodeProject文章:简单随机数生成.代码非常短,它可以从均匀分布,正态分布和指数分布生成样本.


Jas*_*yon 12

您可能对Math.NET感兴趣,特别是Numerics包.

警告:数字包的目标是.NET 3.5.如果您的目标是早期版本,则可能需要使用Iridium软件包...


Ian*_*n W 7

这里有一些C返回两个值(rand1和rand2),只是因为算法有效地这样做了.它是Box-Muller变换的极地形式.

void RandVal (double mean1, double sigma1, double *rand1, double mean2, double sigma2, double *rand2)
{
double u1, u2, v1, v2, s, z1, z2;

do {
    u1 = Random (0., 1.);  // a uniform random number from 0 to 1
    u2 = Random (0., 1.);
    v1 = 2.*u1 - 1.;
    v2 = 2.*u2 - 1.;
    s = v1*v1 + v2*v2;
} while (s > 1. || s==0.); 

z1 = sqrt (-2.*log(s)/s)*v1;
z2 = sqrt (-2.*log(s)/s)*v2;
*rand1 = (z1*sigma1 + mean1);
*rand2 = (z2*sigma2 + mean2);
return;
Run Code Online (Sandbox Code Playgroud)

}

  • 变量u,v,z和s用于保持与Box-Muller变换中使用的常规数学符号的一致性. (4认同)
  • 作为一名导师,我可以证明,如果习惯性的数学符号本身被更具描述性地标记,那对大多数人来说会有所帮助. (4认同)