Расчет нормального распределения с повторными ответами и неверными - PullRequest
0 голосов
/ 16 сентября 2018

Я пишу программу, которая вычисляет значение функции нормального распределения, данное мне здесь:

Normal Distribution Equation

Программа должна запрашиватьпользователь для среднего значения μ и стандартного отклонения σ для нормального распределения, показанного выше.Затем программа запрашивает N значений x , а затем запрашивает каждое значение x , одно за другим.После каждого значения x выписывается соответствующее значение функции.

Пока это мой код:

#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>

int main() {

int j;
double u, stddev, N, result, x;

printf("Enter u and stddev for the Normal Distribution:\n");
  scanf("%lf %lf",&u, &stddev);
printf("Enter how many values of x (N) for the Normal Distribution:\n");
  scanf("%lf",&N);

for (j=0; j<N; j++) {

printf("Enter a value for x: \n");
  scanf("%lf",&x);
result = ((1)/(stddev*sqrt(2*M_PI)))*exp(-(1/2)*((x-u)/stddev)*((x-u)/stddev));
printf("%.6lf\n", result);

 }
}

Я в основном закончил, но ответыпрограмма дает мне неправильные данные по сравнению с моими ответами из моего калькулятора.Например, когда я делаю N = 3 независимо от того, что я положил для 3 значений x , ответ, который он мне дает для каждого из них, одинаков, когда их не должно быть.

Итак, я знаю, что моя проблема заключается в этой строке кода:

result = ((1)/(stddev*sqrt(2*M_PI)))*exp(-(1/2)*((x-u)/stddev)*((x-u)/stddev));

Я просто неправильно пишу функцию в программе?Должно быть, чтобы это не сработало.

1 Ответ

0 голосов
/ 18 сентября 2018

Ваш код чистый и функциональный.Пока хорошая работа.

Вы были правы относительно того, какую строку нужно изменить - проблема в том, что использование целочисленного деления приводит к целому числу, поэтому 1 / 2 приводит к значению 0.Это может быть исправлено с помощью одного двойного значения: 0.5 или путем деления с использованием двойных 1.0 / 2.0.

result = ((1)/(stddev*sqrt(2*M_PI)))*exp(-(0.5)*((x-u)/stddev)*((x-u)/stddev));

Я протестировал ваш код после внесения этих изменений попробуйте его онлайн и они идеально соответствуют формуле вольфрам альфа , а также тому, что вы сказали в комментариях.

Например:

μ=2, σ=3, x=7 results in 0.033159
μ=3, σ=7, x=0 results in 0.051991
μ=4, σ=4, x=4 results in 0.099736
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...