由折断的棒形成多边形的蒙特卡洛模拟

问题描述

给定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 (将#修改为@)