matlab 代码 java 翻译 monte carlo 模拟
matlab code to java translation for monte carlo simulation
我正在尝试通过 MATLAB 代码将 monte carlo 模拟编码为 java。 MATLAB 答案与 java 代码的答案不匹配。我应该得到大约 34%,但得到了 29%,我试图解决的问题的其他变体导致与我想得到的结果相差 -5%。我编码有误吗?还是 java 中的随机 class 对于 monte carlo 模拟卡来说不够随机?
MATLAB 代码:
01 meetings = 0;
02 for loop = 1:1000000
03 L = 30*rand;
04 B = 30*rand;
05 if B<L & L<B+7
06 meetings = meetings +1;
07 elseif L<B & L>B-5
08 meetings = meetings +1;
09 end
10 end
11 meetings/1000000
java代码:
import java.util.Random;
public class Malt {
public static void main(String[] args) {
double meetings = 0;
int l = 0, b = 0;
Random random = new Random();
for(int i = 1; i < 1000000; i++){
l = (int) (random.nextDouble()*30);
b = (int) (random.nextDouble()*30);
if((b<l)&&(l<(b+7)))
meetings = meetings +1;
else if((l<b)&&(l>(b-5)))
meetings = meetings +1;
}
System.out.println(meetings/1000000);
}
}
您的问题是转换为 (int)。这会自动将您的结果四舍五入。如果删除了这些,您将获得与您的 MATLAB 程序完全相同的结果并获得相似的结果(我得到 ~35.8%)。尝试将 l
和 b
值更改为 double
值并从随机分配中删除 (int)
强制转换。
当然,如果你的目的是地板,那么你也需要编辑你的 MATLAB 代码,它可能也会给你 ~29%。
此外,如果您担心 Random
的可靠性(在这里似乎工作正常),您可以尝试 SecureRandom
,它速度较慢但不确定性较低。
我正在尝试通过 MATLAB 代码将 monte carlo 模拟编码为 java。 MATLAB 答案与 java 代码的答案不匹配。我应该得到大约 34%,但得到了 29%,我试图解决的问题的其他变体导致与我想得到的结果相差 -5%。我编码有误吗?还是 java 中的随机 class 对于 monte carlo 模拟卡来说不够随机?
MATLAB 代码:
01 meetings = 0;
02 for loop = 1:1000000
03 L = 30*rand;
04 B = 30*rand;
05 if B<L & L<B+7
06 meetings = meetings +1;
07 elseif L<B & L>B-5
08 meetings = meetings +1;
09 end
10 end
11 meetings/1000000
java代码:
import java.util.Random;
public class Malt {
public static void main(String[] args) {
double meetings = 0;
int l = 0, b = 0;
Random random = new Random();
for(int i = 1; i < 1000000; i++){
l = (int) (random.nextDouble()*30);
b = (int) (random.nextDouble()*30);
if((b<l)&&(l<(b+7)))
meetings = meetings +1;
else if((l<b)&&(l>(b-5)))
meetings = meetings +1;
}
System.out.println(meetings/1000000);
}
}
您的问题是转换为 (int)。这会自动将您的结果四舍五入。如果删除了这些,您将获得与您的 MATLAB 程序完全相同的结果并获得相似的结果(我得到 ~35.8%)。尝试将 l
和 b
值更改为 double
值并从随机分配中删除 (int)
强制转换。
当然,如果你的目的是地板,那么你也需要编辑你的 MATLAB 代码,它可能也会给你 ~29%。
此外,如果您担心 Random
的可靠性(在这里似乎工作正常),您可以尝试 SecureRandom
,它速度较慢但不确定性较低。