Java - 实现产生正态分布的数字的随机向量生成器

问题描述:

我试图在Java中实现一个随机向量生成器,它生成正态分布的double值作为蒙特卡洛模拟的一部分。到目前为止,我的方法是编写一个类,GaussianRandomNumberGenerator,它使用apache commoms库来构建其具有2个键输入,矢量长度和一个RandomGenerator的同名对象。Java - 实现产生正态分布的数字的随机向量生成器

package mcPkg; 

import org.apache.commons.math3.random.RandomGenerator; 

public abstract class GaussianRandomNumberGenerator implements RandomVectorGenerator{ 

    private int N; 
    private RandomGenerator rg; 

    public GaussianRandomNumberGenerator(int N, RandomGenerator rg){ 
     this.N = N; 
     this.rg = rg; 
    } 

    public double nextNormalizedDouble() { 
     return rg.nextGaussian(); 
    } 

    @Override 
    public double[] getVector() { 
     double[] vector = new double[N]; 
     for (int i = 0; i < vector.length; ++i){ 
      vector[i] = nextNormalizedDouble(); 
     } 
     return vector; 
    } 

} 

类应该然后利用一个接口,RandomVectorGenerator,在主程序(我将需要与其他类的其他任务的接口):

package mcPkg; 

public interface RandomVectorGenerator { 

    public double[] getVector(); 

} 

不幸的是,当我尝试在主程序中运行测试,出现错误提示:

无法实例化类型GaussianRandomNumberGenerator

与问候局部变量grng(见下面的代码):

package mcPkg; 

import org.apache.commons.math3.random.GaussianRandomGenerator; 
import org.apache.commons.math3.random.RandomGenerator; 

import mcPkg.GaussianRandomNumberGenerator; 
import mcPkg.RandomVectorGenerator; 

public class MonteCarloTest { 

    public static void main(String[] args) { 
     RandomGenerator rg; 
     GaussianRandomNumberGenerator grng = new GaussianRandomNumberGenerator(10, rg); 
     grng.getVector(); 
    } 

} 

上为什么发生这种情况,以及建议为有效解决这一问题的任何见解,将不胜感激。提前致谢!

我认为abstract关键字是问题所在。我建议将它从GaussianRandomNumberGenerator类中删除。

+0

谢谢!它像一个魅力。对Java的新手状态进行另一个监督。非常感谢您的协助。 – user2736224 2014-10-19 00:00:31

+0

但是RandomGenerator没有正确初始化?怎么做? – user77005 2016-01-20 11:06:02