我正在尝试在几乎所有函数都被限制为只能接收浮点数的库中使用 ForwardDiff。我想概括这些函数签名,以便可以使用 ForwardDiff,同时仍然具有足够的限制性,因此函数只接受数值而不是日期之类的东西。我有很多具有相同名称但类型不同的函数(即,将“时间”作为浮点数或具有相同函数名称的日期的函数)并且不想从头到尾删除类型限定符。
最小的工作示例
using ForwardDiff
x = [1.0, 2.0, 3.0, 4.0 ,5.0]
typeof(x) # Array{Float64,1}
function G(x::Array{Real,1})
return sum(exp.(x))
end
function grad_F(x::Array)
return ForwardDiff.gradient(G, x)
end
G(x) # Method Error
grad_F(x) # Method error
function G(x::Array{Float64,1})
return sum(exp.(x))
end
G(x) # This works
grad_F(x) # This has a method error
function G(x)
return sum(exp.(x))
end
G(x) # This works
grad_F(x) # This works
# But now I cannot restrict the function G to only take numeric arrays and not for instance arrays of Dates.
有没有办法限制函数只接受数值(整数和浮点数)以及 ForwardDiff 使用但不允许符号、日期等的任何双数结构。