首页 > 编程知识 正文

正态分布概率密度函数反函数,c++返回代码为负值

时间:2023-05-04 06:33:09 阅读:137908 作者:2856

//

//用梯形法生成服从标准正态分布的累积函数from Dain//

//

#include 'iostream.h '

#include 'fstream.h '

#include 'math.h '

#include 'errno.h '

const double PI=3.1415926;

双精度(双精度z )。

{

双主题;

temp=exp((-1 ) *z*z/2 )/sqrt )2*pi );

返回时间;

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

/*返回标准正态分布的累积函数。 该分布的平均值为0,标准偏差为1。 */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

双精度(连续双精度z ) )。

{

//this guards against overflow

if(z6 )返回1;

if(z-6 )返回0;

staticconstdoublegamma=0.231641900,

a1=0.319381530,

a2=-0.356563782,

a3=1.781477973,

a4=-1.821255978,

a5=1.330274429;

doublek=1.0/(1Fabs(z ) *伽玛);

doublen=k*(a1k*(a2k* ) a3k * (a4k * a5 ) ) )

n=1-normal(z ) * n;

是if(z0 )

返回1.0-n;

返回n;

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

返回/*标准正态分布累积函数的反函数。 该分布的平均值为0,标准偏差为1。 */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

双精度(constdoublep ) )。

{

static const double LOW=0.02425;

static const double HIGH=0.97575;

/* coefficientsinrationalapproximations.* /

静态const double a [ ]=

{

-3.969683028665376e 01、

2.209460984245205e 02、

-2.759285104469687e 02、

1.383577518672690e 02、

-3.066479806614716e 01、

2.506628277459239e 00

(;

静态const double b [ ]=

{

-5.447609879822406e 01、

1.615858368580409e 02、

-1.556989798598866e 02、

6.680131188771972e 01、

-1.328068155288572e 01

(;

静态const double c [ ]=

{

-7.784894002430293e-03,

-3.223964580411365e-01,

-2.400758277161838e 00,

-2.549732539343734e 00、

4.374664141464968e 00、

2.938163982698783e 00

(;

静态const double d [ ]=

{

7.784695709041462e-03、

3.224671290700398e-01、

2.445134137142996e 00、

3.754408661907416e 00

(;

双精度q,r;

if(p0|||p1 ) )。

{

返回0.0;

}

ELSEif(p==0) ) )。

{

return-huge _ val/* MINUS ' infinity ' * /;

}

ELSEif(p==1) )。

{

return HUGE_VAL /* 'infinity' */;

}

elseif(Plow ) ) ) ) ) ) ) ) )。

{

/* rationalapproximationforlowerregion * /

q=sqrt(-2*log ) ) p );

return () () ) c[0]*qc[1] ) *q c[2] ) *q c[3] ) *q c[4] ) *q c[5] ) /

() ) d[0]*q d[1] ) *q d[2] ) *q d[3] ) q1 );

}

elseif(phigh ) )。

{

/* rationalapproximationforupperregion * /

q=sqrt(-2*log )1-p );

return-() () () c[0]*qc[1] ) *q c[2] ) *q c[3] ) *q c[4] ) *q c[5] ) /

() ) d[0]*q d[1] ) *q d[2] ) *q d[3] ) q1 );

}

else

{

/* rationalapproximationforcentralregion * /

q=p - 0.5;

r=q*q;

return () () ) a[0]*ra[1] ) *r a[2] ) *r a[3] ) *r a[4] ) *r a[5] ) q/

() ) b[0]*r b[1] ) *r b[2] ) *r b[3] ) *r b[4] ) r1 );

}

}

void main () )

{

ofstream out1;

out1.open (正态分布累积函数. xls );

for(intI=0; i1200; I )

out1

out1.close (;

out1.open (正态分布累积函数的反函数. xls );

for(I=0; i1000; I )

out10.001*i

out1.close (;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。