python - 使用solve_ivp的“事件”检查收敛
问题描述
问题:
假设一个简单的衰减过程,如以下 ode 所述:
def exponential_decay(t,y):
return -0.5 * y
这可以在 scipy 的solve_ivp()的帮助下轻松集成
t_min = 0; t_max = 25; y0 = 1
sol = solve_ivp(exponential_decay, [t_min, t_max],[y0],dense_output=True)
生成的解决方案可能如下所示:
问题:
我想使用solve_ivp的“事件”查找器来检查收敛,以减少达到收敛后所花费的计算时间。但是,当提供事件函数时,事件跟踪器的设计签名是:
event(t,y) -> t_event
当事件函数的返回值为零时发生事件。
因为event(t,y)只知道当前的 y(t),所以它不能直接用于实现标准收敛标准,因为它们都需要一系列 y。
所以简而言之:有没有一种好方法可以做到这一点,使用事件查找器来检查收敛?
或者在收敛跟踪器中使用任何类型的 y(t) 范围?这似乎对许多应用程序都有帮助
我发现这样做的一个(坏方法)是将一个全局变量传入和传出事件(t,y),该变量存储不同的(t,y(t)。然而,这不仅非常不雅,而且抵消了solive_ivp()提供的计算效率
解决方案
推荐阅读
- python - 使用 iconbitmap() 时图标不出现
- android - 未找到处理 Intent 的活动(从片段打开浏览器)
- graph - 有没有办法通过在一定范围内调整权重来最大化图的最大流量?
- azure - Azure powershell Move-AzureDeployment - 错误:HttpRequestException
- javascript - 从一个号码到另一个号码
- shell - 使用 gawk 添加以逗号分隔的值
- c# - 在非 UI 线程上运行 async/await 方法
- google-cloud-platform - 在程序中一致地处理多个用户输入和拉取图像的最佳方法是什么?
- ios - 如何防止 ActivityViewController 将“www”附加到共享链接
- python - Python组织url的CSV,每个url分割行,从url下载图像