Действительно, это проблема округления. Если вы вернете точные значения обратно к funx()
, вы получите небольшое (т.е. очень отрицательное) значение: если вы округлите до шести цифр, вы получите большое значение.
oo <-optim(c(0,3), funx)
funx(oo$par)
## [1] -4.5036e+16
funx(round(oo$par,6))
## [1] 29566209
Это действительно плохое поведение, вам, возможно, придется принять это во внимание при работе с ней. (Я бы также настоятельно рекомендовал использовать оптимизацию на основе производных, либо рассчитать производные самостоятельно, либо использовать deriv()
.)