私はPythonを初めて使用し、QBasicの経験がありません。理論的に間違った値を思いついたPythonでシミュレーションを実行していました。次に、それをQBasicで実行し、理論的に予測された値を考え出しました。
これがテストケースです。確率P(0.9 <%Y <= 1.8)のみをカウントしているので、カウントはこれらの値の範囲内に収まる必要があります。1-random.random()はその場合のみでしたが、すべての場合にそれを使用しようとすると、間違った値が表示されました。これが理論上の結果であり、それがどのように異なるかを見ることができます。
y〜u(0,1)= 0.575
y〜exp(2)= 0.3371
x1〜u(0,1)x2〜u(0,2)= 0.4475
P(y = 0.25)= 0.8 P(y = 1.5)= 0.2 = 0.32
Pythonでは、シミュレーションコードは次のとおりです。
def test():
x1,x2,c = 0.0,0.0,0.0
for i in range(10000):
if random.random()< 0.8:
x1 += 0.25
else:
x2 += 1.5
y = x1 + x2
if y>0.9 and y<=1.8:
c = c + 1
return x1,x2,c
print "test: ",test()
def sim(a,b):
#pyab1 = sum([a for a in a if a>0.9 and a<=1.8])/10000
#pyab2 = sum([b for b in b if b>0.9 and b<=1.8])/10000
#print "*****",float(pyab1+pyab2)
#print a+b
#array1 = [[a],[b]]
array1 = a+b
#array1.extend(a)
#array1.extend(b)
#c = 0
#for y in array1:
#if y>0.9 and y<=1.8:
#c = c + 1
pyab = sum([y for y in array1 if y>0.9 and y<=1.8])/10000
print("P(a < x <= b) : {0:8.4f}".format(pyab))
これがPythonの出力とそれに続くはずの値ですが、これは結果がどれだけ離れているかを示しています。
case 1: P(a < x <= b) : 0.7169 #should be 0.575
case 2: P(a < x <= b) : 0.4282 #should be 0.3371
case 3: P(a < x <= b) : 0.5966 #should be 0.4475
case 4: P(a < x <= b) : 0.5595 #should be 0.32
QBasicのシミュレーションコードは次のとおりです。
ケース1:
RANDOMIZE
FOR i = 1 TO 10000
X1 = RND(1)
X2 = RND(1)
Y = X1+X2
IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i
PRINT C/10000
ケース2:
RANDOMIZE
FOR i = 1 TO 10000
X1 = (-0.5)*(LOG(1-RND(1)))
X2 = (-0.5)*(LOG(1-RND(1)))
Y = X1+X2
IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i
PRINT C/10000
ケース3:
RANDOMIZE
FOR i = 1 TO 10000
X1 = RND(1)
X2 = RND(1)*2
Y = X1+X2
IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i
PRINT C/10000
ケース4:
RANDOMIZE
FOR i = 1 TO 10000
X14 = RND(1)
X24 = RND(1)
IF (X14<0.8) THEN X41=0.25 ELSE X41=1.5
IF (X24<0.8) THEN X42=0.25 ELSE X42=1.5
Y = X1+X2
IF (Y>0.9) AND (Y<=1.8) THEN C=C+1
NEXT i
PRINT C/10000
これがQBasicの出力で、これが実際に正しい結果をどのように得ているかを示しています。
case 1: P(a < x <= b) : 0.5715
case 2: P(a < x <= b) : 0.3371
case 3: P(a < x <= b) : 0.4413
case 4: P(a < x <= b) : 0.3213
上記のコードはすべて、エラーなしで機能します。値を取得するために使用されるアルゴリズムに違いは見られません。PythonがQBasicとは異なる数値を生成するかどうか、そしてそれがこの動作の背後にある理由を説明するかどうかはわかりません。
私はこれらの言語の両方に不慣れですが、QBasicは非常に原始的であり、Pythonが正しい答えを取得し、QBasicが間違った答えを取得する可能性が高いようです。しかし、逆のことが起こっています。コードの違いに関係しているようには見えません。翻訳では、彼らは両方とも同じことを言っているようです。
彼らが2つの異なる結果をもたらす理由に興味があります。Pythonが間違った答えを出し、QBasicが正しい答えを出している理由にもっと興味があります。