2009-06-10 17 views
6

eşit olmayan rasgele sayı üretmenin herhangi bir yolunu söyleyebilir misiniz?
Java kullanıyorum ama kod örnekleri ne istersen olabilir. Bir yol, iki eşit rastgele sayıyı birbirine ekleyerek (yani, 2 zar), çarpık bir dağılım oluşturmaktır.Düzgün olmayan rasgele sayıların üretilmesi

+0

İstediğiniz dağıtıma bağlıdır. –

cevap

6

Sapmaların hangi dağılımını istiyorsunuz?

Her zaman işe yarayan, ancak her zaman en verimli olan bir teknik. Kümülatif dağılım işlevi P (x), değerlerin x değerinin altına düştüğü süreyi verir. Böylece mümkün olan en düşük x değerinde P (x) = 0 ve olası en yüksek x değerinde P (x) = 1. Her dağılımın, P (x) 'in 0'dan 1'e yükseldiği şekilde, dağılımın tüm özelliklerini kodlayan eşsiz bir CDF vardır. Eğer y, [0,1] aralığında bir tekdüze sapma ise, o zaman x, P'yi tatmin eder.) = y dağıtımınıza göre dağıtılacaktır. Bu çalışmayı rahatlatmak için, dağıtımınız için P (x) 'in tersini hesaplamanın bir yoluna ihtiyacınız var.

Meta.Numerics kütüphanesi tanımlar yaygın olarak kullanılan distrubtions çok sayıda (örneğin normal, lognormal, üstel, ki vb kare) ve CDF (Distribution.LeftProbability) ve ters CDF işlem fonksiyonları vardır (Distribution.InverseLeftProbability) her biri için.

Özel dağıtımlar için hızlı olan özel teknikler için, örn. Normal dağıtılmış sapmalar için Box-Muller tekniği, Sayısal Recipies kitabına bakınız.

+0

Sadece farklı dağıtımlarda sayı üretmenin yollarını aradığım farketmez. Sanırım bunu çok düşünmemiştim. Daha fazla okumaya ihtiyacım var gibi geliyor, bahsettiğin kitap bu mu? Sayısal Yemek Tarifleri 3rd Edition: Bilimsel Hesaplama Sanatı –

+0

Evet, bu kitap. Bu sayısal hesaplama için standart bir giriş, ama para ve çaba için büyük bir yatırım. Eğer sadece lanet olasılığını istiyorsan, bir kütüphaneye sataşırım. Bahsettiğim birini kullanarak şu kadar basit: Rastgele rng = new Random (1); Dağılım dist = new NormalDistribution (1.0,2.0); çift x = dist.InverseLeftProbability (rng.NextDouble()); –

+0

harika, bu kesinlikle emin olmak isterim. Kitabı kontrol etmeyi planlıyorum. Çok teşekkür ederim. –

10

Düzgün olarak dağıtılmış rasgele sayılar oluşturmayı deneyin ve ardından her biri için ters olmayan tekdüze olmayan cumulative distribution function'u uygulayın.

+2

+1 Bunu yapmanın yolu budur. – ralphtheninja

+0

Yanlış, dağıtım işlevinizi tersine çevirmelisiniz. Kare dağılımı istiyorsanız, rastgele sayıların kareköklerini almalısınız. – glmxndr

+0

Dağıtım işlevinin uygun inversiyonu uyguladığı varsayımını yapıyorum. Sanırım sorun, kullanılan funcion'a dağıtım türünün terminolojisi ile daha fazla. –

1

Java kullanıyorsanız, benim Uncommons Maths kitaplığım ilginizi çekebilir. Üniforma, Gauss, Poisson, Binomial ve Üstel dağılımlar için rasgele sayılar üretmek için sınıfları içerir. This article, bu dağıtımları nasıl kullanabileceğinizi gösterir.

İlgili konular