julia - Julia OrdinaryDiffEq:progress_message 默认值不是他们声称的那样
问题描述
在OrdinaryDiffEq 的 solve.jl中,默认为progress_message
(ODE_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?
解决方案
该文档相对简洁,并没有解释传递给 progress_message 求解器选项以更改消息的内容。传递诸如 progress_message="dt" 之类的字符串不起作用。传递 DiffEqBase.jl/src/common_defaults.jl 中定义的 ODE_DEFUALT_PROG_MESSAGE 的确切函数根本不会改变行为。
这些选项适用于任何支持它们的记录器。Juno(/Atom) 中的默认记录器支持它并使用这些消息。我认为 TerminalLoggers 不会,这是 TerminalLoggers 的问题。
推荐阅读
- python-3.x - 与在 Python 中使用 if-then 语句相比,控制要执行哪些代码块的更好方法?
- powershell - 以精确的时间导出 Windows 日志
- java - 在 maven 和 java 9+ 中使用 java 自动模块 cdi.api
- postgresql - 在 PostgresSQL 中将整数转换为时间戳
- sql - 如何将存储在表中的符号传递给存储过程条件?
- javascript - 使用 JS 单击链接时更改 CSS 中的设置
- python - 如何让 Pygame time.delay() 在不冻结窗口的情况下运行?
- heroku - 我无法通过网络登录heroku,该怎么办?
- jquery - 使用 jQuery 将 HTML 添加到 iFrame 并查找类
- java - Using mockito to mock the entity manager and test a stateless EJB