|
gyrater
|
|
Halfling Ranger
|
|
|
|
|
|
|
Рег.: 25.10.2002
|
|
Сообщений: 2439
|
|
|
|
Рейтинг: 55
|
|
генератор случайных чисел в matlab
29.08.2009 18:19
|
|
|
Есть проблема с кособокостью rand. Генерю числа от 0 до 1, тем, что меньше, например, 0+0.03 присваиваю -1, тем, что больше 1-0.03 присваиваю 1, остальным 0. Матожидание в подавляющем большинстве случаев больше 0. Нужно более хорошо равномерно распределенные случайные числа. Что можете посоветовать?
Нашла в инете, что генератор случайных числе есть в Simulink'е, но у меня урезанный матлаб без симулинка. Если у кого есть Simulink, попробуйте его генератор, плз, он тоже косой или получше?
Редактировал gyrater (29.08.2009 18:35)
|
Увидеть Denа - к деньгам, счастью и большой удаче... ((c)DizzyDen 22.01.2005 14:47) |
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
29.08.2009 18:47
|
|
|
Quote:
Генерю числа от 0 до 1, тем, что меньше, например, 0+0.03 присваиваю -1, тем, что больше 1-0.03 присваиваю 1, остальным 0. Матожидание в подавляющем большинстве случаев больше 0.
А почему должно быть по-другому-то?не заметил, что "остальным 0" 
Редактировал unkulunkulu (29.08.2009 18:59)
|
|
|
_Ss_
|
|
|
|
|
|
|
|
|
Рег.: 21.11.2003
|
|
Сообщений: 4145
|
|
|
|
Рейтинг: 4662
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
29.08.2009 18:55
|
|
|
Может, дело в том, что отрезки для -1 и 1 не равны? Ну, 1 - (1 - 0.03) не равно 0.03.
Если дело все же в генераторе, а достаточно симметричного, то юзай rnd(0, 1) - rnd(0, 1) (или как они там вызываются)
|
Если сказанное мной может быть понято двояко, и первый вариант тебя расстраивает, я имел ввиду второй |
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
29.08.2009 19:00
|
|
|
Ну а вообще да, дело может быть в том, что 0.03 не представимо в двоичной системе точно, отсюда ошибки округления и все такое.
|
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
29.08.2009 20:14
|
|
|
Ты лучше скажи каким типом данных считаешь, какой размер выборки. Вот.
|
|
|
gyrater
|
|
Halfling Ranger
|
|
|
|
|
|
|
Рег.: 25.10.2002
|
|
Сообщений: 2439
|
|
|
|
Рейтинг: 55
|
|
|
Туплю :-(. Это гениально, что отрезок 0..0.03 не равно отрезок 1-0.03..1. Теперь буду думать как это проверить и читать, как сравнить числа напрямую в двоичной записи.
сравниваю числа в десятичной записи, выборка 1000 случайных чисел.
вот такая прога
n=1000; r = rand(n,1);
for index=1:n if r(index) < 0.03125 res(index)=-1; elseif r(index) >= 0.03125 && r(index) < 0.96875 res(index)=0; elseif r(index) >= 0.96875 res(index)=1; end end
|
Увидеть Denа - к деньгам, счастью и большой удаче... ((c)DizzyDen 22.01.2005 14:47) |
|
|
abv
|
|
|
|
|
|
|
|
|
Рег.: 21.09.2007
|
|
Сообщений: 6924
|
|
|
|
Рейтинг: 6747
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
29.08.2009 21:48
|
|
|
и на сколько большое отклонение от 0 получаешь?
|
|
|
|
KOHTPA
|
|
Carpal Tunnel
|
|
|
|
|
|
|
Рег.: 22.01.2003
|
|
Сообщений: 33647
|
|
|
|
Рейтинг: 2374
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
29.08.2009 23:47
|
|
|
> Есть проблема с кособокостью rand. > Нужно более хорошо равномерно распределенные случайные числа. > Что можете посоветовать?
Прочитать, какой алгоритм встроен, и больше никогда его не использовать. Написать МТ19937 или задействовать уже готовый, который можно взять откуда угодно, поскольку алгоритм довольно популярен. Если МТ19937 слишком медленный, подсмотреть в GSL более подходящий.
--- "Лучше жалеть о сделанном, чем об упущенной возможности."
|
|
|
FuckUpper
|
|
enthusiast
|
|
|
|
|
|
|
Рег.: 03.09.2004
|
|
Сообщений: 356
|
|
Из: Б-107
|
|
Рейтинг: 285
|
|
Re: генератор случайных чисел в matlab
[re: gyrater]
30.08.2009 18:17
|
|
|
Может, выборка маловата? code:
>> a = rand(10000000,1);
>> a(a<0.03)=-1;
>> a(a>1-0.03)=1;
>> a(abs(a)<0.99)=0;
>> mean(a)
ans =
-4.5100e-005
А вообще, центральная предельная теорема работает для этого случая "на ура".
|
|
|
unkulunkulu
|
|
unkulunkulunkulu
|
|
|
|
|
|
|
Рег.: 12.11.2006
|
|
Сообщений: 18453
|
|
Из: 13000
|
|
Рейтинг: 11759
|
|
Re: генератор случайных чисел в matlab
[re: FuckUpper]
30.08.2009 18:20
|
|
|
|
|
|
FuckUpper
|
|
enthusiast
|
|
|
|
|
|
|
Рег.: 03.09.2004
|
|
Сообщений: 356
|
|
Из: Б-107
|
|
Рейтинг: 285
|
|
|
code:
for i = 1:1000
a = rand(1000000,1);
a(a<0.03)=-1;
a(a>1-0.03)=1;
a(abs(a)<0.99)=0;
b(i) = mean(a);
end
length(find(b>0))
ans =
453
code:
>> hist(b,30)

|
|