python scipy库函数solve用法_如何在中使用事件scipy.integrate.solve_ivp

我不确定事件处理是否scipy.integrate.solve_ivp工作正常。在下面的例子中,我对一个导数进行积分,得到一个三次多项式,它的根在x=-6,x=-2和x=2。我设置了一个事件函数,返回y,在x值处为零。我希望在解决方案的t_events属性中看到三个条目,但是我只看到一个条目,尽管很明显解决方案跨越x轴三次。在

我是不是做错了什么?在

复制代码示例:def fprime(x, y):

return 3 * x**2 + 12 * x - 4

def event(x, y):

return y

import numpy as np

from scipy.integrate import solve_ivp

sol = solve_ivp(fprime, (-8, 4), np.array([-120]), t_eval=np.linspace(-8, 4, 10), events=[event])

上述代码导致:

^{pr2}$

```

问题是从sol.y数组中可以看到应该有三个0(有三个符号改变),但是只记录了一个事件。在

Scipy/Numpy/Python版本信息:1.0.0 1.13.3 sys.version_info(major=3, minor=6, micro=0, releaselevel='final', serial=0)

[UPDATE]:如果我使用可选的max_step参数来求解_ivp,并使其足够小,那么我会看到所有三个根。似乎事件函数并不是在t帴eval步骤中调用的,而是仅在内部解算器步骤上调用,后者远远少于t帴eval步骤,并且最终会跳过某些根。这似乎不是很有用,因为你必须知道如何设置最大步长以避免丢失根。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值