3
我用Monte Carlo方法「找到Pi」,但答案不正確。該oryginal代碼爲:楓葉:RNG不是隨機的
RandomTools[MersenneTwister]: with(Statistics):
tries := 10000:
s := 0;
for i to tries do
if GenerateFloat()^2+GenerateFloat()^2 < 1 then s := s+1 end if;
end do:
evalf(4*s/tries)
它給了和身邊的答案2.8-2.85
當我更改代碼以
s := 0;
x := Array([seq(GenerateFloat(), i = 1 .. tries)]);
y := Array([seq(GenerateFloat(), i = 1 .. tries)]);
for i to tries do
if x[i]^2+y[i]^2 < 1 then s := s+1 end if;
end do:
evalf(4*s/tries)
那麼答案是正確的。我不知道爲什麼我不能在「for」循環中生成數字。
我已經發現它的含義是相同的,但方差是不同的。 爲:
tries := 100000;
A := Array([seq(GenerateFloat(), i = 1 .. 2*tries)]);
s1 := Array([seq(A[i]^2+A[tries+i]^2, i = 1 .. tries)]);
Mean(s1);
Variance(s1);
s2 := Array([seq(GenerateFloat()^2+GenerateFloat()^2, i = 1 .. tries)]);
Mean(s2);
Variance(s2);
輸出爲:
0.6702112097021581
0.17845439723457215
0.664707674135025
0.35463131700965245
這有什麼錯呢? GenerateFloat()應儘可能一致。
非常感謝。不能upvote - 低代表,但謝謝。它的工作原理有點愚蠢...... – 2015-03-03 18:36:56