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));
}
{
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));
}