首页 > 解决方案 > Julia OrdinaryDiffEq:progress_message 默认值不是他们声称的那样

问题描述

OrdinaryDiffEq 的 solve.jl中,默认为progress_messageODE_DEFAULT_PROG_MESSAGE第 58 行),默认设置为显示 dt、t 和 u 的最大值,如此处所述(第 21-22 行)。但是,我将它与 TerminalLoggers 一起使用以在 Jupyter Lab 和/或终端中运行代码,相反,我收到消息“ETA:(某个时间编号)”。

using Logging: global_logger
using TerminalLoggers: TerminalLogger
global_logger(TerminalLogger())
using OrdinaryDiffEq

function lorenz(du,u,p,t)
 du[1] = 10.0*(u[2] - u[1])
 du[2] = u[1]*(28.0 - u[3]) - u[2]
 du[3] = u[1]*u[2] - (8/3)*u[3]
end

u0 = [1.0; 0.0; 0.0]
tspan = (0.0, 100.0)
prob = ODEProblem(lorenz, u0, tspan)
sol = solve(prob, Tsit5(), progress=true)

终端输出:

ODE   0%|                                               |  ETA: N/A
ODE  77%|████████████████████████████████████▎          |  ETA: 0:00:00
ODE 100%|███████████████████████████████████████████████| Time: 0:00:01

ETA 似乎是TerminalLoggers defaults的一部分。

文档相对简洁,并没有解释传递给progress_message求解器选项以更改消息的内容。传递字符串 likeprogress_message="dt"不起作用。传递 DiffEqBase.jl/src/common_defaults.jl 中定义的确切函数ODE_DEFUALT_PROG_MESSAGE根本不会改变行为。

这是一个错误,我应该向 OrdinaryDiffEq 提出问题,还是有什么方法可以progress_message在常用求解器选项中进行操作以实际获得 dt、t 和 u?

标签: julia

解决方案


该文档相对简洁,并没有解释传递给 progress_message 求解器选项以更改消息的内容。传递诸如 progress_message="dt" 之类的字符串不起作用。传递 DiffEqBase.jl/src/common_defaults.jl 中定义的 ODE_DEFUALT_PROG_MESSAGE 的确切函数根本不会改变行为。

这些选项适用于任何支持它们的记录器。Juno(/Atom) 中的默认记录器支持它并使用这些消息。我认为 TerminalLoggers 不会,这是 TerminalLoggers 的问题。


推荐阅读