我试图估计非线性方程的参数:
y(x1, x2) = x1 / A + Bx1 + Cx2
使用该问题的答案中概述的方法,但找不到有关如何将多个自变量适当地传递给 curve_fit 函数的文档。
具体来说,我试图根据植物密度 (x1) 和竞争对手的密度 (x2) 来估计植物生物量 (y)。对于植物密度和植物生物量之间的关系,我有三个指数方程(形式为 y = a[1-exp(-b*x1)]),对于三个竞争对手的密度具有不同的参数值:
For x2 == 146: y = 1697 * [1 - exp(-0.010 * x1)]
For x2 == 112: y = 1994 * [1 - exp(-0.023 * x1)]
For x2 == 127: y = 1022 * [1 - exp(-0.008 * x1)]
因此,我想按照以下方式编写代码:
def model_func(self, x_vals, A, B, C):
return x_vals[0] / (A + B * x_vals[0] + C * x_vals[1])
def fit_nonlinear(self, d, y):
opt_parms, parm_cov = sp.optimize.curve_fit(self.model_func, [x1, x2], y, p0 = (0.2, 0.004, 0.007), maxfev=10000)
A, B, C = opt_parms
return A, B, C
但是,我还没有找到关于如何格式化参数 y (传递给fit_nonlinear
)以捕获 x_vals 的二维性质的任何文档(curve_fit状态 y 的文档应该是 N 长度序列)。我正在尝试的可能curve_fit
吗?