Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy、odeint和odeint输入函数的输入设置_Python_Function_Scipy_Ode - Fatal编程技术网

Python Scipy、odeint和odeint输入函数的输入设置

Python Scipy、odeint和odeint输入函数的输入设置,python,function,scipy,ode,Python,Function,Scipy,Ode,我通过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实现中:第一次做这种

我通过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函数忽略了预设输入:关于如何解决这个问题的想法/可能出了什么问题?我已经尝试从内部手动为函数设置种子,但是在odeint过程中,至少有一个输入(v)应该发生变化,这是行不通的

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) 

假设u和v是这个方程组中的动力学变量,它们应该进入
switch\u a
函数的第一个参数,而不是后面的参数。我认为这可能更接近你想要做的事情:

def switch_a(variables, timepool, iv, iu , au , av ,b , n , k ):
    u, v = variables
    zu = (1+iv/k)**n #to simplify equation
    zv = (1+ iu/k)**n
    u2 = -u + (au/(1+((v/zu)**b)))
    print (u, v, iv, iu, au, av, b, n, k)
    v2 = -v + (av/(1+((u/zv)**b)))
    res = np.array([u2, v2])
    return res

args = (iv, iu, au, av, b, n, k)
timepool = np.linspace (1, 50, 50)
solution1a = sp.odeint (switch_a, initial, timepool, args) 

您完全正确:函数似乎在这种形式下工作!谢谢ODE函数的格式是
derivs(state,time,params)
,其中
time
实际上是一个时间,而不是要从解决方案中获取样本的完整时间列表。如果您在某个时刻使用ODE函数中的时间,这种更精确的命名可能有助于获得更好的直觉。