我想用scipy的odeint函数求解一个由7个常微分方程组(ODEs)和15个时变系数。在
我将系数存储在字典中,这样就可以通过定义为与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()
字典应该包含函数而不是计算值(就像现在这样):
然后稍后获取函数并调用正确的时间:
^{pr2}$您已将单个数字
1 + time_dep(0)
存储为coefficients['coeff1']
的值。与其这样做,不如将函数本身存储在字典中,并在func()
中调用该函数。像这样:相关问题 更多 >
编程相关推荐