Python 离散化值的常微分方程积分
我想使用Python 离散化值的常微分方程积分,python,scipy,ode,Python,Scipy,Ode,我想使用scipy.integrate.odesolver。我只能将可调用函数f定义为一个离散点数组(因为它取决于以前迭代的积分结果)。但是,从文档中可以看出,集成器希望可调用函数是一个连续函数。我想需要做一些插值。解算器可以自己处理这个问题吗,或者我需要编写一些插值例程吗?是否有一些scipy文档/教程对此进行了解释?是的,可调用函数需要是一个函数,它返回提供给该函数的任何值的导数。如果您有一个执行插值的函数interp,则可以如下定义可调用函数: f = lambda t,y: interp
scipy.integrate.ode
solver。我只能将可调用函数f
定义为一个离散点数组(因为它取决于以前迭代的积分结果)。但是,从文档中可以看出,集成器希望可调用函数是一个连续函数。我想需要做一些插值。解算器可以自己处理这个问题吗,或者我需要编写一些插值例程吗?是否有一些scipy文档/教程对此进行了解释?是的,可调用函数需要是一个函数,它返回提供给该函数的任何值的导数。如果您有一个执行插值的函数interp
,则可以如下定义可调用函数:
f = lambda t,y: interp(y, yvalues, fvalues)
如果您的系统是标量系统,您可以使用numpy.interp
函数,如以下示例所示:
import numpy
from scipy import integrate
yvalues = numpy.arange(-2,3,0.1)
fvalues = - numpy.sin(yvalues)
f = lambda t,y: numpy.interp(y, yvalues, fvalues)
r = integrate.ode(f)
r.set_initial_value(1)
t1 = 10
dt = 0.1
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
print r.t, r.y
导入numpy
从scipy导入集成
Y值=numpy.arange(-2,3,0.1)
fvalues=-numpy.sin(yvalues)
f=lambda t,y:numpy.interp(y,y值,f值)
r=积分。ode(f)
r、 设置初始值(1)
t1=10
dt=0.1
当r.successful()和r.t
对于多维系统,插值是非常复杂的。如果有任何方法可以计算给定点的导数,那么它可能比使用插值更容易实现
正如unutbu在评论中指出的,如果你插值,你将在足够长的时间内得到一个混沌系统的错误解。然而,由于任何数值解算法都是如此,因此很难对此采取任何措施。你的意思是?如果你的ODE系统是混沌的,那么插值导数可能会导致严重依赖于插值方式的结果,例如。是的,我的意思是
scipy.integrate.ODE