离散值的 ODE 集成

Posted

技术标签:

【中文标题】离散值的 ODE 集成【英文标题】:ODE integration with discretized values 【发布时间】:2012-12-16 09:07:27 【问题描述】:

我想使用scipy.integrate.ode 求解器。我只能将可调用函数f 定义为离散点数组(因为它取决于先前迭代的积分结果)。但从文档看来,集成商希望可调用函数是一个连续函数。我想需要进行某种插值。求解器可以自己处理这个问题,还是我需要编写一些插值程序?是否有一些解释它的 scipy 文档/教程?

【问题讨论】:

你的意思是scipy.integrate.ode? 对导数进行插值可能会导致结果在很大程度上取决于如果您的 ODE 系统是混乱的,例如 Lorenz system,您如何进行插值。 是的,我的意思是scipy.integrate.ode 【参考方案1】:

是的,可调用对象必须是一个函数,它返回提供给函数的任何值的导数。如果你有一个函数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

对于多维系统,插值非常复杂。如果有任何方法可以在给定点动态计算导数,那么它可能比使用插值更容易实现。

正如 unutbu 在评论中指出的那样,如果您在混沌系统中进行插值,您将在足够长的时间内得到错误的解决方案。但是,由于任何数值求解算法都是如此,因此很难对它做任何事情。

【讨论】:

以上是关于离散值的 ODE 集成的主要内容,如果未能解决你的问题,请参考以下文章

100 个离散值的多类分类的线性回归

为具有连续值的渐变图创建 R ggplot2 离散调色板

离散数学权值怎么算

机器学习中常用的数据集处理方法

在不使用分析服务的情况下将一组具有离散和连续数据值的数据分成两组?

pandas 轴索引的重命名,离散化,异常值的处理与随机方法