【发布时间】:2017-11-18 13:03:13
【问题描述】:
我想使用 scipy 的 odeint 函数求解具有 15 个时间相关系数的 7 个常微分方程 (ODE) 系统。
我将系数存储在字典中,以便我可以通过定义为与 odeint() 一起使用的函数 (func) 中的键名访问它们。系数取决于时间,因此在每个系数的字典中我调用函数 time_dep(t)。但是,由于我的字典存储在 odeint() 使用的函数之外,所以我在开始时初始化了一个时间变量 t = 0。现在我担心当 odeint() 分析访问这些系数时,它们会保持不变(在 t = 0 时)。
任何帮助将不胜感激!
这是一个最小工作示例的尝试,它并不完美,但我打印出系数值并且它没有改变,这是我不想要的:):
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
t = 0
def time_dep(t):
return (10 * np.exp(-t))
coefficients = {'coeff1' : 1 + time_dep(t)}
def func(state, t, coefficients):
mrna = state[0]
protein = state[1]
dt_mrna = coefficients['coeff1'] * mrna * protein
dt_protein = coefficients['coeff1'] * protein
print(coefficients['coeff1'])
return[dt_mrna,dt_protein]
state0 = [1,1]
t = np.arange(0,100,0.1)
solve = odeint(func,state0,t,args=(coefficients,))
plt.plot(t,solve)
plt.show()
【问题讨论】:
标签: python dictionary scipy ode