问题描述
我的情况: 我有两个 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 (将#修改为@)