如何使用辅助函数缩短ODE方程

时间:2018-09-14 16:09:17

标签: python ode odeint

我想以某种方式缩短我的ODE方程,因为否则代码将变得混乱。我已经尝试过使用诸如fe()的辅助函数,但这是行不通的。以下代码仅是示例,欢迎任何建议!谢谢!

# Import the required modules
import numpy as np
import matplotlib.pyplot as plt

from scipy.integrate import odeint

# Here the parameters
a,b,c,d = 1,1,1,1

def fe(P[0]):
    return d*P[0]

# Define a function which calculates the derivative
def dP_dl(P, l):
    return [P[0]*(a - b*P[1]),
            -P[1]*(c - fe(P[0]) )]


ts = np.linspace(0, 12, 100)
P0 = [1.5, 1.0]
Ps = odeint(dP_dl, P0, ts) 
prey = Ps[:,0]
predators = Ps[:,1]


plt.plot(ts, prey, "+", label="Rabbits")
plt.plot(ts, predators, "x", label="Foxes")
plt.xlabel("Time")
plt.ylabel("Population")
plt.legend();

这是我从python控制台获得的。

  

Python 3.6.3 | Anaconda,Inc. | (默认值,2017年10月15日,07:29:16)[MSC   v.1900 32位(Intel)]键入“版权”,“信用”或“许可证”   更多信息。

     

IPython 6.1.0-增强的交互式Python。

     

runfile('C:/ Users / Matteo S / Desktop / vocaboli tedesco / untitled0.py',   wdir ='C:/ Users / Matteo S / Desktop / vocaboli tedesco')追溯(大多数   最近通话结束):

     

文件   “ C:\ Anaconda3 \ lib \ site-packages \ IPython \ core \ interactiveshell.py”,   第2862行,在run_code中       exec(code_obj,self.user_global_ns,self.user_ns)

     

文件“”,第1行,在       运行文件      

文件   “ C:\ Anaconda3 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py”,   运行文件中的第710行       execfile(文件名,命名空间)

     

文件   “ C:\ Anaconda3 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py”,   第101行,在execfile中       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ C:/用户/ Matteo S /桌面/ vocaboli tedesco / untitled0.py”,行   17       def fe(P [0]):               ^ SyntaxError:语法无效

1 个答案:

答案 0 :(得分:1)

函数不应该知道您正在传递迭代器的第一个元素,他应该只知道您正在传递数字。另一方面,函数dP_dl的样式设置为分离组件以使其更具可读性。

users := []model.User{}
db.Find(&users, map[string]interface{}{"foo": "bar"})