简介

COMSOL二次开发主要在方法编辑器中进行,编程语言为Java。有时需要产生随机数(比如随机生成一些球体),方法编辑器中已经存在Math.random()可直接使用。

但是,对于某些特殊情况,我希望每次运行代码产生的随机数是一样的。比如第一次运行,产生的随机数序列是0.125,0.326,0.332,0.923;我希望第二次运行依然可以产生这个序列0.125,0.326,0.332,0.923。COMSOL的方法编辑器将无法满足这种需求。

接下来,将自己编写一个随机数产生器,程序的开头设置相同的随机种子,那么产生的随机数序列将是可重复的。

代码

第一步

在开发器的“库”中新建一个外部类,填入以下代码

private static final long MULTIPLIER = 25214903917L;

private static final long INCREMENT = 11L;

private static final long MODULUS = (1L<<48);

private static long seed = 12345L;

public static void setSeed(long s) {

seed = s;

}

public static double nextDouble() {

seed = (seed*MULTIPLIER+INCREMENT)%MODULUS;

return ((double) seed/MODULUS)*0.5+0.5;

}

第二步

在方法编辑器中调用所编写的函数

// 生成100个随机数

randomGen.setSeed(12345L);

for (int i = 0; i < 100; i++) {

debugLog(randomGen.nextDouble());

}

运行代码后,即可得到输出的随机数结果

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: