Having a function declaration inside a loop seems to me somewhat awkward, …but it works. Which would be a better/recommended way оf doing this?
using Optim
euribor = [0.201 0.335 0.406 0.516 0.652 0.805 0.964 1.119 1.264 1.392 1.604 1.824 2.01 2.079 2.098; 0.202 0.336 0.405 0.51 0.64 0.785 0.936 1.086 1.225 1.35 1.562 1.783 1.971 2.041 2.061]
function nss(p)
t = [1.0 , 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 15.0, 20.0, 25.0, 30.0];
p[1] .+
p[2] * (1 .- exp.(-t/p[5])) ./ (t/p[5]) .+
p[3] * ((1 .- exp.(-t/p[5])) ./ (t/p[5]) .- exp.(-t/p[5])) .+
p[4] * ((1 .- exp.(-t/p[6])) ./ (t/p[6]) .- exp.(-t/p[6]))
end
function lsquares(p,observed)
sum((nss(p) .- observed) .^2)
end
for i = 1:2
ice(p) = lsquares(p, euribor[i,:])
p0 = [0.0, 0.0, 0.0, 0.0, 1.0, 1.0]
resp = optimize(ice, p0, BFGS())
println(Optim.minimizer(resp),Optim.minimum(resp))
end