python - 具有离散值的 ODE 积分

标签 python scipy ode

我想使用 scipy.integrate.ode 求解器。我只能将可调用函数 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

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

正如 unutbu 在评论中指出的那样,如果您进行插值,您将在足够长的时间内使用混沌系统得到错误的解决方案。然而,由于任何数值求解算法都是如此,因此很难对其采取任何措施。

关于python - 具有离散值的 ODE 积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114596/

相关文章:

scipy - pip 无法为 scipy 构建轮子

python - 如何用python求解非线性DE的9方程组?

r - 在 R 包 PhaseR 中绘制 ODE 相位 potriat 时出错

python - Tensorflow 导入错误

python - 无法复制比较 Python、Numpy 和 Numba 矩阵乘法的结果

python - scipy.signal.lfilter : *** ValueError: object of too small depth for desired array

python - 使用 SciPy 求解 ODE 给出在 double_scalars 错误中遇到的无效值

python - 复选框/组合框的 Tkinter 下拉列表

python - 检查 pymongo 驱动程序详细信息

PYTHON:如何合并相等元素的numpy数组