Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python solve_ivp[scipy.integrate]示例中的问题_Python_Python 3.x_Scipy_Ode_Numerical Integration - Fatal编程技术网

Python solve_ivp[scipy.integrate]示例中的问题

Python solve_ivp[scipy.integrate]示例中的问题,python,python-3.x,scipy,ode,numerical-integration,Python,Python 3.x,Scipy,Ode,Numerical Integration,我正在研究python中与ode数值积分有关的内容,特别是我发现了scipy.integrate函数solve_ipv。我尝试了中所示的示例,但与Lotka Volterra示例相关的代码中有一个明显的错误: def lotkavolterra(t, z, a, b, c, d): x, y = z return [a*x - b*x*y, -c*y + d*x*y] sol = solve_ivp(lotkavolterra, [0, 15], [10, 5], args=(

我正在研究python中与ode数值积分有关的内容,特别是我发现了scipy.integrate函数
solve_ipv
。我尝试了中所示的示例,但与Lotka Volterra示例相关的代码中有一个明显的错误:

def lotkavolterra(t, z, a, b, c, d):
    x, y = z
    return [a*x - b*x*y, -c*y + d*x*y]

sol = solve_ivp(lotkavolterra, [0, 15], [10, 5], args=(1.5, 1, 3, 1))

t = np.linspace(0, 15, 300)
z = sol.sol(t)

import matplotlib.pyplot as plt
plt.plot(t, z.T)
plt.xlabel('t')
plt.legend(['x', 'y'], shadow=True)
plt.title('Lotka-Volterra System')
plt.show()
  • sol.sol(t)
    在本规范中没有任何意义。我们应该写什么?可能是一个元组
    z=sol.t,sol.y

  • 同样清楚的是
    len(sol.y[0])=57
    len(sol.y[1])=57
    ,而
    t
    有300个元素。因此,将它们的值耦合到绘图可能是一个问题

  • 在页面中还有一个绘图,显示了如果代码运行,我们将获得什么

    我不认为这很重要,但我正在使用python3

    编辑:我没有在解算器调用的
    solv\u ipv()中插入
    densed\u output=True

    sol = solve_ivp(lotkavolterra, [0, 15], [10, 5], args=(1.5, 1, 3, 1),
                    dense_output=True)
    
    最后一个选项
    densite\u output=True
    负责将
    sol
    函数添加到解决方案“bunch”对象中。此函数实现特定于方法的分段多项式插值,在文献中称为“密集输出”。因此,下面两行完全有意义,因为
    z=sol.sol(t)
    包含
    t
    中任意点的样本

    此选项不会更改内部节点的顺序和步长
    sol.t
    sol.y
    包含有或没有该选项的相同值。甚至不需要额外的计算,因为步进器为每一步计算插值多项式。即使在事件机制中没有密集输出选项,也会使用此选项。当在每一步之后存储单个插值多项式并将其组合到密集输出函数中时,仅会增加内存使用



    为了避免混淆
    sol.sol
    ,有些人将
    res
    作为“结果”或类似的变量名作为解算器返回值,因此插值函数被访问为
    res.sol(t)

    是的,我忘记了那个调用,但在我的代码中我没有使用
    densed\u output=True
    。简而言之,该命令是否使输出数组相对于参数
    t
    更平滑?我们确实改变了实向量输出吗?是的,多项式插值比分段线性函数看起来更平滑。Matlab的ode45等通过“优化”选项将每个步骤段的内部点添加到输出中来更好地实现这一点。因此,绘图看起来更平滑,但点的密度仍然适合解决方案的实际“曲率”。