Aliases: check.derivatives
### ** Examples library('nloptr') # example with correct gradient f <- function( x, a ) { return( sum( ( x - a )^2 ) ) } f_grad <- function( x, a ) { return( 2*( x - a ) ) } check.derivatives( .x=1:10, func=f, func_grad=f_grad, check_derivatives_print='none', a=runif(10) )
$analytic [1] 0.1613065 2.2635577 4.6319542 6.2664238 8.9317980 11.0216127 [7] 13.6312413 15.4049306 16.6889910 19.0104791 $finite_difference [1] 0.1613083 2.2635574 4.6319542 6.2664242 8.9317978 11.0216128 [7] 13.6312414 15.4049306 16.6889911 19.0104794 $relative_error [1] 1.099285e-05 9.936324e-08 8.143121e-09 5.662462e-08 2.198021e-08 [6] 1.277353e-08 4.519055e-09 3.657596e-09 7.639031e-09 1.139506e-08 $flag_derivative_warning [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# example with incorrect gradient f_grad <- function( x, a ) { return( 2*( x - a ) + c(0,.1,rep(0,8)) ) } check.derivatives( .x=1:10, func=f, func_grad=f_grad, check_derivatives_print='errors', a=runif(10) )
$analytic [1] 0.7819333 2.6384829 4.4793969 7.7746663 9.0447241 11.3201656 [7] 13.3047417 15.5656195 16.3296241 19.5519917 $finite_difference [1] 0.7819366 2.5384846 4.4793981 7.7746668 9.0447243 11.3201656 [7] 13.3047420 15.5656199 16.3296246 19.5519920 $relative_error [1] 4.285979e-06 3.939293e-02 2.751375e-07 6.869921e-08 1.953314e-08 [6] 4.483775e-09 2.024980e-08 3.174089e-08 2.829456e-08 1.459479e-08 $flag_derivative_warning [1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# example with incorrect gradient of vector-valued function g <- function( x, a ) { return( c( sum(x-a), sum( (x-a)^2 ) ) ) } g_grad <- function( x, a ) { return( rbind( rep(1,length(x)) + c(0,.01,rep(0,8)), 2*(x-a) + c(0,.1,rep(0,8)) ) ) } check.derivatives( .x=1:10, func=g, func_grad=g_grad, check_derivatives_print='all', a=runif(10) )
$analytic [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 1.0000000 1.010000 1.000000 1.00000 1.000000 1.00000 1.00000 1.00000 [2,] 0.6167866 2.532124 4.749818 6.40269 8.783182 10.48305 12.17313 15.76808 [,9] [,10] [1,] 1.00000 1.00000 [2,] 16.14638 19.58529 $finite_difference [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 1.000000 1.000000 1.000000 1.00000 1.000000 1.00000 1.00000 1.00000 [2,] 0.616787 2.432123 4.749818 6.40269 8.783182 10.48305 12.17313 15.76807 [,9] [,10] [1,] 1.00000 1.00000 [2,] 16.14638 19.58529 $relative_error [,1] [,2] [,3] [,4] [,5] [,6] [1,] 0.000000e+00 0.01000000 0.000000e+00 0.00000e+00 0.000000e+00 0.000000e+00 [2,] 6.575868e-07 0.04111662 6.473757e-08 2.08005e-08 3.712277e-08 2.483101e-08 [,7] [,8] [,9] [,10] [1,] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [2,] 8.962179e-10 2.805531e-09 2.723775e-10 1.583486e-09 $flag_derivative_warning [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE [2,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE