【问题标题】:scipy solve_ivp with negative first_stepscipy solve_ivp 负 first_step
【发布时间】:2019-11-06 18:36:06
【问题描述】:

我想用 scipy 的 solve_ivp 求解一个 ODE 系统,我需要一个负的 first_step 来改进解决方案,但是

Nsol = solve_ivp(derivs, (N , Nend), ydoub, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False, first_step=-1e-8)

返回

ValueError: `first_step` must be positive.

任何想法如何解决此问题或找到解决方法?

编辑:这是产生这个的代码:

import numpy
from scipy.integrate import solve_ivp

w = numpy.array ( [  0.00000000e+00,   1.00000000e+00,   3.17214587e-01,
        -3.41988549e-01,  -1.50137165e-05,  -2.48117074e-02,
         1.17624224e-03,  -1.27149037e-04] )

def derivs2 (t, w):
    dydN = numpy.zeros(2 , dtype=float , order='C')

    dydN[0] = 0.0

    dydN[1] = y[1] * y[2]
    dydN[2] = y[2] * ( y[3] + 2.0 * y[2] )
    dydN[3] = 2.0 * y[4] - 5.0 * y[2] * y[3] - 12.0 * y[2] * y[2]

    for i in range (4 , NEQS-1):
        dydN[i] = ( 0.5 * (i-3) * y[3] + (i-4) * y[2] ) * y[i] + y[i+1]

    dydN[NEQS-1] = ( 0.5 * (NEQS-4) * y[3] + (NEQS-5) * y[2] ) * y[NEQS-1]

    return dydN

Nsol = solve_ivp(derivs, (1000.0 , 0.0), w, method='RK45', t_eval=None, dense_output=False, events=None, vectorized=False , first_step=-1e-6)

【问题讨论】:

  • 能否提供重现此行为所需的所有代码!?
  • 当然,我已经编辑了问题以包含代码。
  • 请同时添加您的所有导入,以便可以轻松复制和粘贴,谢谢!
  • 好的,完成了。
  • 如果您将first_step 设为肯定或忽略,那么结果到底有什么问题?

标签: python scipy ode


【解决方案1】:

你的代码有很多问题(derivs derivs2w vs y等)并且不会运行。

first_step实际上是第一步的幅度,这不是清楚的,或者完全是在文档中。更改first_step=1e-6,这应该是工作。

from scipy.integrate import solve_ivp 

def fun(t, y): 
    return y 

try: 
    sol = solve_ivp(fun, (1000, 0), [1], first_step=-1e-6) 
except ValueError: 
    print(f"fails backwards") 

sol = solve_ivp(fun, (1000, 0), [0], first_step=1e-6) 
print(sol.t) 
print("First step = {}".format(sol.t[1]-sol.t[0]))

结果:

fails backwards
[1000.          999.999999    999.999989    999.999889    999.998889
  999.988889    999.888889    998.888889    988.88888903  888.88888928
    0.        ]
First step = -9.999999974752427e-07

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 2021-01-19
    • 2018-06-23
    • 2021-11-18
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2019-05-22
    相关资源
    最近更新 更多