我想使用scipy的odeint函数解决一个包含7个常微分方程(ODEs)和15个时间相关系数的系统。我将这些系数存储在字典中,以便在定义的函数(func)中使用odeint()时可以通过键名访问它们。这些系数取决于时间,在每个系数的字典中,我调用了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()
func()
内部调用它们的特定原因是什么? - Colin