我试图运行此代码来获取图形。在func(paper)下的while循环中,当我将tim> 6设置为“ tim”时,它运行良好。但是,对于较大的“ tim”(即tim> 10),代码会冻结在中间。我将print函数保留在循环的中间,以检查代码是否正在运行,并查看其是否完全冻结。
import matplotlib.pyplot as plt
import math
import random
from scipy.special import erfinv
def func(paper):
tlist = []
lamda = paper[1]
exval = 2
while exval>=2:
tim = paper[0] + math.exp(math.sqrt(2)*erfinv(2
(math.log(exval)/lamda-float(1/2))))
exval = exval + 1
if tim>10:
break
tlist.append(tim)
print('t')
llist = []
for i in range(len(tlist)):
rand_num = random.random()
lamda1 = -math.log(rand_num)*(2-(i+1)/(math.exp(lamda)-1))
llist.append(lamda1)
print('len')
newlist = []
for n in range(0,len(tlist)):
newlist.append([tlist[n],llist[n],lamda])
return newlist
Tree = []
paper = [0,2]
newone = func(paper)
Tree.append(paper)
Tree.extend(newone)
print(Tree)
currentlayer = newone
while True:
print('a')
newlayer = []
for n in range(len(currentlayer)):
print('1')
paper = currentlayer[n]
call = func(paper)
newlayer.extend(call)
print('2')
if len(newlayer)==0:
break
Tree.extend(newlayer)
print(len(Tree))
currentlayer = newlayer
xlist = []
for n in range(len(Tree)):
xlist.append(Tree[n][0])
y = sorted(xlist)
number = []
for n in range(1,1+len(y)):
number.append(n)
plt.plot(y,number,'blue')
plt.yscale('log')
plt.show()
plt.xlabel('Time')
plt.ylabel('Number of papers')