我正在尝试在 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/