大家知道怎样把极值I型函数成功转换成正态分布函数吗

问题:用ANSYS进行概率设计时,随机变量没有极值I型这个分布类型,需要先将极值I型分布转换成高斯分布,才能进行概率设计,请问,如何进行转换?

回答:

double gaussian(double u) //用Box_Muller算法产生高斯分布的随机数
{
double r,t,z,x;
double s1,s2;
s1=(1.0+rand())/(RAND_MAX+1.0);
s2=(1.0+rand())/(RAND_MAX+1.0);
r=sqrt(-2*log(s2)/log(e));
t=2*pi*s1;
z=r*cos(t);
x=u+z*N;
return x;
}


以前写的一个函数,u是均值,N是方差

* 标准正态分布分布函数。
  * 入口参数u。 任意实数。 返回标准正态分布概率密度。
  先是考虑把正态分布的那张表搞到程序中,通过查表的方式,小数点三位后面多出来的值使用公式来计算
  正态分布中一些值得注意的量:
  密度函数关于平均值对称
  平均值与它的众数(statistical mode)以及中位数(median)同一数值。
  函数曲线下68.268949%的面积在平均数左右的一个标准差范围内。
  

java
  public double nextDouble() {
  return (((long)(next(26)) << 27) + next(27))
  / (double)(1L << 53);
  }
  private double nextNextGaussian;
  private boolean haveNextNextGaussian = false;
  synchronized public double nextGaussian() {
  // See Knuth, ACP, Section 3.4.1 Algorithm C.
  if (haveNextNextGaussian) {
  haveNextNextGaussian = false;
  return nextNextGaussian;
  } else {
  double v1, v2, s;
  do {
  v1 = 2 * nextDouble() - 1; // between -1 and 1
  v2 = 2 * nextDouble() - 1; // between -1 and 1
  s = v1 * v1 + v2 * v2;
  } while (s >= 1 || s == 0);
  double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
  nextNextGaussian = v2 * multiplier;
  haveNextNextGaussian = true;
  return v1 * multiplier;
  }
  }
  c++
  public static double y(double x) {
  return 1 /.9) {
  return 1; Math;
  for (double i = pc.00001.E.sqrt(2 * Math; i += step)
  f += y(i) * step; 3.pow(Math, -x * x /.9) {
  return 0;
  }

猜你喜欢

转载自blog.csdn.net/u012187684/article/details/81607860