e04ya {NAGFWrappers}  R Documentation 
e04ya checks that a usersupplied function for evaluating a vector of functions and the matrix of their first derivatives produces derivative values which are consistent with the function values calculated.
e04ya(m, lsqfun, x, n = nrow(x))
m 
integer 
lsqfun 
function lsqfun must calculate the vector of values f_i(x) and their first derivatives ( \partial f_i)/( \partial x_j) at any point x. (The minimization functions mentioned in the Description in Fortran library documentation give you the option of resetting a argument to terminate immediately. e04ya will also terminate immediately, without finishing the checking process, if the argument in question is reset.)

x 
double array x[j]for j=1 . . . n, must be set to the coordinates of a suitable point at which to check the derivatives calculated by lsqfun. ‘Obvious’ settings, such as 0 or 1, should not be used since, at such particular points, incorrect terms may take correct values (particularly zero), so that errors can go undetected. For a similar reason, it is preferable that no two elements of x should have the same value. 
n 
integer: default = nrow(x) The number m of residuals, f_i(x), and the number n of variables, x_j. 
R interface to the NAG Fortran routine E04YAF.
FVEC 
double array Unless you set iflag negative in the first call of lsqfun, fvec[i] contains the value of f_i at the point supplied by you in x for i=1 . . . m. 
FJAC 
double array Unless you set iflag negative in the first call of lsqfun, fjac[i, j] contains the value of the first derivative ( \partial f_i)/( \partial x_j) at the point given in x, as calculated by lsqfun for j=1 . . . n for i=1 . . . m. 
IFAIL 
integer ifail =0unless the function detects an error or a warning has been flagged (see the Errors section in Fortran library documentation). 
NAG
http://www.nag.co.uk/numeric/FL/nagdoc_fl23/pdf/E04/e04yaf.pdf
ifail < 0 lsqfun = function(iflag, m, n, xc, ljc) { fvec < as.matrix(mat.or.vec(m, 1)) fjacc < as.matrix(mat.or.vec(ljc, n)) for (i in c(1:m)) { denom < xc[2] %*% t[i, 2] + xc[3] %*% t[i, 3] if (iflag != 1) { fvec[i] < xc[1] + t[i, 1]/denom  y[i] } if (iflag != 0) { fjacc[i, 1] < 1 dummy < 1/(denom %*% denom) fjacc[i, 2] < t[i, 1] %*% t[i, 2] %*% dummy fjacc[i, 3] < t[i, 1] %*% t[i, 3] %*% dummy } } list(IFLAG = as.integer(iflag), FVEC = as.matrix(fvec), FJAC = as.matrix(fjacc)) } m < 15 x < matrix(c(0.19, 1.34, 0.88), nrow = 3, ncol = 1, byrow = TRUE) iw < as.matrix(mat.or.vec(0, 0)) w < as.matrix(mat.or.vec(69, 1)) y < matrix(c(0.14, 0.18, 0.22, 0.25, 0.29, 0.32, 0.35, 0.39, 0.37, 0.58, 0.73, 0.96, 1.34, 2.1, 4.39), nrow = 1, ncol = 15, byrow = TRUE) t < matrix(c(1, 15, 1, 2, 14, 2, 3, 13, 3, 4, 12, 4, 5, 11, 5, 6, 10, 6, 7, 9, 7, 8, 8, 8, 9, 7, 7, 10, 6, 6, 11, 5, 5, 12, 4, 4, 13, 3, 3, 14, 2, 2, 15, 1, 1), nrow = 15, ncol = 3, byrow = TRUE) e04ya(m, lsqfun, x)