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

标签 java random distribution apache-commons

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

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;
    }

}

然后,该类应该在主程序中使用一个接口(interface),RandomVectorGenerator(我需要该接口(interface)来执行其他类的其他任务):

package mcPkg;

public interface RandomVectorGenerator {

    public double[] getVector();

}

不幸的是,当我尝试在主程序中运行测试时,我收到一条错误消息:

Cannot instantiate the type 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 类中删除。

关于Java - 实现产生正态分布数字的随机 vector 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439045/

相关文章:

python - 在 numpy 数组中查找局部最大值

java - 如何强制将对象放入处理程序类中

linux - 尽早阅读/dev/urandom

php - 随机字符串生成器 PHP

c++ - 我可以像在 C++ 中那样在 R 中拥有多个独立的随机数生成器吗?

ASP.NET Web 应用程序分发

java - 如何在SWT中在Canvas周围绘制边框

java - 我在更改 DESFire 主 key 时收到 0x1E 错误 (INTEGRITY_ERROR)。我的错误是什么?我该如何解决?

java - 无法将 java.lang.String 类型的属性值转换为属性 Phone 所需的 long 类型;嵌套的异常

python - 生成总和为 M 的 N 个均匀随机数