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

static double f(double x)
  {
   double f=Math.Exp(-x*x/2)/Math.Sqrt(2*Math.PI);
   return f;
  }
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [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])<ep)   
       break;
      m=m+1;
     }
    }
    I=T[k,k];
    Q=Q+I;
    if(Math.Abs(I)<ep)
     break;
    b=a;S=2*S;   
    textBoxResult.Text=Convert.ToString(Math.Round(Q,10));
   }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值