Генерация случайных точек на поверхности n-мерного тора

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

x = (c + a * cos(v)) * cos(u)
y = (c + a * cos(v)) * sin(u)
z = a * sin(v)

u, v ∈ [0, 2 * pi); c, a > 0.

Теперь мой вопрос: как расширить эту формулу до n измерений. Любая помощь по этому вопросу будет высоко оценена.


person Tomasz Nguyen    schedule 10.10.2014    source источник


Ответы (3)


Я предполагаю, что вы можете сделать это рекурсивно. Начните с полной ортонормированной основы вашего векторного пространства, и пусть текущее местоположение будет началом координат. На каждом шаге выбираем точку на плоскости, натянутой на первые два вектора координат, т.е. возьмем w1 = cos(t)*v1 + sin(t)*v2. Сдвиньте остальные базисные векторы, т. е. w2 = v3, w3 = v4, …. Также сделайте шаг от вашего текущего положения в направлении w1 с радиусом r1, выбранным впереди. Если у вас остался только один базисный вектор, то текущая точка является точкой на n-мерном торе самого внешнего рекурсивного вызова.

Обратите внимание, что, хотя описанное выше может быть использовано для случайного выбора точек, оно не будет выбирать их равномерно. Вероятно, это был бы гораздо более сложный вопрос, и вам определенно следует спросить о его математике на Math SE или, возможно, на Cross Validated (Statistics SE), чтобы получить правильные математические данные, прежде чем беспокоиться о реализации.

person MvG    schedule 10.10.2014

N-тор (n — размерность поверхности тора; поэтому бублик или бублик — это 2-тор, а не 3-тор) — это гладкое отображение n-прямоугольника. Один из способов приблизиться к этому — сгенерировать точки на прямоугольнике, а затем отобразить их на торе. Помимо проблемы выяснить, как отобразить прямоугольник на тор (я не знаю этого навскидку), есть проблема, заключающаяся в том, что результирующее распределение точек на торе неравномерно, даже если распределение точек равномерно на прямоугольнике. Но должен быть способ настроить распределение на прямоугольнике, чтобы сделать его равномерным на торе.

person Robert Dodier    schedule 10.10.2014

Простое равномерное создание u и v не обязательно приведет к однородной выборке с поверхности тора. Необходим дополнительный шаг.

Дж. Ф. Уильямсон, Случайный выбор точек, распределенных по криволинейным поверхностям, Physics in Medicine & Biology 32(10), 1987, описывает общий метод выбора равномерно случайной точки на параметрической поверхности. Это метод принятия/отклонения, который принимает или отклоняет каждую точку-кандидата в зависимости от ее коэффициента растяжения (нормы градиента). Чтобы использовать этот метод для параметрической поверхности, необходимо знать несколько вещей о поверхности, а именно:

  • x(u, v), y(u, v) и z(u, v), которые являются функциями, которые генерируют трехмерные координаты из двухмерных координат u и v,

  • Диапазоны u и v,

  • g(point), норма градиента (коэффициент растяжения) в каждой точке поверхности, и

  • gmax, максимальное значение g для всей поверхности.

Для трехмерного тора с параметризацией, которую вы указали в своем вопросе, g и gmax следующие:

  • g(u, v) = a * (c + cos(v) * a).
  • gmax = a * (a + c).

Алгоритм создания однородной случайной точки на поверхности трехмерного тора с радиусом тора c и радиусом трубы a будет следующим (где RNDEXCRANGE(x,y) возвращает число из [x,y) равномерно случайным образом, а RNDRANGE(x,y) возвращает число из [x,y] равномерно при случайный):

// Maximum stretch factor for torus
gmax = a * (a + c)
while true
 u = RNDEXCRANGE(0, pi * 2)
 v = RNDEXCRANGE(0, pi * 2)
 x = cos(u)*(c+cos(v)*a)
 y = sin(u)*(c+cos(v)*a)
 z = sin(v)*a
 // Norm of gradient (stretch factor)
 g = a*abs(c+cos(v)*a)
 if g >= RNDRANGE(0, gmax)
    // Accept the point
    return [x, y, z]
 end
end

Если у вас есть n-мерные формулы генерации тора, аналогичный подход можно использовать для создания однородных случайных точек на этом торе (примите точку-кандидата, если норма градиента равна или превышает случайное число в [0, gmax), где gmax максимальная норма градиента).

person Peter O.    schedule 16.04.2019