我是 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
案例二:
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 得到错误的答案。但相反的情况正在发生。它似乎与代码中的任何差异无关。在翻译时,他们似乎都在说同样的话。
我对他们给出两种不同结果的原因很感兴趣。我更感兴趣的是为什么 Python 给出了错误的答案而 QBasic 给出了正确的答案。