我尝试使用optimize.leastsq来查找2个参数,但我有条件 所以我将条件添加到计算我的模型的函数中,如果条件被破坏,将返回一个非常大的答案,因此MSE将是巨大的。 但它不起作用:
data
是我的实际数据集,p0
是2个参数列表:
p1, success = optimize.leastsq(errfunc, p0[:], args=(data))
errfunc = lambda p, y: (season1(p[0],p[1]) - y)**2
def season1(a, b, i=range(1, 150)):
temp=[0.1875-0.1875*0.01, 0.1875+0.1875*0.01]
S=0.999
I=0.001
R=0
r=[0]
for t in i:
S -= b*S*I #Update S by the new t
I = I+b*S*I-a*I #Update I by the new t
R += a*I
r.append(R)
if R <= temp[1] and R >= temp[0]:
print(R, a, b)
return r
return [1]*len(r)