【发布时间】:2014-04-03 04:07:17
【问题描述】:
我是 Python 新手。我正在研究常微分方程系统的数值解的代码。 我的问题:我需要在函数中实现一个循环。之后,我需要集成那个函数(odeint),但是它不起作用。
这是没有循环的(工作)代码:
from scipy.integrate import odeint
from pylab import * # for plotting commands
def deriv(y,t): # return derivatives of the array y
a = 2.0
return array([ y*a*(1-y/10)])
time = linspace(0,500,1000)
yinit = 1
y = odeint(deriv,yinit,time)
figure()
plot(time,y)
xlabel('t')
ylabel('y')
show()
这是无效的代码:
from scipy.integrate import odeint
from pylab import * # for plotting commands
def deriv(y,t): # return derivatives of the array y
a = 2.0
for i in range(0,10):
return array([ y[i]*a*(1-y[i]/10) ])
time = linspace(0,500,1000)
yinit = linspace(1,1,10)
y = odeint(deriv,yinit,time)
figure()
plot(time,y[:,0],time,y[:,1])
xlabel('t')
ylabel('y')
show()
有人可以帮帮我吗?
【问题讨论】:
-
能否请您记录下第二种情况的微分方程是什么?您应该返回一个长度为 10 的数组,您在更正版本的 i=0 循环中返回一个长度为 2 的数组。没有明显的修复方法。
-
我只是想用“n”个方程求解 ODE 系统。我是生物学家。我正在模拟一个具有“n”个种群的系统,每个种群都指一个方程。
-
是的,但是方程式是什么?在第一种情况下,n=2,两个分量有 2 个方程。但在第二种情况下,当 n=10 时,您尝试组装 10 对函数,总共有 20 个。除了第一个返回只返回一对。如果没有进一步的知识,就无法以有意义的方式修复它。
-
好的,我将发布一组更简单的方程式,以便将注意力集中在代码问题上。
-
我去寻找 odeint 的非平凡系统示例,但一无所获。此外,如果需要 (numpy/scipy) 数组对象或只需要裸 [1,2,3] 数组,两者都可以找到,这是不一致的。我在下面的答案中放置了 5 个相同的 Voltera-Lotka 系统,这应该很容易扩展到真正耦合的系统,无论有无循环。
标签: python scipy ode differential-equations