2017-02-15 3 views
0

J'essaie de générer 10 000 points à partir de la distribution uniforme sur le disque de l'unité et tracer ces points.Points uniformément répartis sur le disque unité (2D)

La méthode que j'utilise comporte trois étapes. La première étape génère l'amplitude du point x. Ce point a un cdf F (x) = x^2 min (x) = 0 et max (x) = 1. La seconde étape consiste à générer un vecteur bidimensionnel (que j'appellerai y) de la distribution normale multivariée avec mu étant le vecteur zéro et sigma étant la matrice d'identité 2x2 - MVN (0, I). Enfin, je normalise le vecteur y pour avoir la longueur x. J'ai essayé de coder la solution dans R mais je ne pense pas que ma réponse soit correcte. J'apprécierais vraiment si je pouvais être pointé dans la bonne direction.

u = runif(10000) 
x = u^2 
y = mvrnorm(10000, mu=rep(0,2), Sigma=diag(2)) 
y_norm = (x*y)/sqrt(sum(y^2)) 
plot(y_norm, asp = 1) 

J'ai utilisé le package MASS pour mvrnorm. Aussi j'ai inclus le complot que j'ai fini avec:

Répondre

1

Vous devez calculer la longueur de chacune des lignes dans votre matrice y, vous obtenez la racine carrée de la somme de tous les nombres dans y, qui est juste l'échelle de votre multinomial par une constante. En outre, vous avez besoin x être sqrt(u) plutôt que u^2 - ce code normalise chaque ligne par sa longueur et les utilisateurs sqrt(u) mise à l'échelle et il semble agréable et uniforme:

plot(sqrt(u)*y/sqrt(y[,1]^2+y[,2]^2)) 

Il existe de meilleures façons de faire des points uniformes sur un disque, à moins que ce ne soit juste un exercice pour le faire de cette façon ...

+1

C'est un exercice de faire comme ça, je réalise qu'il y a des solutions beaucoup plus faciles. La raison pour laquelle je le fais de cette façon est que je peux éventuellement appliquer la technique à n dimensions. Aussi, merci pour la réponse. – Chris95

+0

J'ai pensé que ce serait une bonne idée de le mentionner au cas où quelqu'un arriverait à la recherche d'un bon moyen de générer des points uniformes sur un disque! – Spacedman

+0

Question de suivi - Si je devais le faire pour n dimensions serait-ce la méthode la plus efficace? – Chris95