多变量和 ODE 的 Scipy 曲线拟合

问题描述

我的情况: 我有两个 ODE,ODE1 的一个变量必须由 ODE2 计算(ODE2 的唯一目的)。现在我尝试为scipy的solve_ivp函数准备一切:

from scipy.integrate import solve_ivp
t0=0.5 #d
te=5 #d
t_step=1000
Bioc_start=10000
s_start=2
a=1.1 
b=100000
c=1   
def model(t,z,a,b,c):
        Ce,Sub = z 
        return [(a*(Sub/(Sub+c))*Ce),-1*(a/b)*(Sub/(Sub+c))*Ce]
    
    
#solve function
sol = solve_ivp(model,(t0,te),(Bioc_start,s_start),args=(a,c),t_eval=np.linspace(t0,te,t_step),method = 'BDF')

#plot
ax1  = plt.subplot()
in1  = ax1.plot(sol.t,sol.y[0],'r--',label = 'Ce')
plt.ylabel('Ce $[unit]$')
plt.ylim(0,140000)
ax2  = ax1.twinx()
in2  = ax2.plot(sol.t,sol.y[1],'g:',label = 'Sub')
plt.ylabel('Sub $[unit]$')
plt.ylim(0.5,2.5)
lns  = in1+in2
labs = [l.get_label() for l in lns]
ax1.legend(lns,labs,loc = 1)
plt.title('Title')
plt.xlim(0.5,5)

现在我有模型的变量 z (Ce,Sub) 的数据,我想将模型拟合到数据中。变量 a、b 和 c 是常数。我尝试遵循本指南:https://kitchingroup.cheme.cmu.edu/blog/2013/02/18/Fitting-a-numerical-ODE-solution-to-data/#disqus_thread 但我失败了,因为我不明白如何将我的模型和变量拟合到这种类型的拟合中,或者这是不可能的。

Ce 和 Sub 的数据和真实数据图:

Ce=[8000,10000,25000,70000,85000,130000]
Sub=[2,1.9,1.7,1.5,1.1,0.6]
ax1  = plt.subplot()
in1  = ax1.plot(Ce,'r.',140000)
ax2  = ax1.twinx()
in2  = ax2.plot(Sub,'g.',5)

抱歉,帖子太长,如果需要其他信息,请告诉我。非常感谢任何帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)