标记重捕法代码


import random
#种群数量N
N=50000
#标记
mark=1000
#重捕次数
r= 100
#每次重捕的条数
num=1000

fish= range(N) #N条鱼

#标记
M= random.sample(fish, mark) #捕捉,标记mark条

#重捕r次
N2=[]
for i in range(r):
    #重捕
    n= random.sample(fish, num)
    #看有多少被标记了
    m= len(set(M)&set(n))
    #推算种群数量的误差
    N2.append((round(mark*num/m)-N)/N)

import matplotlib.pyplot as plt
import numpy as np
x= np.linspace(0, r, r)
plt.plot(x, N2, 'r-o', x, [0]*r, 'b-')
plt.show()

print("平均误差", sum(N2)/r)

运行结果:

平均误差 0.11835359999999996

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

*

*

code