问题描述
给定n条破碎的杆,我想进行蒙特卡洛模拟,以发现存在的k条(3
以下代码与k = 3的精确公式一致,但对于k> 3,模拟的输出结果始终比精确公式小,除非我设置k = n(例如,对于k = 4, n = 5,模拟得到的大约为0.828,但是公式给出的是7/8 = 0.875)。
我通过打印完成的验证来检查代码手动执行的操作,它确实在执行我想要的操作。 您是否看到任何可能引起问题的东西?
def broken(k,n,nb_iter): # kgon from n piece broken stick with 3<=k<=n
compteur=0
for i in range(nb_iter): # nbr iterations
L=[0,1] # points (ends)
M=[] # segments
x = np.random.random(n-1) # n-1 points at random
for i in x: # add the points to L
L.append(i)
L.sort()
for i in range(n): # range(n)
M.append(L[i+1]-L[i]) # make segments
M.sort()
for i in range(n-k+1): # inequalities to check
if M[k+i-1] <= sum(M[i:k+i-1]):
compteur=compteur+1
break
return (compteur,compteur/nb_iter)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)