ОК, в Википедии мы читаем, что
n-сфера радиуса r определяется как множество точек в (n + 1) -мерном евклидовом пространстве, котороенаходятся на расстоянии r от центральной точки, где радиус r может быть любым положительным действительным числом
, поэтому ваша задача становится одной из генерации 3 ^ 10 векторов в 7-пространстве.Не теряя ничего, мы можем позволить r = 1
.Подход будет состоять в том, чтобы генерировать случайные векторы в 7-пространстве и затем нормализовать их до единичной длины обычным способом
Вот код, который я спешно выбил, я знаю, что я должен был векторизовать вещи, а не писать циклыЯ оставлю это ОП.Код не должен нуждаться в каких-либо объяснениях.
pointset = rand(3^10,7);
normset = zeros(3^10,1);
for ix = 1:3^10
normset(ix) = norm(pointset(ix,:));
end
for ix = 1:3^10
pointset(ix,:) = pointset(ix,:)/normset(ix);
end
Это, конечно, зависит от того, как PRNG компании Matlab создает равномерно распределенные числа для создания равномерно распределенной сети на 8-сфере.