【发布时间】:2017-11-17 22:25:49
【问题描述】:
我正在编写一个计算重心插值公式权重的函数。忽略类型稳定性,这很容易:
function baryweights(x)
n = length(x)
if n == 1; return [1.0]; end # This is obviously not type stable
xmin,xmax = extrema(x)
x *= 4/(xmax-xmin)
# ^ Multiply by capacity of interval to avoid overflow
return [
1/prod(x[i]-x[j] for j in 1:n if j != i)
for i = 1:n
]
end
类型稳定性的问题是计算出n > 1 情况下的返回类型,以便我可以在n == 1 情况下返回正确类型的数组。有没有简单的技巧可以实现这一点?
【问题讨论】:
-
预期结果是什么?因为如果我调用
baryweights([1,2,3])意味着参数是Array{Int}结果是Array{Float64}!你指的真的是网上的问题吗? -
是的,这是需要的。我希望返回类型是
n > 1案例返回的任何值,但对于n = 1的任何值都应该是这样,包括n == 1。 -
但是什么是用例?我尝试了复数,但它不适用于
extrema函数。您能否举一些类型与预期不同的示例? -
Ints 作为输入将是我想要支持的情况。一旦我解决了极值问题,也许还有复数。