2013-11-24 3 views
0

я применил нормальную функцию распределения, используя уравнение, приведенные в этой ссылке: http://en.wikipedia.org/wiki/Normal_distributionНеверный ответ в нормальном распределении в C

Я сделал этот код для нормального распределения

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

Спасибо :)

+0

pi аппроксимация может быть лучше .... Использовать значение в math.h –

+0

'randn' не является CDF или PDF для нормального распределения, его генератором случайных чисел! Проверьте 'normpdf' и' normcdf' – Daniel

+0

Перед тем, как начать конвертировать код. вы должны очистить свой код matlab. В чем цель «x_s = 2 + 0,5. * Randn (1,9);»? – Daniel

ответ

1

Ваш код Matlab не аналог кода C. C-код вычисляет значение функции плотности вероятности нормального распределения в определенных точках. Код Matlab генерирует случайные числа из нормального распределения.

код Matlab, соответствующий коду C является

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))); 

и, соответственно, в С.

Чтобы перевести код с помощью randn на C - к моему знанию нет стандартной функции в C, чтобы генерировать нормально распределенные случайные числа, вам необходимо найти библиотеку, которая включает такую ​​функцию, или создайте ее самостоятельно, начиная с random().

+0

Любая идея реализовать этот код в C, который дает тот же результат, что и для Matlab, потому что я хочу преобразовать этот код matlab в C. – user2828488

+0

@ user2828488: Вам действительно нужен тот же случайный процесс? Для этого потребуется получить C-код произвольного генератора matlab (который доступен), установить те же самые семена, реализовать randn так же, как TMW. – Daniel

+0

Да, мне нужен тот же случайный процесс, что и для преобразования кода matlab в C и C, не поддерживает функцию randn. Вы можете поделиться этим методом здесь? – user2828488

Смежные вопросы