随机数生成中的Python代码翻译问题或语言差异
我是Python新手,没有使用QBasic的经验。我用Python运行了一个模拟,得出了理论上错误的值。然后我用QBasic运行它,得出了理论上的预测值随机数生成中的Python代码翻译问题或语言差异,python,simulation,qbasic,Python,Simulation,Qbasic,我是Python新手,没有使用QBasic的经验。我用Python运行了一个模拟,得出了理论上错误的值。然后我用QBasic运行它,得出了理论上的预测值 下面是测试用例。我只计算了概率P(0.9您的Python代码是完全错误的。我认为您希望它执行以下操作: 取两个数组,a和b,每个数组包含由某个随机函数生成的10000个数字。(等效地,每个数组包含来自给定分布数据的10000个样本。) 将这些值配对成10000对,每对取a中的一个元素和b中的一个元素 取每对的总和 数一数这10000对总和中有
下面是测试用例。我只计算了概率P(0.9
您的Python代码是完全错误的。我认为您希望它执行以下操作:
- 取两个数组,a和b,每个数组包含由某个随机函数生成的10000个数字。(等效地,每个数组包含来自给定分布数据的10000个样本。)
- 将这些值配对成10000对,每对取a中的一个元素和b中的一个元素
- 取每对的总和
- 数一数这10000对总和中有多少在0.9到1.8之间
- 将上述计数除以10000,得到从这些分布中提取的任何给定数据对总和在0.9到1.8之间的概率,并打印该概率
- 将两个10000元素数组连接起来,形成其元素的20000元素数组
- 取这个新的20000个元素数组中大于0.9的所有元素之和
- 把总数除以10000,然后打印出来
def sim(x_sample, y_sample):
count = 0
for i in range(10000):
if 0.9 <= x_sample[i] + y_sample[i] <= 1.8:
count += 1
probability = count/10000.0
print("P(a < x <= b) : {0:8.4f}".format(probability))
def sim卡(x_样本,y_样本):
计数=0
对于范围(10000)内的i:
如果0.9您的Python代码完全错误。我认为您希望它执行以下操作:
- 取两个数组,a和b,每个数组包含由某个随机函数生成的10000个数字。(等效地,每个数组包含来自给定分布数据的10000个样本。)
- 将这些值配对成10000对,每对取a中的一个元素和b中的一个元素
- 取每对的总和
- 数一数这10000对总和中有多少在0.9到1.8之间
- 将上述计数除以10000,得到从这些分布中提取的任何给定数据对总和在0.9到1.8之间的概率,并打印该概率
然而,您的sim卡(a、b)功能正在做一些完全不同的事情。基本上,您实际做的是:
- 将两个10000元素数组连接起来,形成其元素的20000元素数组
- 取这个新的20000个元素数组中大于0.9的所有元素之和
- 把总数除以10000,然后打印出来
此算法与Q-Basic代码中的任何内容都不相似
如果我正确理解了您的问题,我认为您希望sim卡功能如下:
def sim(x_sample, y_sample):
count = 0
for i in range(10000):
if 0.9 <= x_sample[i] + y_sample[i] <= 1.8:
count += 1
probability = count/10000.0
print("P(a < x <= b) : {0:8.4f}".format(probability))
def sim卡(x_样本,y_样本):
计数=0
对于范围(10000)内的i:
如果0.9,请不要一问两个问题。如果你对Python有具体问题,请问Python问题。如果你对QBasic有具体问题,请问QBasic问题。你用什么值调用sim(a,b)
?你的代码从来不会这样。请不要一问两个问题。如果你对Python有具体问题,请问Python问题。如果你对QBasic有具体问题,请问QBasic问题。你用什么值调用sim(a,b)
?你的代码永远不会。谢谢!!很好的解释。如果可以的话,我会竖起两个大拇指。buggered或其他任何轻描淡写的说法。第四个例子是这样的:print“case 4:”sim([0.25 if random()<0.8 else 1.5表示范围内的r(10000)],[0.25 if random()<0.8 else 1.5表示范围内的r(10000)])所以我对0.9,1.8进行排序,然后进行求和。它应该是一个求和()然后再对0.9,1.8进行排序。谢谢你!!很好的解释。如果可以的话,我会竖起两个大拇指。buggered或者其他什么都是轻描淡写的。第四个案例看起来像这样:打印“案例4:[0.25 if random()<0.8 else 1.5 for r in random(10000)],[0.25 if random()<0.8或者1.5表示范围(10000)]内的r,所以我对0.9,1.8进行排序,然后求和。它应该是一个sum(),然后对0.9,1.8进行排序。
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
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
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
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
def sim(x_sample, y_sample):
count = 0
for i in range(10000):
if 0.9 <= x_sample[i] + y_sample[i] <= 1.8:
count += 1
probability = count/10000.0
print("P(a < x <= b) : {0:8.4f}".format(probability))
>>> from random import random
>>>
>>> sim([random() for i in range(10000)],
... [random() for i in range(10000)])
P(a < x <= b) : 0.5746
>>>
... from math import log
>>>
>>> sim([-0.5*log(1-random()) for i in range(10000)],
... [-0.5*log(1-random()) for i in range(10000)])
P(a < x <= b) : 0.3405
>>>
... sim([random() for i in range(10000)],
... [2*random() for i in range(10000)])
P(a < x <= b) : 0.4479