gpt4 book ai didi

python - 在Python中求解具有时间相关系数的常微分方程(odeint)

转载 作者:行者123 更新时间:2023-12-01 02:52:34 24 4
gpt4 key购买 nike

我想使用 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()

最佳答案

您已将单个数字 1 + time_dep(0) 存储为 coefficients['coeff1'] 的值。不要这样做,而是将函数本身存储在字典中,并在 func() 中调用该函数。像这样的事情:

coefficients = {'coeff1' : time_dep}

def func(state, t, coefficients):
mrna = state[0]
protein = state[1]
c1 = 1 + coefficients['coeff1'](t)
dt_mrna = c1 * mrna * protein
dt_protein = c1 * protein
return [dt_mrna, dt_protein]

关于python - 在Python中求解具有时间相关系数的常微分方程(odeint),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com