2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: генератор случайных чисел
Сообщение11.10.2011, 11:36 


17/05/11
158
AndreyL в сообщении #491334 писал(а):
Друзья!
Понадобился генератор случайного вектора размерности $n$. Каждая $i$-я компонента вектора $y(i)$ подчиняется равномерному распределению в диапазоне от $LB(i)$ до $UB(i)$, а сумма всех компонент должна быть равна $A$: $\sum _{i=1}^n y(i)=A$. Как это можно реализовать?


у iostream есть встроенные ф-ии забивки векторов, насколько я знаю

 Профиль  
                  
 
 Re: генератор случайных чисел
Сообщение11.10.2011, 12:14 


27/10/09
600
Пока реализовал самый простой вариант: генерировать случайный вектор внутри гиперкуба, большего чем заданные границы. Далее вектор нормируется на $A$ и проверяется на выход за границы (уже свои $UB(i)$ и $LB(i)$), если выходит за границы, то генерируется другой вектор. Нижняя и верхняя границы каждого компонента генерируемого вектора определяются как $LB_z(i)=LB(i)-k(UB(i)-LB(i))$ и $UB_z(i)=UB(i)+k(UB(i)-LB(i))$ соответственно, где $k$-положительная константа. Чем больше $k$, тем ближе распределение к равномерному, тем медленнее сечет, поскольку чаще будет промах.
Способ, конечно, медленный, но в рамках реальной задачи скорость вполне приемлема - это вектор потом подается на вход функции, которая будет его мусолить секунды три.
Всем огромное спасибо за обсуждение!

 Профиль  
                  
 
 Re: генератор случайных чисел
Сообщение11.10.2011, 16:03 


23/12/07
1757
Не очевидно, почему в вашем варианте будет равномерная распределенность на сечении гиперплоскостью...Вы бы все-таки, может, попробовали перейти к этой самой гиперплоскости и там проделать аналогичные манипуляции - заключить сечение в "гипер-плоский прямоугольник", после чего равномерно кидать в него точки, и отбирать те из них, которые попадают в заданную плоскую фигуру.
Например, для трехмерного случая можно в качестве подходящего ортогонального преобразования координат рассмотреть:
\begin{align*}
x_1 &= \frac{1}{\sqrt{6}}x_1' - \frac{1}{\sqrt{2}}x_2' + \frac{1}{\sqrt{3}}x_3'\\
x_2 &= \frac{1}{\sqrt{6}}x_1' + \frac{1}{\sqrt{2}}x_2' + \frac{1}{\sqrt{3}}x_3'\\
x_3 &= -\frac{2}{\sqrt{6}}x_1' + \frac{1}{\sqrt{3}}x_3'. 
\end{align*}
В штрихованной системе координат уравнение гиперплоскости принимает вид $x_3' = A/\sqrt{3}$. Соответственно, неравенства, задающие сечение параллелепипеда $[a_1,b_1]\times [a_2,b_2] \times [a_3,b_3]$ гиперплоскостью примут вид:
\begin{align*}
a_1 &\leq \frac{1}{\sqrt{6}}x_1'  -   \frac{1}{\sqrt{2}}x_2' +  \frac{1}{3}A \leq b_1\\
a_2 &\leq \frac{1}{\sqrt{6}}x_1'  +   \frac{1}{\sqrt{2}}x_2' +\frac{1}{3} A \leq b_2\\
a_3 &\leq -\frac{2}{\sqrt{6}}x_1' +  \frac{1}{3}A\leq b_2.
\end{align*}
Ну и все. Свели задачу к плоской. Достаточно теперь сгенерировать равномерно распределенные в этом сечении точки $ (x_1',x_2')$, например, тем же методом исключения (методом режекции)[заключив область в прямоугольник, и выбирая из равномерно набрасываемых в него точек те из них, которые попадают в нужную область], после чего вернуться к первоначальным координатам.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group