📄 graderr.c
字号:
/*
* MATLAB Compiler: 2.0.1
* Date: Tue May 08 21:28:22 2001
* Arguments: "-B" "sgl" "-m" "-W" "mainhg" "-L" "C" "asufit.m" "absfun.m"
* "absfunfree.m" "absfunshift.m" "absfunwidth.m" "dispfit.m" "dispfitdisp.m"
* "dispfitfree.m" "dispfitwidth.m" "seqmodfree.m" "spcfun.m" "spcfun1.m"
* "atamult.m" "aprecon.m"
*/
#include "graderr.h"
/*
* The function "Mgraderr" is the implementation version of the "graderr"
* M-function from file "C:\MATLABR11\toolbox\optim\graderr.m" (lines 1-22). It
* contains the actual compiled code for that M-function. It is a static
* function and must only be called from one of the interface functions,
* appearing below.
*/
/*
* function graderr(finite_diff_deriv, analytic_deriv, evalstr2)
*/
static void Mgraderr(mxArray * finite_diff_deriv,
mxArray * analytic_deriv,
mxArray * evalstr2) {
mxArray * ans = mclInitializeAns();
mxArray * err = mclGetUninitializedArray();
mclValidateInputs(
"graderr", 3, &finite_diff_deriv, &analytic_deriv, &evalstr2);
mclCopyArray(&finite_diff_deriv);
mclCopyArray(&analytic_deriv);
/*
* %GRADERR Used to check gradient discrepancy in optimization routines.
*
* % Copyright (c) 1990-98 by The MathWorks, Inc.
* % $Revision: 1.11 $ $Date: 1998/07/22 23:08:32 $
*
* finite_diff_deriv = full(finite_diff_deriv);
*/
mlfAssign(&finite_diff_deriv, mlfFull(finite_diff_deriv));
/*
* analytic_deriv = full(analytic_deriv);
*/
mlfAssign(&analytic_deriv, mlfFull(analytic_deriv));
/*
* err=max(max(abs(analytic_deriv-finite_diff_deriv)));
*/
mlfAssign(
&err,
mlfMax(
NULL,
mlfMax(
NULL,
mlfAbs(mlfMinus(analytic_deriv, finite_diff_deriv)),
NULL,
NULL),
NULL,
NULL));
/*
* disp(sprintf('Maximum discrepancy between derivatives = %g',err));
*/
mlfDisp(
mlfSprintf(
NULL,
mxCreateString("Maximum discrepancy between derivatives = %g"),
err,
NULL));
/*
* if (err > 1e-6*norm(analytic_deriv) + 1e-5)
*/
if (mlfTobool(
mlfGt(
err,
mlfPlus(
mlfMtimes(mlfScalar(1e-6), mlfNorm(analytic_deriv, NULL)),
mlfScalar(1e-5))))) {
/*
* disp('Warning: Derivatives do not match within tolerance')
*/
mlfDisp(
mxCreateString("Warning: Derivatives do not match within tolerance"));
/*
* disp('Derivative from finite difference calculation:')
*/
mlfDisp(
mxCreateString("Derivative from finite difference calculation:"));
/*
* finite_diff_deriv
*/
mclPrintArray(finite_diff_deriv, "finite_diff_deriv");
/*
* disp(['User-supplied derivative, ', evalstr2, ' : '])
*/
mlfDisp(
mlfHorzcat(
mxCreateString("User-supplied derivative, "),
evalstr2,
mxCreateString(" : "),
NULL));
/*
* analytic_deriv
*/
mclPrintArray(analytic_deriv, "analytic_deriv");
/*
* disp('Difference:')
*/
mlfDisp(mxCreateString("Difference:"));
/*
* analytic_deriv - finite_diff_deriv
*/
mclPrintAns(&ans, mlfMinus(analytic_deriv, finite_diff_deriv));
/*
* %disp('Strike any key to continue or Ctrl-C to abort')
* %pause
* end
*/
}
mxDestroyArray(analytic_deriv);
mxDestroyArray(ans);
mxDestroyArray(err);
mxDestroyArray(finite_diff_deriv);
}
/*
* The function "mlfGraderr" contains the normal interface for the "graderr"
* M-function from file "C:\MATLABR11\toolbox\optim\graderr.m" (lines 1-22).
* This function processes any input arguments and passes them to the
* implementation version of the function, appearing above.
*/
void mlfGraderr(mxArray * finite_diff_deriv,
mxArray * analytic_deriv,
mxArray * evalstr2) {
mlfEnterNewContext(0, 3, finite_diff_deriv, analytic_deriv, evalstr2);
Mgraderr(finite_diff_deriv, analytic_deriv, evalstr2);
mlfRestorePreviousContext(
0, 3, finite_diff_deriv, analytic_deriv, evalstr2);
}
/*
* The function "mlxGraderr" contains the feval interface for the "graderr"
* M-function from file "C:\MATLABR11\toolbox\optim\graderr.m" (lines 1-22).
* The feval function calls the implementation version of graderr through this
* function. This function processes any input arguments and passes them to the
* implementation version of the function, appearing above.
*/
void mlxGraderr(int nlhs, mxArray * plhs[], int nrhs, mxArray * prhs[]) {
mxArray * mprhs[3];
int i;
if (nlhs > 0) {
mlfError(
mxCreateString(
"Run-time Error: File: graderr Line: 1 Column: "
"0 The function \"graderr\" was called with mor"
"e than the declared number of outputs (0)"));
}
if (nrhs > 3) {
mlfError(
mxCreateString(
"Run-time Error: File: graderr Line: 1 Column:"
" 0 The function \"graderr\" was called with m"
"ore than the declared number of inputs (3)"));
}
for (i = 0; i < 3 && i < nrhs; ++i) {
mprhs[i] = prhs[i];
}
for (; i < 3; ++i) {
mprhs[i] = NULL;
}
mlfEnterNewContext(0, 3, mprhs[0], mprhs[1], mprhs[2]);
Mgraderr(mprhs[0], mprhs[1], mprhs[2]);
mlfRestorePreviousContext(0, 3, mprhs[0], mprhs[1], mprhs[2]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -