c - C中正态分布的错误答案

标签 c matlab

我已经使用此链接中给出的方程应用了正态分布函数: 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/

相关文章:

matlab - 根据 x 和 y 信息计算航向角

c - 在 Windows 和 Linux 中使用 fscanf 时行尾的字符不同

python - 如何在 Mac 上从 Python 虚拟环境调用 MATLAB 库

c - 在 gcc 编译器的标志中排除 "lib"前缀

C-MPI 发送创建的带有字符数组的 typedef 结构

matlab - 在 Matlab 中预分配字符串大小

regex - 如何使用 MATLAB 在元胞数组中同时替换多个子字符串

string - 在字符串中应用退格键

c++ - 如果我在使用 PTHREAD_PROCESS_SHARED 时不调用 pthread_mutex_destroy 会发生什么

c - 初始化动态数组c