【发布时间】:2021-07-06 06:45:48
【问题描述】:
我试图最小化两个函数之间的 mse 边界,curve_fit 做得很好,但是当两个函数之间的 mse 低于 0.1 时,我想停止计算。 这是一个简单的示例代码
import numpy as np
from scipy import optimize, integrate
def sir_model(y, x, beta, gamma):
sus = -beta * y[0] * y[1] / N
rec = gamma * y[1]
inf = -(sus + rec)
return sus, inf, rec
def fit_odeint(x, beta, gamma):
return integrate.odeint(sir_model, (sus0, inf0, rec0), x, args=(beta, gamma))[:,1]
population = float(1000)
xdata = np.arange(0,335,dtype = float)
upper_bounds = np.array([1,0.7])
N = population
inf0 = 10
sus0 = N - inf0
rec0 = 0.0
#curve to approximate
ydata = fit_odeint(xdata, beta = 0.258, gamma = 0.612)
popt, pcov = optimize.curve_fit(fit_odeint, xdata, ydata,bounds=(0, upper_bounds))
问题是真正的问题更难。所以我想以固定的容差(mse = 0.1)停止函数curve_fit。我尝试使用 ftol,但它似乎不起作用。
【问题讨论】:
-
欢迎来到 SO!请提供minimal reproducible example。否则,很难提供适当的帮助。
-
完成了,希望越来越好
-
这不是一个工作示例,例如
sus0取决于ydata,它由函数fit_odeint计算得出,而sus0又需要sus0。 -
对不起,现在我认为这个例子有效
标签: python optimization computer-science curve-fitting scipy-optimize