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近似可能更好…在数学中使用值。hrandn
不是正态分布的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)));