正态分布函数

时间:2013-01-30 21:49:52

标签: c

这是编写正态分布函数http://en.wikipedia.org/wiki/Normal_distribution的正确方法还是应该使用pow函数?我真的很困惑,所以非常感谢帮助。)

#include <stdio.h>
#define _USE_MATH_DEFINES 
#include <math.h>
#include <stdlib.h>
int main()
{
double u,s, N, x1,math1, math2, math3,n, v, x;

printf("Enter Mean: ");
scanf("%lf", &u);
printf("Enter Standard Deviation: ");
scanf("%lf", &s);
printf("Enter Number Of Inputs: ");
scanf("%lf", &N);

    for (v=1; v<=N; v++)
    {
    printf("Enter Value: ");
    scanf("%lf", &x);
    n=(-1/2);
    printf("f(x)= ");
    math1 =1/(s*sqrt(2*M_PI));
    math2= (x-u)/s * (x-u)/s;
    math3= M_E * exp(n);
    x1 = math1 * exp(math3)*exp(math2);
    printf("%lf  \n", x1);
    }
system("Pause");
 }

1 个答案:

答案 0 :(得分:4)

阅读你的代码太难了,但我可以说它错了。这是一个简短的版本:

double twopi = 8.0 * atan(1.0); // preferable to using M_PI
double x = ..., sigma = ..., mu = ...;
double y = (1.0 / (sigma * sqrt(twopi))) *
    exp(-(x - mu)*(x - mu) / (2.0 * sigma * sigma));

请注意我如何将数学公式直接转换为C语言中的表达式...这样可以轻松验证代码是否正确。当你使用一堆临时变量时math1math2math3 ...

会有点困难

请记住:exp()与数学中的对应物exp相同。exp(x)。所以{{1}}是e x 。一旦意识到这一点,您将在代码中看到错误。