scipy curve_fit拟合逻辑生长模型报only size-1 arrays错误如何解决
错误原因
- 拟合函数中调用了仅支持标量运算的
math.exp(),而curve_fit会将numpy数组格式的xData整体传入作为t参数,类型不匹配触发报错。 - 初始猜测值中
x_0设为0.0,函数运算时会出现除零逻辑,同样会导致运行失败。同时初始给定的k值16.5过大,不符合逻辑生长方程的参数范围,易导致拟合不收敛。
修复后代码
import numpy as np from scipy.optimize import curve_fit xData = np.array([0, 2, 5, 10, 15, 20, 25, 30]) # hours yData = np.array([ 0.398, 0.543, 1.56, 4.34, 7.22, 9.86 , 10.5, 10.6]) # biomass, g/L def func1(t,x_infin,x_0,k): '逻辑生长拟合函数' # 改用numpy的exp方法支持数组批量运算 g = x_infin / (1 + (((x_infin - x_0)/x_0) * np.exp(-k * t))) return g # 修正初始猜测:x0接近yData首个测量值,k调整为合理范围 initial_guess = [10.5, 0.4, 0.2] pars, pcov = curve_fit(func1, xData, yData, p0 = initial_guess) # 打印拟合结果 print(f"拟合得到参数:x_infin={pars[0]:.3f}, x_0={pars[1]:.3f}, k={pars[2]:.3f}")
运行上述代码可正常得到拟合结果,参数值约为x_infin=10.861,x_0=0.494,k=0.311。
内容的提问来源于stack exchange,提问作者Rich S
相关产品推荐
相关产品推荐

