我通过odeint整合生物化学ODE(见下图),但主要的输入函数似乎是在调用时用奇数重新设置(或替换)输入参数 . 尽管参数'iu'(v的诱导率,应该在整个过程中保持不变)和'v'(结果之一,应该在整个odeint中变化)分别设置为100和0,如果在整个函数中打印,输出似乎是:
'0.000999900009999 100 0 0 10 9 2 2 3'
虽然看起来应该更像这样:
'0 0 0 100 10 9 2 2 3'
我不确定错误是在我的初始函数中还是在我的odeint实现中:第一次做这种事情,但是我觉得奇怪的是switch_a函数只是忽略了预设的输入:关于如何解决这个问题的任何想法/什么可能出错?我已经尝试从内部手动播种函数,但是至少有一个输入(v)应该在odeint过程中发生变化,这是不行的 .
initial = np.array([0,0])#sets initial
#parameters
iv = 0
iu= 100
u = 0
v = 0
au = 10
av = 9
b=2
n=2
k=3
def switch_a(initial, timepool, u, v, iv, iu , au , av ,b , n , k ):
zu = (1+iv/k)**n #to simplify equation
zv = (1+ iu/k)**n
u = -u + (au/(1+((v/zu)**b)))
print (u, v, iv, iu, au, av, b, n, k)
v = -v + (av/(1+((u/zv)**b)))
res = np.array([u, v])
return res
args = (iv, iu, u, v, au, av, b, n, k)
timepool = np.linspace (1, 50, 50)
solution1a = sp.odeint (switch_a, initial, timepool,args)
1 回答
鉴于u和v是这个方程组中的动态变量,它们应该进入
switch_a
函数的第一个参数,而不是后面的参数 . 我认为这可能更接近你想要做的事情: