C中正态分布的错误答案

C中正态分布的错误答案,c,matlab,C,Matlab,我使用本链接中给出的方程式应用了正态分布函数: 我做了这个正态分布的代码 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]); } 但

我使用本链接中给出的方程式应用了正态分布函数:

我做了这个正态分布的代码

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]);
}
但是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()开始自己构建

pi近似可能更好…在数学中使用值。h
randn
不是正态分布的CDF或PDF,它是一个随机数生成器!在开始转换代码之前,请检查
normpdf
normcdf
。你应该清理你的matlab代码。
x_s=2+0.5.*randn(1,9)的目的是什么?用C实现这段代码时,有没有想到它会产生与Matlab相同的结果,因为我想将这段Matlab代码转换为C。@user2828488:您真的需要完全相同的随机过程吗?这需要获得matlab随机生成器(可用)的C代码,设置相同的种子,以TMW相同的方式实现randn。是的,我需要与将matlab代码转换为C相同的随机过程,C不支持randn函数。你能在这里分享这个方法吗?查看
edit rand
,了解有关matlab使用的随机数生成器的信息。我想你说的是'r=a+(b-a)。*rand(100,1);'
xs(i) = 1/(s*sqrt(2*pi)) * exp(-( (x(i)-m)^2/(2*s^2)));