我正在尝试拟合化学系统中四个变量 A、B、C、D 的人口增长和衰退的动力学模型。我正在尝试求解以下一组方程,我已将其以矩阵形式附加:
方程的矩阵形式 https://i.stack.imgur.com/ysEdZ.png
其中 t 是时间步长,k1,k2,k3 是指数函数中的常数。我想根据这些方程拟合曲线,以求解给定 A、B、C、D 群体的 k1、k2 和 k3。
为此,我使用 Optimize.curve_fit,t 是 (1000,) 数组中的时间步长,X 是 (4,1000) 矩阵,其中 u 和 w 是两个矩阵:
from scipy import optimize
def func(t,X,k1,k2,k3):
u = np.array([[1,0,0],
[-k1/(k1+k2-k3),k1/(k1+k2-k3),0],
[(k1*k3)/((k1+k2-k3)*(k1+k2)),-k1/(k1+k2k3),k1/(k1+k2)],
[-k2/(k1+k2),0,k2/(k2+k1)]],dtype=float)
w = np.array([[np.exp(-t*(k1+k2))],
[np.exp(-t*k3)],
[1]])
return X*np.dot(u,w)
X = np.array([A,B,C,D]) # A,B,C,D are (1000,) arrays
# X.shape = (4, 1000)
# t.shape = (1000,)
optimize.curve_fit(func,t,X,method='lm')
当我运行这段代码时,我得到以下输出:
ValueError:对象对于所需数组来说太深
错误:函数调用的结果不是正确的浮点数组。
我曾在一个similar https://stackoverflow.com/questions/15923081/valueerror-object-too-deep-for-desired-array-while-using-convolution发布数组的形状很重要,但据我所知这些是正确的。
任何人都可以建议问题可能出在这段代码中,以及我如何最好地使用曲线拟合函数来解决 k1,k2,k3 问题?
Thanks