下边是截取的一部分代码,while循环的第二行是自己尝试用表达式的方法来创建一个变长的array,但是这样做我用@benchmark 测试的时候就会死循环,用@time没有问题,感觉是表达式影响了@benchmark中的某个变量? 不知道有没有正确的或者说比较好的方法来达到创建变长数组的效果,也感觉我的想法不够julia,好的想法应该怎么做呢?
function romberg(f::integral_function, ε::Float64)
k = 1
len = f.ub - f.lb
T_k = [(f.ub - f.lb) / 2. * (calculate(f, f.lb) + calculate(f, f.ub))]
println(T_k)
while true
x = f.lb:(len/2.):f.ub
T_k1 = eval(:(zeros($(k)+1)))
T_k1[1] = T_k[1] / 2.
for i=2:2:length(x)
T_k1[1] += len / 2. * calculate(f, x[i])
end
for i=2:(k+1)
T_k1[i] = 4^k / (4^k - 1) * T_k1[i-1] - 1 / (4^k - 1) * T_k[i-1]
end
# println(T_k1)
if abs(T_k1[k + 1] - T_k[k]) < ε
return T_k1[k + 1]
end
T_k = T_k1
k += 1
len /= 2.
end
end
完整的程序在这里 https://github.com/LDNN97/ToyBox.jl/blob/master/src/romberg.jl