【问题标题】:Ranges with Dual Numbers双数范围
【发布时间】:2019-02-10 09:47:21
【问题描述】:

我在处理范围内的双数时遇到问题。具体来说:

using ForwardDiff: Dual
t = Dual.((0.0,10.0),0)
(t[1]:1/60:t[2])[end]

问题似乎是 [end] 使用 last 来计算步数,所以有些东西试图转换为 Integer 并失败。有谁知道解决这个问题的方法吗?

【问题讨论】:

  • 我认为问题的核心是Dual <: Realdiv(::Dual, ::Dual) 返回Dual,这违反了div 在实数上的合约,它应该返回一个整数。
  • 是的,那你如何解决这个问题?

标签: julia automatic-differentiation


【解决方案1】:

你可以这样修复它:

using ForwardDiff: Dual, value
t = Dual.((0.0,10.0),0)
Base.Integer(x::Dual) = Integer(value(x))
(t[1]:1/60:t[2])[end]

但可能 DualNumbers.jl 维护者应该决定这是否是一般的预期行为。我会说是的,因为Dual 不是Integer 的子类型。它也不应该破坏任何东西,因为之前没有定义方法Integer(::Dual),所以它不能在任何地方使用。

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多