首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODEINT无法调用函数

ODEINT无法调用函数
EN

Stack Overflow用户
提问于 2014-04-18 18:20:30
回答 1查看 320关注 0票数 3

因此,我试图解决一个由三种代码组成的系统,并开发了下面的代码来使用ODEint来解决它们。但是当我运行时,ODEint有一个问题,需要调用我的方程组函数。

代码语言:javascript
复制
from scipy.integrate import odeint



#initial parameters
X0 = 75.
M0 = 150.
G0 = 105.
N0 = 80.
T0 = 7.
u10 = 0.0301231859
u20 = 0.0078947020
u30 = 0.0010708464
Rxg = 1.92
Rxm = 3.84
Rxma = 5.76

#define system of equations
def sugar(t,y,u10,u20,u30,Rxg,Rxm,Rxma):
    ddt = [-u10*(X0+(Rxg*(G0-y[0]))+(Rxm*(M0-y[1]))+(Rxma*(N0-y[2]))),
           -u20*(X0+(Rxg*(G0-y[0]))+(Rxm*(M0-y[1]))+(Rxma*(N0-y[2]))),
           -u30*(X0+(Rxg*(G0-y[0]))+(Rxm*(M0-y[1]))+(Rxma*(N0-y[2])))]
    return(ddt)

#time parameter
tinit = 0.
tend = 10.
h = 2.
t = arange(tinit,tend+h,h)

#initial guess
y0 = [G0,M0,N0]

#run odeint
y = odeint(sugar,y0,t,args = (u10,u20,u30,Rxg,Rxm,Rxma))

print 't =',t
print 'y =',y

在我的输出中我得到:

代码语言:javascript
复制
t = [  0.   2.   4.   6.   8.  10.]
y = [[ 105.  150.   80.]
 [ 105.  150.   80.]
 [ 105.  150.   80.]
 [ 105.  150.   80.]
 [ 105.  150.   80.]
 [ 105.  150.   80.]]
error: Error occurred while calling the Python function named sugar

更改y0和t的顺序仍然会导致相同的错误。我不明白这个错误,也不知道它会给我带来什么问题。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-18 18:29:22

根据医生们sugar的签名应该是

代码语言:javascript
复制
func(y, t, ...)

而不是

代码语言:javascript
复制
func(t, y ...)
代码语言:javascript
复制
import numpy as np
import scipy.integrate as integrate

# initial parameters
X0 = 75.
M0 = 150.
G0 = 105.
N0 = 80.
T0 = 7.
u10 = 0.0301231859
u20 = 0.0078947020
u30 = 0.0010708464
Rxg = 1.92
Rxm = 3.84
Rxma = 5.76

# define system of equations


def sugar(y, t, u10, u20, u30, Rxg, Rxm, Rxma):
    ddt = [-u10 * (
        X0 + (Rxg * (G0 - y[0])) + (Rxm * (M0 - y[1])) + (Rxma * (N0 - y[2]))),
        -u20 * (X0 + (Rxg * (G0 - y[0])) + (Rxm * (M0 - y[1])) + (
                Rxma * (N0 - y[2]))),
        -u30 * (X0 + (Rxg * (G0 - y[0])) + (Rxm * (M0 - y[1])) + (Rxma * (N0 - y[2])))]
    return ddt

# time parameter
tinit = 0.
tend = 10.
h = 2.
t = np.arange(tinit, tend + h, h)

# initial guess
y0 = [G0, M0, N0]

# run odeint
y = integrate.odeint(sugar, y0, t, args=(u10, u20, u30, Rxg, Rxm, Rxma))

print('t = {t}'.format(t=t))
print('y = {y}'.format(y=y))

收益率

代码语言:javascript
复制
t = [  0.   2.   4.   6.   8.  10.]
y = [[ 105.          150.           80.        ]
 [ 100.02722703  148.69673278   79.82322335]
 [  94.02207128  147.12289808   79.60974661]
 [  86.77020667  145.22232521   79.35195073]
 [  78.01280485  142.92718027   79.04063465]
 [  67.43730555  140.15554729   78.66468719]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23159853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档