2015-04-01 78 views
2

我想生成數字(隨機),使得數字遵循給定均值和方差的正態分佈。我怎樣才能做到這一點?生成Java中遵循正態分佈的數字

如果您可以在Java環境中使用它會更好。 有人可能會在這些答案中尋找幫助:但它們並不精確。 Generate random numbers following a normal distribution in C/C++

+0

有一些答案的鏈接的問題的實際代碼,加上一個維基百科的鏈接帶有實際代碼的頁面。由於代碼的工作原理和轉換爲Java的微不足道,我沒有看到什麼是「不精確」。 – rici 2015-04-01 15:59:42

+0

[在C/C++中以正態分佈生成隨機數]可能的重複(http://stackoverflow.com/questions/2325472/generate-random-numbers-follow-a-normal-distribution-in-cc) – rici 2015-04-01 16:00:08

+0

使用Java的內建'nextGaussian()'(來自'java.util.Random'),將其乘以方差的平方根並添加平均值。 – pjs 2015-04-01 17:37:44

回答

0

無恥一派,摘自:http://www.javapractices.com/topic/TopicAction.do?Id=62

的「魔力」 happend內Random.nextGaussian()

import java.util.Random; 

/** 
Generate pseudo-random floating point values, with an 
approximately Gaussian (normal) distribution. 

Many physical measurements have an approximately Gaussian 
distribution; this provides a way of simulating such values. 
*/ 
public final class RandomGaussian { 

    public static void main(String... aArgs){ 
    RandomGaussian gaussian = new RandomGaussian(); 
    double MEAN = 100.0f; 
    double VARIANCE = 5.0f; 
    for (int idx = 1; idx <= 10; ++idx){ 
     log("Generated : " + gaussian.getGaussian(MEAN, VARIANCE)); 
    } 
    } 

    private Random fRandom = new Random(); 

    private double getGaussian(double aMean, double aVariance){ 
    return aMean + fRandom.nextGaussian() * aVariance; 
    } 

    private static void log(Object aMsg){ 
    System.out.println(String.valueOf(aMsg)); 
    } 
} 
+0

謝謝。這應該工作。你能告訴我爲什麼有差異乘法而不是行中的根(方差):return aMean + fRandom.nextGaussian()* aVariance; – Manoj 2015-04-01 11:41:55

+1

@Manoj因爲片段的作者從未計算出樣本方差? – 2015-04-01 11:55:47

+0

我想這裏的差異是指標準差。 – Manoj 2015-04-01 12:50:04

相關問題