
怎样用C++算正态分布的积分
比如,输入-0.3 2.1,就能算出F(2.1) - F(-0.3)
就像二楼说的那样的 展开
你看看计算公式是不是这样的?
还有精度要多少啊?
查表可知,
F(2.1) =0.9821
F(-0.3)=1-0.6179
F(2.1) - F(-0.3) = 0.6
源程序
#include<stdio.h>
#include<math.h>
double f(double x)
{
return exp(-x*x/2);
}
double F(double a,double b,double ep=1e-6)
{
double h,s1=0,s2=(b-a)*(f(a)+f(b))/2;
int n,k;
for(int n=1;fabs(s1-s2)>ep;n*=2)
{
h=(b-a)/n;
s1 = s2;
s2 = 0;
for(int k=0;k<n;++k)
{
s2 += h*f(a+(k+0.5)*h);
}
s2 = (s1+s2)/2;
}
return s2*sqrt(1/(8*atan(1.0)));
}
int main()
{
double c,d;
scanf("%lf",&c);
scanf("%lf",&d);
printf("%lf",F(c,d));
return 0;
}

2025-04-21 广告
正态分布中一些值得注意的量:
密度函数关于平均值对称
平均值与它的众数(statistical mode)以及中位数(median)同一数值。
函数曲线下68.268949%的面积在平均数左右的一个标准差范围内。
// 标准正态分布分布函数。
//入口参数x。 任意实数。 返回标准正态分布概率密度。
// 先是考虑把正态分布的那张表搞到程序中,通过查表的方式,小数点三位后面多 //出来的值使用公式来计算
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;
}
2、至于标准正态分布,那个积分好像是不能积出来的,所以可能用计算机模拟一次积分效果会好些。 3个参数中两个用于确定如何通过标准正态分布函数变换得到所需要的正态分布函数,第3个参数为自变量x。
如果真用积分算,没学过数值分析还弄不出来。不过真的没必要。