我已使用此链接中给出的方程式应用了正态分布函数:
http://en.wikipedia.org/wiki/Normal_distribution
我将此代码制作为正态分布
float m=2.0;
float s=0.5;
float x[3]={1.0, 2.0, 3.0};
float xs[3];
const float pi = 3.141;
for (int i=0; i<3; i++)
{
xs[i]=(1/s*sqrt(2*pi))*exp(-(pow(x[i]-m,2)/2*pow(s,2)));
printf("\n%f",xs[i]);
}
此代码的答案是4.42、5.01、4.42
我在Matlab中有相同的代码
x_s_new=[1 2 3];
x_s=2+0.5.*randn(1,9);
x_s=x_s_new+0.5.*randn(1,3);
plot(x_s_new)
但是在matlab中的答案是0.8,1.9,3.7
谁能告诉我我要去哪里错了?
我想使用C应用正态分布
谢谢 :)
最佳答案
您的Matlab代码不是C代码的类似物。 C代码在某些点计算正态分布的概率密度函数的值。 Matlab代码从正态分布生成随机数。
与C代码相对应的Matlab代码为
m = 2;
s = 0.5;
x = [1 2 3];
for i = 1 : 3
xs(i) = (1/s*sqrt(2*pi)) * exp(-( (x(i)-m)^2/2*s^2));
fprintf('%f\n',xs(i));
end
并给出相同的结果
4.424183
5.013257
4.424183
但是,这是一个错误,因为Matlab和C中的
/
仅适用于直接下一个操作数。正确的是xs(i) = 1/(s*sqrt(2*pi)) * exp(-( (x(i)-m)^2/(2*s^2)));
并相应地在C中
要将
randn
的代码转换为C –据我所知,C中没有标准函数可以生成正态分布的随机数,您需要找到一个包含此类函数的库,或者从random()
开始自己构建它。关于c - C语言中正态分布的错误答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20169687/