用C#实现计算标准正态分布

static double f(double x)
  {
   double f=Math.Exp(-x*x/2)/Math.Sqrt(2*Math.PI);
   return f;
  }
  ///
  /// 应用程序的主入口点。
  ///

  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }
  private void button1_Click(object sender, System.EventArgs e)
  {
   int S=2;
   double Q=0;
   double b=Convert.ToDouble(textBoxU.Text);
   while(true)
   {
   
    double a=b-S;
    int M=1,N=1,k=1,m=1;
    double ep,I,h;  
    ep=0.000000000001;   
    h=b-a;
    I=h*(f(a)+f(b))/2;   
    double[,] T=new double[5000,5000];
    T[1,1]=I;
    while(1>0)
    {
     N=(int)Math.Pow(2,m-1);
     if(N>5000)
     {
      MessageBox.Show("请缩小精度再计算!");
      break;
     }
     else
     {
      h=h/2;
      I=I/2;
      for(int i=1;i<=N;i++)
       I=I+h*f(a+(2*i-1)*h);
      T[m+1,1]=I;
      M=2*N;
      k=1;  
      while(M>1)
      {
       T[m+1,k+1]=(Math.Pow(4,k)*T[m+1,k]-T[m,k])/(Math.Pow(4,k)-1);
       M=M/2;
       k=k+1;
      }
      if(Math.Abs(T[k,k]-T[k-1,k-1])       break;
      m=m+1;
     }
    }
    I=T[k,k];
    Q=Q+I;
    if(Math.Abs(I)     break;
    b=a;S=2*S;   
    textBoxResult.Text=Convert.ToString(Math.Round(Q,10));
   }  

你可能感兴趣的:(用C#实现计算标准正态分布)