正态分布函数值的c语言代码怎么写double gaussian(double u) //用Box_Muller算法产生高斯分布的随机数
{
double r,t,z,x;
double s1,s2;
s1=(1.0+rand())/(RAND_MAX+1.0);
s2=(1.0+rand())/(RAND_MAX+1.0);
r=sqrt(-2*log(s2)/log(e));
t=2*pi*s1;
z=r*cos(t);
x=u+z*N;
return x;
}
以前写的一个函数,u是均值,N是方差
c语言有matlab中的normpdf和normcdf函数吗?normcdf函数用来获得正态分布的概率分布函数; normpdf用来获得正太分布的概率密度函数 。例如 , norcdf(0,0,1)的值是0.5 , 表示N(0) = 0.5 第二个参数是均值,第三个参数是标准差 。
高手进,c语言中如何得到服从正态分布的随机数?用boost的random库方便生成,以下是2个测试 , 分别生成50个数:
// μ = 30, δ^2 = 4
30.84 30.00 26.61 27.49 31.27
29.74 27.99 29.81 29.73 33.29
32.17 31.37 26.83 28.20 27.99
28.69 34.66 25.44 29.22 24.84
29.39 32.02 32.35 28.28 34.16
27.04 32.02 33.40 31.39 29.08
31.91 29.19 29.14 32.25 27.20
32.16 29.06 27.67 29.26 29.51
28.36 28.65 26.87 27.74 26.56
30.16 31.18 30.57 30.57 33.43
// μ = 30, δ^2 = 100
84.66 61.85 24.17 68.63 2.15
1.30 40.92 72.74 74.83 4.25
39.86 27.06 60.94 50.58 79.35
51.83 86.03 74.75 92.33 70.59
93.43 55.51 57.22 70.48 70.52
1.45 22.55 40.85 33.23 65.39
35.54 89.69 45.87 88.35 40.73
67.31 17.64 23.98 98.43 35.93
97.88 48.95 59.54 13.14 45.79
5.55 8.77 70.31 14.83 82.54
#include iostream
#include boost/random.hpp
using namespace std;
typedef boost::minstd_rand GenType;
typedef boost::normal_distribution NormalDis;
typedef boost::variate_generatorGenType, NormalDis RNG;
void Show(RNG rng)
{
cout.setf(ios_base::fixed);
cout.precision(2);
for(int i = 0; i50;)
{
double temp = rng();
if(temp = 1temp = 100)
{
couttemp' ';
if(++i % 5 == 0)
cout'\n';
}
else
continue;
}
coutendl;
}
int main()
{
GenType gt;
NormalDis dis(30, 2); // μ = 30, δ^2 = 4
RNG rng(gt, dis);
Show(rng);
rng.distribution() = NormalDis(30, 100); // μ = 30, δ^2 = 10000
Show(rng);
}
请问:C语言中怎么计算正态分布函数?C语言中计算一个数c语言中判断正态分布函数的N次方可以用库函数pow来实现 。
函数原型c语言中判断正态分布函数:double pow(double x, double y);
功能c语言中判断正态分布函数:计算x^yc语言中判断正态分布函数的值
返 回值:计算结果
举例如下:
double a = pow(3.14, 2);// 计算3.14的平方
注:使用pow函数时c语言中判断正态分布函数,需要将头文件#includemath.h包含进源文件中 。
如何用C语言生成一个正态分布的样本调试程序时,随机数种子可以设常数,例如srand(54321);
用 rand() 产生均匀分布随机数x1,x2
利用瑞利分布得正态分布随机数 y1,y2
再按要求线性缩放一下到[0.01,2] 区间 。
#include stdio.h
#include stdlib.h
#include math.h
#include time.h
main(){
#define N 100
double rd[N];
double x1,x2,y1,y2;
double pi2=6.28318530728,mx,mi,ave=0;
int i;
//srand(54321);
srand(time(NULL));
for (i=0;i=N-2;i=i+2){
x1=1.0*rand()/RAND_MAX;
x2=1.0*rand()/RAND_MAX;
y1= sqrt((-2.0*log(x1))) * cos(pi2*x2);
y2= sqrt((-2.0*log(x1))) * sin(pi2*x2);
rd[i]=y1;
rd[i+1]=y2;
}
mx=rd[0];mi=rd[0];
for (i=0;iN;i++){
if (rd[i]mx)mx=rd[i];
if (rd[i]mi)mi=rd[i];
}
//printf("mi=%lf mx=%lf\n",mi,mx);
for (i=0;iN;i++) rd[i] = (rd[i]-mi)/(mx-mi+0.001) * (2.0-0.01) + 0.01;
推荐阅读
- 华为m20pro支持鸿蒙系统吗,华为m20pro支持无线充电吗
- 视频号二次元直播怎么弄,二次元怎么校正视频
- 停车设备年会直播,停车会议
- python写函数求和 python用sum函数求和
- 关于python什么叫标识符的信息
- 星际背景的射击老游戏,星际射击游戏很多科幻武器
- 新号无人直播有影响吗吗,无人直播违规吗
- MySQL代码怎么打 mysql 代码
- 头像上传jquery,头像上传失败请检查网络抖音